2026/1/12 15:24:37
网站建设
项目流程
有些网站勤换域名,数据库网站开发工具,遂溪网站开发公司,私人接做网站违法么【动手学STM32G4】#xff08;1#xff09;STM32G431之导入和创建项目 【动手学STM32G4】#xff08;2#xff09;STM32G431之外部中断 【动手学STM32G4】#xff08;3#xff09;STM32G431之定时器 【动手学STM32G4】#xff08;3#xff09;STM32G431之定时器 1. 项目…【动手学STM32G4】1STM32G431之导入和创建项目【动手学STM32G4】2STM32G431之外部中断【动手学STM32G4】3STM32G431之定时器【动手学STM32G4】3STM32G431之定时器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 软硬件准备硬件资源NUCLEO-G431RB 开发板USB 数据线Micro USB → USB-A用于开发板供电、程序下载和串口通信。示波器可选用于观察输出波形。软件资源STM32CubeMX STM32CubeIDEVOFA 串口调试工具硬件连接Nucleo-G431RB 开发板通过其USB端口Micro-USB连接到PC。2. 工作原理STM32G4系列的定时器功能强大TIM1是高级控制定时器具有以下特性16位自动重载计数器支持向上、向下、中央对齐计数模式4个独立通道支持输入捕获、输出比较、PWM生成互补输出带死区插入适合电机控制支持编码器接口和霍尔传感器接口定时器频率计算公式定时器频率 定时器时钟源 / (预分频器 1)中断周期 (自动重载值 1) / 定时器频率为了产生一个 1ms 的中断周期则定时器的参数计算如下定时器时钟频率 ftimclock160MHz 预分频器 PSC159自动重载值 ARR999定时器频率 ftimer160MHz/(1591)1MHz 中断周期 Tint(9991)/1MHz1ms3. CubeMX 工程创建与配置3.1 新建工程与基础设置新建工程启动 STM32CubeMX点击 “Start New Project” 或Ctrl-N快捷键新建工程进入 New Project 界面。选择MCU为 STM32G431RBT6参考开发板的 MCU 型号选择。选择开发板为 NUCLEO-G431RB 开发板。点击右上角 “Start Project” 创建项目。基础设置选择“引脚配置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 配置启用并配置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):9993使能 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 定时器时钟为160MHzTIM1挂载在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 自动生成的初始化函数调用#includemain.h#includetim.h#includegpio.h后续我们将在这些初始化的基础上编写用户代码。4. 使用 STM32CubeIDE 编写和调试 TIM 程序在 STM32CubeIDE 打开代码文件 main.c。代码生成后已经自动进入 STM32CubeIDE并打开创建的 STM32G431_TIM01 项目。在 “Core\Src” 目录中已经生成了 tim.c 和 main.c 等基础程序。从 “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){}}在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(TimeCounter500){TimeCounter0;HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);}/* USER CODE END TIM1_UP_TIM16_IRQn 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.elfSTM32G431_TIM01.listtext 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信号周期1000ms1Hz。5. 小结通过本项目我们学习了定时器基本原理预分频器和自动重载值的计算方法CubeMX配置如何图形化配置定时器中断中断编程使用HAL库的中断回调机制。版权声明【动手学电机驱动】是 youcansqq 原创作品转载必须标注原文链接(https://blog.csdn.net/youcans/article/details/156653776)Copyrightyoucans 2026Crated2026-01