使用CubeMX对STM32进行PWM配置
一、使用CubeMX进行基本配置 |
1、选择定时器通道
随便选择一个为例子,TIM2
的channel 1
2、对TIM2 channel1的预分频器、自动重装值等进行设置
时钟配置的是72MHZ的,预分频器就设置的71
关于PWM的模式选择
一、向上计数模式(Up-Counting):
1、在向上计数模式下,PWM计数器从0开始递增计数,直到达到预设的自动重载值(ARR)。
2、一旦计数器达到ARR值,它将产生一个计数器溢出事件,并且计数器会重新从0开始计数。
3、PWM的输出电平会根据计数器的值与比较匹配寄存器(CCR)之间的关系来确定。通常,当计数器的值小于CCR时,PWM输出高电平;当计数器的值大于或等于CCR时,PWM输出低电平。
二、向下计数模式(Down-Counting):
1、在向下计数模式下,PWM计数器从预设的自动重载值(ARR)开始递减计数,直到达到0。
一旦计数器达到0值,它将产生一个计数器溢出事件,并且计数器会重新从ARR开始递减计数。
2、PWM的输出电平也会根据计数器的值与CCR之间的关系来确定,与向上计数模式类似。
三、上下计数模式(Up-Down Counting):
1、在上下计数模式下,PWM计数器首先从0开始递增计数,直到达到预设的自动重载值(ARR)。然后,计数器从ARR开始递减计数,直到达到0值。这个过程会不断重复,形成一个周期性的上下计数循环。
2、PWM的输出电平在计数器的值小于CCR时输出高电平,而在计数器的值大于或等于CCR时输出低电平
PWM频率:Freq = CK_PSC/(PSC+1)/(ARR+1)
PWM占空比:Duty = CRR/(ARR+1)
PWM分辨率:Reso = 1/(ARR+1)
二、在keil 5 中进一步完善 |
1、开启定时器1的通道1的PWM输出
在stm32f1xx_hal_tim.c
里面找到HAL_TIM_PWM_Start()
函数开启定时器1的通道1的PWM输出
/* USER CODE BEGIN TIM2_Init 2 */
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
/* USER CODE END TIM2_Init 2 */**
在主函数里面或者其它地方都可以,我是在定时器的初始化里面开启的
2、改变CCR的值(改变占空比)
有两种方法,一种是调用hal库里面的__HAL_TIM_SetCompare()
函数,还有一种就是直接操作寄存器`
/* USER CODE BEGIN 2 */
int speed=0;
__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_1,speed);
TIM2->CCR1 = speed; 与上方作用相同
/* USER CODE END 2 */