一、STM32定时器
TIM(Timer)定时器是一种用于计数和定时的高精度硬件设备。它内部包含16位计数器、预分频器和自动重装寄存器的时基单元,可以实现对输入时钟的精确计数。当计数值达到设定值时,定时器会触发中断,以便执行相应的操作。这种定时器具有高精度、长定时时间的优点,因此在许多嵌入式系统中得到广泛应用。
二、PWM
1、PWM介绍
PWM,即脉冲宽度调制,是英文“Pulse Width ModulaTIon”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
2、PWM控制技术
PWM(Pulse Width ModulaTIon)控制技术就是对脉冲的宽度进行调制的技术,即通过对一系列脉冲的宽度进行调制,来等效的获得所需要的波形(含形状和幅值)。面积等效原理是PWM技术的重要基础理论。一种典型的PWM控制波形SPWM:脉冲的宽度按正弦规律变化。而和正弦波等效的PWM波形称为SPWM波。
脉宽调制(PWM,Pulse Width ModulaTIon)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。
三、用定时器计数方式,控制LED以2s的频率周期性地亮-灭
打开STM32Cube,创建一个新项目,设置RCC
设置SYS
设置PA5端口
设置定时器
配置中断
修改时钟
创建项目
编写代码
(1)再main主函数立面添加定时器启动代码
HAL_TIM_Base_Start_IT(&htim2); //打开定时器TIM2
(2)在mian函数中加入定时器回调中断函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
//这里灯亮一秒,灭一秒,则中断产生20次改变一次电平
static uint32_t time_cnt =0; //记录中断次数
if(htim->Instance == TIM2)
{
if(++time_cnt >= 20) //判断是否已经达到一秒
{
time_cnt =0; //点灯用的中断次数归零
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5); //改变LED所接引脚的电平
}
}
}
编译后,打开烧录程序
采用定时器pwm模式,让 LED 以呼吸灯方式渐亮渐灭,周期为1~2秒
打开项目后在main.c中定义一个变量来记录 pwm 波形的占空比
uint16_t pwm=10;
主函数为
int main(void)
{
HAL_Init();
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);
MX_GPIO_Init();
MX_TIM2_Init();
MX_USART1_UART_Init();
MX_NVIC_Init();
while (1)
{
while(pwm<500)
{
pwm = pwm + 10;
__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,pwm);
HAL_Delay(20);//延时20毫秒
}
while(pwm>0)
{
pwm = pwm - 10;
__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,pwm);
HAL_Delay(20);
}
}
/* USER CODE END 3 */
}
四 总结
本次实验对定时器进行了学习,在烧录过程中出现了很多问题,查询了很多别人的经验,但是实验做得还是不是很完善,希望在之后的学习可以更加的完成任务,通过本次的练习,让我更加深入的理解了STM32的定时器
功能以及PWM的相关知识。