在线时间125 小时
UID3320203
ST金币1955
蝴蝶豆0
注册时间2016-10-22
该用户从未签到
金牌会员
- 最后登录
- 2018-12-27
|
- #include "stm32f10x.h"
- void STM32_TIM_GPIO_Configuration(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);
- <img src="https://www.stmcu.org.cn/module/forum/forum.php?mod=image&aid=390763&size=300x300&key=ccf1e09fa4605482&nocache=yes&type=fixnone" aid="attachimg_390763" alt="" border="0">
- <img src="https://www.stmcu.org.cn/module/forum/forum.php?mod=image&aid=390764&size=300x300&key=c2083d0c105d5af9&nocache=yes&type=fixnone" aid="attachimg_390764" alt="" border="0">
- //这里TIM3的通道1是GPIOA_Pin_6,通道2是GPIOA_Pin_7;通道3是GPIOB_Pin_0;
- //这里TIM3的通道4是GPIOB_Pin_1;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- //使用PWM的功能需要设置成AF_PP模式
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
- GPIO_Init(GPIOA,&GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
- GPIO_Init(GPIOB,&GPIO_InitStructure);
- }
- void NVIC_TIM3Configuration(void)//配置TIM3的优先级
- {
- NVIC_InitTypeDef NVIC_InitStructure;
-
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
-
- NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
-
- NVIC_Init(&NVIC_InitStructure);
- }
- TIM3_PWM_Init(void)
- {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//TIM定时器的配置
- TIM_OCInitTypeDef TIM_OCInitStructure;//TIMPWM的
-
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
- <img src="https://www.stmcu.org.cn/module/forum/forum.php?mod=image&aid=390765&size=300x300&key=561e9645b6d91c33&nocache=yes&type=fixnone" aid="attachimg_390765" alt="" border="0">
- //使能TIM3的时钟线;
-
- <img src="https://www.stmcu.org.cn/module/forum/forum.php?mod=image&aid=390766&size=300x300&key=ab4502d35588f011&nocache=yes&type=fixnone" aid="attachimg_390766" alt="" border="0">
- TIM_TimeBaseInitStructure.TIM_Prescaler = 100-1;
- //分频;意思就是将72MHz的频率分成多少;这里是分成72M/100 = 720KHz了;
- TIM_TimeBaseInitStructure.TIM_Period = 720-1;
- //这个是定时器需要计数的最大位置;就是从0计数到Period;
- //这里的预分频系数(Presecaler)和预装值(Period)的乘积 表示频率;
- TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
- //这个是定时器计数的模式,可以向下计数,也可以向上计数;
- TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;
- //这个是预分频系数,一般不去操作它;
- TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
- //初始化TIM3
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
- //这个是定时器的模式;在这里使用的是PWM功能;
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
- //这个是比较输出使能;意思就是到底输不输出到相应的引脚;
- TIM_OCInitStructure.TIM_Pulse = 600;
- //这个是比较捕获的脉冲数就是在一个周期中捕获多少个1(0);这里Pulse/Period就代表的是占空比;
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
- //这个是输出极性:这里选择的是输出极性高,当然你也可以设置Low;
- TIM_OC1Init(TIM3,&TIM_OCInitStructure);
- //初始化通道1;
- TIM_OC2Init(TIM3,&TIM_OCInitStructure);
- //初始化通道2;
- TIM_OC3Init(TIM3,&TIM_OCInitStructure);
- //初始化通道3;
- TIM_OC4Init(TIM3,&TIM_OCInitStructure);
- //初始化通道4;
- TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
- //使能或者失能 TIMx 在 CCR2 上的预装载寄存器
- TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
- //使能或者失能 TIMx 在 CCR2 上的预装载寄存器
- TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable);
- //使能或者失能 TIMx 在 CCR2 上的预装载寄存器
- TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable);
- //使能或者失能 TIMx 在 CCR2 上的预装载寄存器
-
- //TIM_ITConfig(TIM3,TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4,ENABLE);
- //使能标志位CC1,CC2,CC3,CC4
- TIM_Cmd(TIM3,ENABLE);
- //使能TIM;
-
-
-
- }
- // void TIM3_IRQHandler(void)
- // {
- // TIM_ClearITPendingBit(TIM3,TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4);
- // Flag = 1;
- // }
- void Delay(uint32_t nCount)
- {
- while(--nCount);
- }
- int main()
- {
- uint16_t i=0;
- STM32_TIM_GPIO_Configuration();
- NVIC_TIM3Configuration();
- TIM3_PWM_Init();
- while(1)
- {
- TIM3->CCR2 = 500;
- for(i=0;i<499;i++)
- {
- Delay(0XFFFFF);
- TIM3->CCR2-=1;
- }
- for(i=0;i<499;i++)
- {
- Delay(0XFFFFF);
- TIM3->CCR2+=1;
- }
- }
- }终于调出PWM了,在这里不敢独享,分享给那些还在调试PWM的人;
复制代码
|
|