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

本专栏记录STM32开发各个功能的详细过程,方便自己后续查看,当然也供正在入门STM32单片机的兄弟们参考;
本小节的目标是,系统主频64 MHZ,采用高速外部晶振,通过定时器3 每秒中断控制 PB9 引脚输出高低电平,从而实现 LED 灯的亮灭。

原理:通过配置定时器3每1mS进入中断一次,每进入中断服务程序一次,增加一次计数,计数到达500,控制PB9引脚输出高或低电平,从而实现1S钟周期闪烁。。

涉及到的知识:配置UART引脚,定时器中断,STM32CubeMX的使用

文章目录

  • [1 新建工程](#1 新建工程)
  • [2 配置SWD下载引脚](#2 配置SWD下载引脚)
  • [3 配置GPIO输出](#3 配置GPIO输出)
  • [4 配置RCC](#4 配置RCC)
  • [5 设置系统主频](#5 设置系统主频)
  • [6 定时器配置](#6 定时器配置)
    • [6.1 错误配置记录](#6.1 错误配置记录)
    • [6.2 正确配置](#6.2 正确配置)
  • [7 生成工程](#7 生成工程)
  • [8 增加代码实现每1S 控制PB9 引脚输出高或者低电平](#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 翻转输出,

c 复制代码
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//1ms中断回调函数
{
	TimeCounter++;
	if(TimeCounter>=500)//500ms时间到
	{
		TimeCounter=0;
		HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);//LED反转输出
	}
}


相关推荐
咸鱼不用加盐20 小时前
HC32F460 USB CDC通信异常:非对齐访问异常排查
单片机·arm·c·cm4
weifengdq1 天前
LAN8671 10BASE-T1S STM32F407 RMII LwIP 测试笔记
stm32·lwip·iperf·rmii·10base-t1s·lan8671
EVERSPIN1 天前
低功耗MCU对TWS充电仓的驱动控制
单片机·嵌入式硬件·mcu·低功耗mcu
没 名 字1 天前
电源--辅助电源电路
单片机·嵌入式硬件
西城微科方案开发1 天前
高速低功耗增强型8位单片机——HC89F0531 SSOP24
单片机·嵌入式硬件
EdmundXjs1 天前
flashrom v1.5.1 Windows
windows·stm32·单片机
Saniffer_SH1 天前
【市场洞察】一叶知秋 - 从2026年开年Quarch公司PCIe 6.0测试工具销售状况说起
服务器·人工智能·嵌入式硬件·测试工具·fpga开发·自动化·压力测试
llilian_161 天前
铷原子频率标准 以时频基准破局,为计量校准赋能 时基铷钟
网络·功能测试·单片机·嵌入式硬件·测试工具·算法
潜创微科技1 天前
CH9339 双主机 USB3.2 协同 + PD 快充对拷芯片方案
嵌入式硬件·音视频
wearegogog1231 天前
NEC红外线协议编码与解码(STM32实现)
网络·stm32·嵌入式硬件