STM32CubeMX | STM32使用HAL库实现定时器PWM输出


扫描以下二维码,关注公众号雍正不秃头获取更多STM32资源及干货!

STM32CubeMX | STM32使用HAL库实现定时器PWM输出_HAL


环境:
1、STM32CubeMX 5.3
2、Atollic TrueSTUDIO for STM32 9.3.0
3、战舰迷你板(stm32f103rb)

本章效果为LED灯由PWM控制,由暗到亮,再由亮到暗,反复循环。


(一)配置LED灯引脚为输入模式

STM32CubeMX | STM32使用HAL库实现定时器PWM输出_公众号_02

(二)配置定时器

频率的计算方法:

STM32CubeMX | STM32使用HAL库实现定时器PWM输出_STM32_03


定时器配置频率为10KHZ,所以ARR=99,PSC=71,占空比范围就是ARR的范围:0-100,100就是全为高:

STM32CubeMX | STM32使用HAL库实现定时器PWM输出_定时器_04


初始化定时器后要使能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…