news 2026/1/7 5:36:09

【动手学STM32G4】(3)STM32G431之定时器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【动手学STM32G4】(3)STM32G431之定时器

【动手学STM32G4】(1)STM32G431之导入和创建项目
【动手学STM32G4】(2)STM32G431之外部中断
【动手学STM32G4】(3)STM32G431之定时器

【动手学STM32G4】(3)STM32G431之定时器

    • 1. 项目简介
      • 1.1 定时器实验项目
      • 1.2 软硬件准备
    • 2. 工作原理
    • 3. CubeMX 工程创建与配置
      • 3.1 新建工程与基础设置
      • 3.2 TIM 配置
      • 3.3 GPIO 配置
      • 3.4 时钟配置
      • 3.5 工程配置
      • 3.6 生成工程代码
    • 4. 使用 STM32CubeIDE 编写和调试 TIM 程序
    • 5. 小结

1. 项目简介

1.1 定时器实验项目

在本项目中,我们将使用STM32G431RB的TIM1定时器实现一个精确的定时功能。

  • 配置 TIM1 每1ms产生一次中断;
  • 在中断服务函数中计数,每500次(即500ms)翻转一次 PA9 引脚电平;
  • 最终在 PA9 引脚上产生周期为1秒(频率1Hz)的方波信号。

1.2 软硬件准备

硬件资源:

  1. NUCLEO-G431RB 开发板
  2. USB 数据线(Micro USB → USB-A):用于开发板供电、程序下载和串口通信。
  3. 示波器(可选):用于观察输出波形。

软件资源:
STM32CubeMX, STM32CubeIDE,VOFA+ 串口调试工具

硬件连接:

  • Nucleo-G431RB 开发板通过其USB端口(Micro-USB)连接到PC。

2. 工作原理

STM32G4系列的定时器功能强大,TIM1是高级控制定时器,具有以下特性:

  • 16位自动重载计数器
  • 支持向上、向下、中央对齐计数模式
  • 4个独立通道,支持输入捕获、输出比较、PWM生成
  • 互补输出带死区插入,适合电机控制
  • 支持编码器接口和霍尔传感器接口

定时器频率计算公式:

  • 定时器频率 = 定时器时钟源 / (预分频器 + 1)
  • 中断周期 = (自动重载值 + 1) / 定时器频率

为了产生一个 1ms 的中断周期,则定时器的参数计算如下:

定时器时钟频率 ftimclock=160MHz 预分频器 PSC=159自动重载值 ARR=999定时器频率 ftimer=160MHz/(159+1)=1MHz 中断周期 Tint=(999+1)/1MHz=1ms

3. CubeMX 工程创建与配置

3.1 新建工程与基础设置

  1. 新建工程
    启动 STM32CubeMX,点击 “Start New Project” (或Ctrl-N快捷键)新建工程,进入 New Project 界面。
  • 选择MCU为 STM32G431RBT6(参考开发板的 MCU 型号选择)。
  • 选择开发板为 NUCLEO-G431RB 开发板。
  • 点击右上角 “Start Project” 创建项目。


  1. 基础设置:
    选择“引脚配置(Pinout & Configuration)”,
    (1)选择 “System Core – SYS” 设置调试器类型,将 Debug 模式设为 “Serial Wire”。
    (2)选择 “System Core – SYS” 设置基础时钟源(Timebase Source),可以选择默认设置 “SysTick”。


(3)选择 “System Core – RCC” 配置时钟模式,设置高速、低速时钟为外部晶振,将 High Speed Clock (HSE) 设为 “Crystal/Ceramic Resonator”。


3.2 TIM 配置

  1. 启用并配置TIM1 :
    (1)选择 “引脚配置(Pinout & Configuration)”,从左侧下拉列表中选择 “Timers – TIM1 – TIM1 Mode and Configuration ” ,将时钟源配置为内部时钟 “Clock Source: Internal Clock”。
    (2)系统时钟频率设置为 160MHz(具体设置见下节),配置 TIM 工作模式和参数如下。
Counter Settings Prescaler(PSC-16 bits value):159Counter Mode: Up Counter Period(AutoReload Register-16 bits value):999

(3)使能 NVIC 中断:
勾选 “TIM1 update interrupt and TIM16 global interrupt”。


3.3 GPIO 配置

配置 GPIO 用于 LED 指示或按键触发。例如,将 PA5 配置为 GPIO_OUT(LD2),PA9 配置为 GPIO_OUT,将 PC13 配置为 GPIO_EXTI13(UserBTN)。


3.4 时钟配置

在 Clock Configuration 视图进行时钟配置。如下图所示,APB2 定时器时钟为160MHz(TIM1挂载在APB2总线上)。


3.5 工程配置

点击工具栏 “Project Manager” 进入工程配置界面,如下图所示。
(1)在 Project Name 输入项目名称 “STM32G431_TIM01”。
(2)在 Toolchain/IDE 选择 IDE 工具为 “STM32CubeIDE”(也可以根据需要选择其它 IDE 工具 )。

(3)在 “Project Manager” 继续向下拉,“在 MCU and Firmware Package” 栏中,取消选中 “Use latest available version”,根据所安装的 G4 固件版本,选择 “STM32Cube FW_G4 V1.5.0”;
(4)如果固件包不是安装在默认路径,则要取消选中 “Use Default Firmware Location”,通过 Browse 选择固件包的安装路径。

(5)切换到 “Code Generator”,勾选生成选项:“Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral”。


3.6 生成工程代码

点击右上角 “GENERATE CODE” ,将自动生成带 .ioc 的工程文件 “STM32G431_TIM01.ioc”
加载完毕后,弹出代码生成提示窗口,点击“ OPEN PROJECT”,进入 STM32CubeIDE。

可以在 main.c 中看到 CubeMX 自动生成的初始化函数调用:

#include"main.h"#include"tim.h"#include"gpio.h"

后续我们将在这些初始化的基础上,编写用户代码。


4. 使用 STM32CubeIDE 编写和调试 TIM 程序

  1. 在 STM32CubeIDE 打开代码文件 main.c。
    代码生成后,已经自动进入 STM32CubeIDE,并打开创建的 STM32G431_TIM01 项目。在 “Core\Src” 目录中,已经生成了 tim.c 和 main.c 等基础程序。

  2. 从 “Core\Src” 目录打开文件 main.c,如下图所示。
    在用户代码区添加代码 “HAL_TIM_Base_Start_IT(&htim1)”,开启 TIM1定时器。
    完整 main.c 程序如下:

intmain(void){/* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* Configure the system clock */SystemClock_Config();// 160MHz/* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM1_Init();// 1ms interrupt for TIM1/* USER CODE BEGIN 2 */HAL_TIM_Base_Start_IT(&htim1);// start TIM1/* USER CODE END 2 *//* Infinite loop */while(1){}}


  1. 在stm32g4xx_it.c文件中实现中断服务函数。
    在 TIM1_UP_TIM16_IRQHandler() 函数中增加计数和翻转程序如下:
/** * @brief This function handles TIM1 update interrupt and TIM16 global interrupt. */uint16_tTimeCounter;voidTIM1_UP_TIM16_IRQHandler(void){HAL_TIM_IRQHandler(&htim1);/* USER CODE BEGIN TIM1_UP_TIM16_IRQn 1 */TimeCounter++;if(TimeCounter>=500){TimeCounter=0;HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);}/* USER CODE END TIM1_UP_TIM16_IRQn 1 */}


  1. 程序编辑、编译与调试
  • 硬件连接
    • 用 USB连接线,连接 PC 与 NUCLEO-G431RB 开发板。
  • 软件调试
    • 点击工具栏中 “Build Debug” 按键对程序代码进行编译。
    • 点击工具栏中 “Debug” 按键,将程序下载烧录到目标板 NUCLEO-G431RB 。
    • 点击工具栏中 “Resume” 按键 或 F8 快捷键,运行程序。
**** Incremental Build of configuration Debugforproject STM32G431_TIM01 ****make-j20 all... Finished building target: STM32G431_TIM01.elf arm-none-eabi-size STM32G431_TIM01.elf arm-none-eabi-objdump -h -S STM32G431_TIM01.elf>"STM32G431_TIM01.list"text data bss dec hex filename8952121652106162978STM32G431_TIM01.elf Finished building: default.size.stdout Finished building: STM32G431_TIM01.list Build Finished.0errors,0warnings.(took 501ms)

运行程序,使用示波器分析仪测量PA9引脚,输出波形如下图所示:

  • 高电平持续时间:500ms,低电平持续时间:500ms;
  • 信号周期:1000ms(1Hz)。


5. 小结

通过本项目,我们学习了:

  • 定时器基本原理:预分频器和自动重载值的计算方法;
  • CubeMX配置:如何图形化配置定时器中断;
  • 中断编程:使用HAL库的中断回调机制。

版权声明:
【动手学电机驱动】是 youcans@qq 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/156653776)
Copyright@youcans 2026
Crated:2026-01

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/7 5:24:31

CANoe中uds31服务与DTC读取联动配置:项目应用

用CANoe实现UDS 0x31服务与DTC读取的智能联动:从原理到实战你有没有遇到过这样的场景?在HIL测试中,你想验证某个诊断例程执行后是否会触发特定故障码——比如模拟一次EEPROM写入失败,看看ECU是否正确上报DTC_P1234。但当你手动点击…

作者头像 李华
网站建设 2026/1/7 5:22:56

安装mysql 8.0.32

https://blog.csdn.net/James_Lee__/article/details/129229380

作者头像 李华
网站建设 2026/1/7 5:21:31

Qwen3Guard-Gen-8B与MySQL审计日志的联动分析实践

Qwen3Guard-Gen-8B与MySQL审计日志的联动分析实践 在现代企业数字化架构中,数据库安全早已不再是“谁登录了”或“执行了哪条SQL”的简单记录问题。随着攻击手段日益隐蔽、数据价值持续攀升,传统的规则式日志监控正面临前所未有的挑战:关键字…

作者头像 李华
网站建设 2026/1/7 5:20:09

FastReport自定义字体配置完整指南:让你的报表更专业

FastReport自定义字体配置完整指南:让你的报表更专业 【免费下载链接】FastReport Free Open Source Reporting tool for .NET6/.NET Core/.NET Framework that helps your application generate document-like reports 项目地址: https://gitcode.com/gh_mirrors…

作者头像 李华
网站建设 2026/1/7 5:17:35

七段数码管显示数字在多通道工业仪表中的扩展应用

七段数码管显示数字在多通道工业仪表中的扩展应用当工业现场遇上“老派”显示:为何LED数码管依然坚挺?在PLC控制柜里、在高温高湿的车间角落、在强电磁干扰包围的数据采集终端上,你总能看到那熟悉的红色或绿色数字——一个个由七段LED组成的数…

作者头像 李华
网站建设 2026/1/7 5:17:19

基于Proteus仿真的红外遥控解码项目实战演练

从零开始玩转红外遥控:基于Proteus的单片机解码实战你有没有想过,手里的空调遥控器按下“开机”键时,那一瞬间到底发生了什么?它不是魔法,而是一串精密设计的红外脉冲在空中飞驰,被你的设备准确捕捉、识别并…

作者头像 李华