**
STM32定时器原理
**
STM32F103C8中的定时器
常规定时器 | 功能 |
---|---|
基本定时器(TIM6、TIM7) | 几乎没有任何输入/输出通道,常用作时基,实现基本的定时/计数功能 |
通用定时器(TIM2、TIM3、TIM4、TIM5) | 具备多路独立的捕获和比较通道,可以完成定时/计数、输入捕获、输出比较等功能 |
高级定时器 (TIM1、TIM8) | 除具备通用定时器的功能外,带死区控制的互补信号输出、紧急刹车关断输入等功能,可用于电机控制和数字电源设计 |
基本定时器的内部结构框图
STM32-PWM相关介绍
STM32-PWM是STM32系列微控制器上的一种重要外设,用于生成脉宽调制(PWM)信号。脉宽调制技术在许多应用中都起着关键作用,如电机控制、LED亮度调节、音频处理等。STM32PWM模块提供了灵活的配置选项和高精度的PWM输出能力。
PWM工作原理
PWM是一种周期性的方波信号,通过调整方波的高电平时间(占空比)来控制输出信号的特性。PWM信号的频率和占空比可以根据应用需求进行配置。在STM32PWM模块中,通过设置定时器的计数周期和比较值,可以实现不同频率和占空比的PWM输出。
STM32PWM模块
STM32PWM模块通常由一个或多个通用定时器(TIM)和相关的GPIO引脚组成。通用定时器提供了灵活的PWM配置选项,可以根据需要进行定时器和GPIO引脚的映射、预分频设置、计数周期和比较值的设定等。
PWM参数配置
为了配置和控制STM32PWM模块,我们可以使用相应的库函数或直接操作寄存器。以下是一些常用的PWM参数和配置选项:
频率设置:通过设置定时器的计数周期来控制PWM信号的频率。
频率 = 定时器时钟频率 / (预分频系数 * 计数周期)
占空比设置:通过设置比较值来控制PWM信号的占空比。
占空比 = (比较值 / 计数周期) * 100%**
极性设置:可以选择正极性或反极性,以控制PWM信号的电平极性。
中断使能:可以选择是否使能PWM定时器的中断功能,用于触发中断任务。
任务一:用定时器计数方式实现LED的亮灭
要求:使用STM32F103的
Tim2~Tim5其一定时器的某一个通道pin(与GPIOx管脚复用,见下图),连接一个LED,用定时器计数方式,控制LED以2s的频率周期性地亮-灭。
STMCubeMX界面
设置SYS和RCC
选择PA6管脚进行输出
设置TIM3
设置相关参数
NVIC勾选
生成项目
keil界面
在main函数中加入以下代码
// 启动 PWM 和定时器
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
// 启动定时器并启用中断
HAL_TIM_Base_Start_IT(&htim3);
在main函数后重写中断函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
if (htim->Instance == TIM3) {
static int toggle = 0;
if (toggle == 0) {
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
toggle = 1;
} else {
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET);
toggle = 0;
}
}
}
编译结果
烧录结果
VID_20231108_210518
任务二:呼吸灯
要求:接上,采用定时器pwm模式,让 LED 以呼吸灯方式渐亮渐灭,周期为1~2秒,自己调整到一个满意效果。使用Keil虚拟示波器,观察
pwm输出波形。
在以上项目的基础上,在main函数的开头加入以下变量声明
uint16_t pwmVal=0;
uint8_t dir=1;
开启时钟
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);
在While循环里面添加以下代码
while (pwmVal< 500)
{
pwmVal++;
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2, pwmVal);
HAL_Delay(1);
}
while (pwmVal)
{
pwmVal--;
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2, pwmVal);
HAL_Delay(1);
}
HAL_Delay(200);
编译并烧录得出以下结果
波形如下:
总结
本次实验的内容为STM32的定时器和PWM的应用编程。在STMCubeMX中用hal库编写程序能够轻松配置定时器和PWM的参数。实验过程中我认识了定时器和PWM的工作原理,学会了在STMCubeMX中配置PWM输出,包括设置占空比、频率和极性等。还掌握了中断服务程序、定时器中断的编写方法。