STM32PWM小结
PWM:通俗的讲,就是对高地电平持续时间的控制。
图1
如上图所示,当计数值<CCR时,被判定为低电平。当,CCR<计数值<ARR时,被判定为高电平。
第一步,先初始化PWM的时基函数 HAL_TIM_PWM_Init(&tim3_handler);这个函数的入口参数tim3_handler是个指针,又回到了TIM_HandleTypeDef这个结构体,把Instance和Init进行相关的初始化。
第二步,配置完初始化函数之后,接下来就是配置通道函数。HAL_TIM_PWM_ConfigChannel(&tim3_handler,&TIM3_OC_Handler,TIM_CHANNEL_4);
第三步:使能定时器,相当于启动定时器。HAL_TIM_PWM_Start(&tim3_handler,TIM_CHANNEL_4);
三个步骤可以放到一个函数中,进行书写。
void TIM3_PWM_Init() { tim3_handler.Instance = TIM3; tim3_handler.Init.CounterMode = TIM_COUNTERMODE_UP; tim3_handler.Init.Prescaler = 90-1; tim3_handler.Init.Period = 500-1; //可理解为自动装载值,ARR. HAL_TIM_PWM_Init(&tim3_handler); TIM3_OC_Handler.OCMode = TIM_OCMODE_PWM1; TIM3_OC_Handler.OCPolarity = TIM_OCPOLARITY_LOW; TIM3_OC_Handler.Pulse = 250; HAL_TIM_PWM_ConfigChannel(&tim3_handler,&TIM3_OC_Handler,TIM_CHANNEL_4); HAL_TIM_PWM_Start(&tim3_handler,TIM_CHANNEL_4); }
void TIM_SetCompare(u32 compare) { TIM3->CCR4 = compare; }
定时器时钟和通道IO口时钟可以在回调函数中进行。HAL_TIM_PWM_MspInit
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) { if(htim->Instance == TIM3 ) { __HAL_RCC_TIM3_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_InitTypeDef GPIO_Initure; GPIO_Initure.Pin=GPIO_PIN_1; //PA9 GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推挽输出 GPIO_Initure.Pull=GPIO_PULLUP; //上拉 GPIO_Initure.Speed=GPIO_SPEED_FAST; //高速 GPIO_Initure.Alternate=GPIO_AF2_TIM3; //复用为USART1 HAL_GPIO_Init(GPIOB,&GPIO_Initure); //初始化PB1 } }
PWM的相关配置已经完毕,就可以写主函数了
int main(void) { u8 dir=1; u16 led0pwmval=0; HAL_Init(); //初始化HAL库 Stm32_Clock_Init(360,25,2,8); //设置时钟,180Mhz delay_init(180); //初始化延时函数 uart_init(115200); //初始化USART LED_Init(); //初始化LED KEY_Init(); //初始化按键 TIM3_PWM_Init(); while(1) { delay_ms(10); if(dir)led0pwmval++; //dir==1 led0pwmval递增 else led0pwmval--; //dir==0 led0pwmval递减 if(led0pwmval>300)dir=0; //led0pwmval到达300后,方向为递减 if(led0pwmval==0)dir=1; //led0pwmval递减到0后,方向改为递增 TIM_SetCompare(led0pwmval); //修改比较值,修改占空比 } }
主函数中前面的初始化和按键,LED的初始化差不多
主要是while大循环里面的语句。可以看到dir这个关键的变量,起着灯光亮度由亮变暗,暗变亮的作用。
TIM_SetCompare(led0pwmval); //修改比较值,修改占空比这个函数正好和图1是相对应的,
2019-10-14
21:49:58