问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

STM32G030C8T6:定时器1ms中断(以64MHz外部晶振为例)

创作时间:
作者:
@小白创作中心

STM32G030C8T6:定时器1ms中断(以64MHz外部晶振为例)

引用
CSDN
1.
https://blog.csdn.net/AnChenliang_1002/article/details/136213862

本文详细介绍了如何使用STM32G030C8T6微控制器通过定时器实现1ms中断,并控制PB9引脚输出高低电平以实现LED灯的闪烁。文章通过STM32CubeMX工具,从新建工程到代码实现,给出了完整的配置步骤和详细说明。

本专栏记录STM32开发各个功能的详细过程,方便自己后续查看,当然也供正在入门STM32单片机的兄弟们参考;
本小节的目标是,系统主频64 MHZ,采用高速外部晶振,通过定时器3 每秒中断控制 PB9 引脚输出高低电平,从而实现 LED 灯的亮灭。
原理:通过配置定时器3每1mS进入中断一次,每进入中断服务程序一次,增加一次计数,计数到达500,控制PB9引脚输出高或低电平,从而实现1S钟周期闪烁。。
涉及到的知识:配置UART引脚,定时器中断,STM32CubeMX的使用

文章目录

  • 1 新建工程
  • 2 配置SWD下载引脚
  • 3 配置GPIO输出
  • 4 配置RCC
  • 5 设置系统主频
  • 6 定时器配置
  • 6.1 错误配置记录
  • 6.2 正确配置
  • 7 生成工程
  • 8 增加代码实现每1S 控制PB9 引脚输出高或者低电平

1 新建工程

点击File 菜单下的New Project

选择芯片型号,如下图所示先输入芯片型号,目前这边输入STM32G030C8,
双击选择,就确定了芯片型号,界面会变成如下图所示

2 配置SWD下载引脚

如下图所示,在Pinout&Configuration 栏目的System Core 下,先点击SYS,再勾选Serial Wire 框,
配置好SWD 下载引脚设置:

3 配置GPIO输出

按下图 的1,2,3 步骤完成PB9 引脚配置成GPIO 输出设置:
配置成功后如下图所示:

4 配置RCC

如下图,先点击RCC,在HSE 配置中选择Crystal/Ceramic Resonator 外部晶振设

5 设置系统主频

如下图, 先点击Clock Configuration 栏目,按下图的1,2,3,4 步骤完成系统64MHZ 主频设置:

6 定时器配置

6.1 错误配置记录

如下图的1,2,3,4 步骤完成定时器1ms 计时:
(注意,这里我踩了一个坑,误以为Clock source中的Internal Clock为内部时钟,而我是使用的外部晶振,所以我一直选择了第二个选项ETR2。其实第二个选项是ETR2 外部触发输入(ETR)(仅适用TIM2,3,4),意思外接界的其他信号源;正确的应该是:外部晶振也是internal clock ,相当于使用外部时钟分频来的时钟,只要你rcc配置的是外部晶振就没事),所以下面的示例是错误的,正确过程请参考6.2
ETR2 外部触发输入(ETR)(仅适用TIM2,3,4),意思外接界的其他信号源。
如下图所示完成TIM3 中断使能:

6.2 正确配置

如下图的1,2,3,4 步骤完成定时器1ms 计时:
因为我们选择的是64MHz的外部时钟,64分频,1000计数时,1ms产生一次中断。
上图中各个参数的计数以及计数器周期计算方法如下:
Clock Source(时钟来源) :本文中使用的64MHz外部晶振也要使用Internal Clock
计数器设置:
Prtscaler (定时器预分频系数) : 63
Counter Mode(计数模式) : Up(向上计数模式)
Counter Period(自动重装载值) : 999
CKD(时钟分频因子) : No Division 不分频 (可以选择二分频和四分频 )
auto-reload-preload(自动重装载) : Disable 不使能
定时器的定时周期计算方法:
T = (psc+1)(arr+1)/Tclk
其中psc 为定时器预分频系数 arr为自动重装载值 Tclk为系统时钟频率
通过计算 T = (psc+1)(arr+1)/Tclk=(63+1)(999+1)/64us=1000us=1ms
因此实现了1ms中断。
如下图所示完成TIM3 中断使能:

7 生成工程

按照下图的步骤,进行项目配置,项目名称和路径设置等,生成项目的类型选择STM32CubeIDE(我这里以STM32CubeIDE为例,如果你要试用keil5,那就选择MDK-RAM,如果要使用makefile,就选择Makefile),注意项目名称和路径不要有中文名;
最后全部设置完毕后点击create code,生成项目代码:
生成的工程如下图所示:

8 增加代码实现每1S 控制PB9 引脚输出高或者低电平

如下图,如箭头所示实现1ms 中断回调函数中实现计数到500ms 后PB9 翻转输出,

  
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//1ms中断回调函数
{
    TimeCounter++;
    if(TimeCounter>=500)//500ms时间到
    {
        TimeCounter=0;
        HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);//LED反转输出
    }
}
  
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号