运行环境
工具 | 版本 | 说明 |
---|---|---|
STM32CubeMX | V5.0.0 | 建议相同 |
Keil5 | V5.1.5 | 建议相同 |
简介
本例程主要讲解如何使用定时器实现一个定时器中断,每秒打印一串数据
STM32CubeMx基本配置
基础配置过程请参考 STM32CubeMx(Keil5)开发之路—配置第一个项目
为了方便调试,重定向printf,进行usart设置
1——点击USART1进行设置
2——模式选择Asynchronous异步传输
3——可以看到右边自动出现了Tx和Rx
4——可以自行设置波特率,停止位,校验位等参数
![](https://i-blog.csdnimg.cn/blog_migrate/14f1d988f3456557099853677d7e1e9c.png)
1——点击Clock Configuration进行设置
2——注意这几个地方的时钟(后面进行分频设置的时候需要)
![](https://i-blog.csdnimg.cn/blog_migrate/1c5fea13aa1247bc4f122fe45164affe.png)
点击TIM1进行设置
1——时钟源Clock Source选择Intemal Clock
2——预分频选择36000-1也就是35999(注意16位最大只能表示65535)
3——自动重装载值设置为2000-1也就是1999
讲解:定时器更新中断的频率=时钟频率/(预分频+1)/(自动重装载值+1)
即 :72000000/36000/2000=1(HZ),也就是每秒进一次中断
![](https://i-blog.csdnimg.cn/blog_migrate/8a6250bf680cfe488a4b8bd3e283a885.png)
在NVIC Setting里面勾选TIM1 update interrupt
![](https://i-blog.csdnimg.cn/blog_migrate/d9e5ed99877220f9ac18243de55db770.png)
代码修改
1——选择main.c文件
2——在USER CODE中添加如下代码,重定向printf
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch,1, 0xFFFF);
return ch;
}
![](https://i-blog.csdnimg.cn/blog_migrate/de7819a02fbf55960ee5d3c10e0ec230.png)
在主函数中添加如下代码启动定时器
![](https://i-blog.csdnimg.cn/blog_migrate/05ab2b85ca52d8e41678d45061423f92.png)
重写中断函数,打印"123456",即每秒打印一次
![](https://i-blog.csdnimg.cn/blog_migrate/3d0f20769a6457911f4b9deec87aa8cc.png)
烧录代码后打开出口调试助手,正确的话会看到如下输出
![](https://i-blog.csdnimg.cn/blog_migrate/10fb70145fb6d9049964d11abe8ffece.png)