文章目录
一、STM32定时器控制流水灯
(1)创建项目
1、创建新项目,创建过程不多赘述,创建完毕后得到如下界面:
2、设置RCC
点击RCC,设置HSE为Crystal/Ceramic Resonator。
3、设置调试接口
点击SYS后,选择Debug,将其选择为Serial Wire
4、设置GPIO
选择GPIO后,找到PC15,将其设置为GPIO-Output,最后将其命名为D1
5、设置定时器
点击TIM2,设置Clock Source为Internal Clock,修改如下参数
由于时钟我们一般会配置为72MHZ,所以72分频后得到1MHZ的时钟。1MHZ的时钟,计数20000次,得到时间20000/1000000=0.02秒。也就是每隔0.02秒定时器2会产生一次定时中断。
6、配置中断
点击NVIC,勾选如下选项
同时点击Code generator,勾选如下选项
7、配置时钟
将时钟设置成如下参数
8、生成项目
(2)编写代码
1、在main.c 中加入如下代码
HAL_TIM_Base_Start_IT(&htim2);
2、在main.c中加入另一段代码
该函数为定时器的中断回调函数,当产生定时中断的时候,会自动调用这个函数。
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
static uint32_t time_cnt =0;
if(htim->Instance == TIM2)
{
if(++time_cnt >= 100)
{
time_cnt =0;
HAL_GPIO_TogglePin(D1_GPIO_Port,D1_Pin);
}
}
}
3、运行程序
没有报错!烧录文件
4、烧录代码
烧录成功!
5、实验结果
(3)定时器实现串口通信发送“hello window”
该模块与定时器实现LED灯的做法基本相似,只不过加上了串口通信的内容
1、项目变更
1、返回STM32CubeMX
2、建立项目
2、建立项目
3、调试程序
结果无误!
4、烧录程序
5、实验结果
二、PWM信号实现呼吸灯
(1)创建项目
1、老样子过程不赘述,打开项目
2、设置外部时钟
点击RCC,将HSE选项选至Crystal/Ceramic Resonator。
3、配置调试接口
点击SYS,将Debug选项选至Serial Wire。
4、配置定时器
点击TIM2,将Clock Source选项选至Internal Clock选项,再将Channel2选择为PWM Generate CH2
将参数设置成如下图所示的大小
5、时钟配置
设置如下参数
6、生成项目
(2)编写代码
1、在main.c函数下加入如下代码
存储占空比
uint16_t duty_num = 10;
2、main.c下添加另一组代码,代码位置如图
输出PWM
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);
3、再添加一组代码到main.c函数中
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_Delay(50);
duty_num = duty_num + 10;
if(duty_num > 500)
{
duty_num = 0;
}
__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,duty_num);
}
4、调试程序
5、调试成功,烧录代码
6、实验结果
三、总结
这次实验主要是学习定时器的用法,通过实验我发现,定时器的功能很强大,但是相比较其他方法之下略显复杂,不仅要设置不同的端口,参数也要靠自己去设置,但另一方面来看,这种自己设置参数能够更好的满足的自己的需求。