【动手学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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1121896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity开发资源大全:7大核心领域免费脚本深度解析

Unity开发资源大全:7大核心领域免费脚本深度解析 【免费下载链接】Unity-Script-Collection A maintained collection of useful & free unity scripts / librarys / plugins and extensions 项目地址: https://gitcode.com/gh_mirrors/un/Unity-Script-Colle…

基于STM32的LED驱动原理深度剖析

从寄存器到呼吸灯:深入STM32的LED驱动艺术你有没有试过在调试板子时,第一个任务就是“点灯”?那颗小小的LED,看似简单,却常常成为我们嵌入式旅程的第一道门槛。可当你按下下载按钮,发现灯不亮——是不是瞬间…

Qwen3Guard-Gen-8B模型内置防刷机制避免恶意调用

Qwen3Guard-Gen-8B:构建原生安全的生成式AI防线 在大模型应用加速落地的今天,一个看似简单的问题正在困扰着无数AI平台:“如何防止用户用一句话让系统失控?”这不是科幻情节,而是每天都在发生的现实挑战。从诱导生成违…

Scoop包管理器权威指南:10个让你工作效率翻倍的技巧

Scoop包管理器权威指南:10个让你工作效率翻倍的技巧 【免费下载链接】Scoop 项目地址: https://gitcode.com/gh_mirrors/sco/Scoop 在Windows系统的软件管理领域,Scoop包管理器正以其革命性的设计理念重新定义软件安装体验。这款专为开发者和系统…

Qwen3Guard-Gen-8B能否用于检测AI生成的虚假用户评价?

Qwen3Guard-Gen-8B能否用于检测AI生成的虚假用户评价? 在电商平台日益依赖用户评价驱动转化的今天,一种新型“数字水军”正悄然浮现:不是真人刷单,而是由大语言模型批量生成、语义通顺、情感自然的虚假好评。这些文本不再堆砌关键…

I2C通信协议在STM32中的配置:手把手教程(从零实现)

从寄存器开始:手把手教你实现STM32的IC通信(不依赖HAL库)当你的传感器“连不上”时,问题可能出在哪儿?你有没有遇到过这样的场景:OLED屏幕黑屏、温湿度读数为0、EEPROM写入失败……所有迹象都指向一个神秘的…

STM32CubeMX使用教程:快速理解外设初始化流程

STM32CubeMX实战解析:从零理清外设初始化的底层逻辑你有没有过这样的经历?刚拿到一块STM32开发板,想点亮一个LED、串口打印点数据,结果光是配置时钟树、分配引脚、打开外设时钟就花了半天。更离谱的是,代码编译通过了&…

Qwen3Guard-Gen-8B适合做直播弹幕实时审核吗?

Qwen3Guard-Gen-8B适合做直播弹幕实时审核吗? 在如今的直播平台上,一条弹幕从输入到刷屏往往只需半秒。观众用“yyds”“绝绝子”甚至“V我50”表达情绪,主播一边讲解一边应对满屏滚动的文字洪流。而在这背后,平台正面临一个日益…

STM32驱动开发中Keil5 Debug核心要点解析

STM32驱动开发实战:Keil5调试技巧全解析,从断点设置到HardFault定位在嵌入式开发的世界里,代码写完只是开始,真正考验功力的是——程序为什么跑不起来?尤其是当你调用HAL_GPIO_WritePin()后LED纹丝不动,或者…

时序电路测试与验证技术:操作指南+仿真演示

时序电路测试与验证实战:从触发器到跨时钟域的完整路径你有没有遇到过这样的情况——代码逻辑看起来天衣无缝,仿真波形也“一切正常”,可一旦烧进FPGA,系统却时不时抽风、状态机莫名其妙卡死?或者综合工具突然报出一堆…

DNMP终极指南:快速搭建Docker开发环境的完整教程

DNMP终极指南:快速搭建Docker开发环境的完整教程 【免费下载链接】dnmp Docker LNMP (Nginx, PHP7/PHP5, MySQL, Redis) 项目地址: https://gitcode.com/gh_mirrors/dn/dnmp DNMP(Docker Nginx MySQL PHP)是一个基于Docker的一站式开发…

Blender置换技术深度解析:从问题诊断到精准优化

Blender置换技术深度解析:从问题诊断到精准优化 【免费下载链接】awesome-blender 🪐 A curated list of awesome Blender addons, tools, tutorials; and 3D resources for everyone. 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-blen…

Keil添加文件零基础指南:工程构建第一步

从零开始构建Keil工程:手把手教你正确添加文件你有没有过这样的经历?明明把.c文件复制到了工程目录下,结果一编译就报错:“undefined symbol”、“cannot open source input file”……一头雾水地刷新、重启、重新添加&#xff0c…

Qwen3Guard-Gen-8B在银行客服机器人中的合规性保障作用

Qwen3Guard-Gen-8B在银行客服机器人中的合规性保障作用 在金融行业,一个看似简单的客户咨询——“这款理财真的稳赚不赔吗?”——可能暗藏巨大的合规风险。如果客服机器人回答“年化收益10%,基本没风险”,哪怕语气再温和&#xf…

Qwen3Guard-Gen-8B模型的三大核心优势全面解读

Qwen3Guard-Gen-8B:如何用生成式AI重塑内容安全防线 在大模型应用如潮水般涌入各行各业的今天,一个隐忧始终萦绕在产品设计者心头:我们引以为傲的智能对话系统,会不会一不小心说出“不该说的话”? 这并非危言耸听。某教…

多语言内容审核新选择:Qwen3Guard-Gen-8B支持119种语言安全识别

多语言内容审核新选择:Qwen3Guard-Gen-8B支持119种语言安全识别 在今天的全球化数字生态中,一个用户可能用泰语发布评论,另一个则用斯瓦希里语提问,而系统背后的AI助手需要在同一时间准确判断这些内容是否包含攻击性、煽动性或违…

高速PCB多板系统级联仿真项目应用

当信号跨越电路板:一场关于高速互联的系统级思考你有没有遇到过这样的场景?单板测试时眼图张开、误码率达标,一切看起来完美无瑕。可一旦插进背板联调,高速链路瞬间“罢工”——眼图闭合、抖动飙升、误码频发。排查数周后才发现&a…

Keil下载配置Cortex-M内核STM32全面讲解

从零搞定Keil下载STM32:Cortex-M开发全流程实战指南 你有没有遇到过这样的场景? 工程编译通过,信心满满点击“Download”,结果弹窗报错:“ No Cortex-M SW Device Found ” 或者 “ Flash Algorithm not found ”…

1.3 磁悬浮轴承系统组成与工作原理

1.3 磁悬浮轴承系统组成与工作原理 磁悬浮轴承(Active Magnetic Bearing, AMB)并非一个孤立的机械部件,而是一个典型的机电一体化闭环控制系统。其实质是利用可控的电磁力,将转子无接触地稳定悬浮在预定位置。理解其系统构成与工作原理是掌握后续所有设计、分析与控制知识…

STM32CubeMX安装图文教程:手把手带你从零开始

手把手教你安装 STM32CubeMX:从零开始的嵌入式开发第一步 你是不是也曾在尝试点亮一块STM32开发板时,被复杂的寄存器配置、繁琐的时钟树计算和满屏的手写初始化代码劝退?别担心,这几乎是每个初学者都会遇到的“入门坎”。而今天我…