STM32CubeMX | STM32使用HAL库实现定时器PWM输出
原创
©著作权归作者所有:来自51CTO博客作者觉皇不秃头的原创作品,请联系作者获取转载授权,否则将追究法律责任
STM32CubeMX | STM32使用HAL库实现定时器PWM输出
扫描以下二维码,关注公众号雍正不秃头
获取更多STM32资源及干货!
环境:
1、STM32CubeMX 5.3
2、Atollic TrueSTUDIO for STM32 9.3.0
3、战舰迷你板(stm32f103rb)
本章效果为LED灯由PWM控制,由暗到亮,再由亮到暗,反复循环。
(一)配置LED灯引脚为输入模式
(二)配置定时器
频率的计算方法:
定时器配置频率为10KHZ,所以ARR=99,PSC=71,占空比范围就是ARR的范围:0-100,100就是全为高:
初始化定时器后要使能PWM输出:
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
改变捕获比较值,也就是改变占空比:
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, val);
正点原子mini板的PA8是led灯,定时器3的PWM输出通道2是PA7,所以在板子上用跳线帽将PA8和PA7连接起来即可:
int main(void)
{
uint8_t mode = 1;
uint32_t led0pwmval = 0;
int i = 0;
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM3_Init();
MX_USART1_UART_Init();
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); // 使能PWM输出
while (1)
{
if (mode)
led0pwmval++;
else
led0pwmval--;
if (led0pwmval >= 100)
mode = 0;
if (led0pwmval == 0)
mode = 1;
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, led0pwmval); // 改变占空比
HAL_Delay(10);
i++;
if (i >= 100)
{
i = 0;
HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
}
}
}
ends…