欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【STM32】STM32CUBEMX系列教程:定时器PWM输出实验

程序员文章站 2022-06-08 20:02:07
...

STM32CUBEMX系列教程:定时器PWM输出实验


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

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


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

【STM32】STM32CUBEMX系列教程:定时器PWM输出实验

(二)配置定时器

频率的计算方法:
【STM32】STM32CUBEMX系列教程:定时器PWM输出实验
定时器配置频率为10KHZ,所以ARR=99,PSC=71,占空比范围就是ARR的范围:0-100,100就是全为高:
【STM32】STM32CUBEMX系列教程:定时器PWM输出实验
初始化定时器后要使能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…