首页/新闻资讯/正文详情

【STM32G4-FOC】(2)STM32G431之 TIM+ADC

发布时间:2026/9/25 7:26:12 来源:云帆数科 栏目:资讯中心
【STM32G4-FOC】(2)STM32G431之 TIM+ADC
【STM32G4-FOC】1STM32G431 之创建项目【STM32G4-FOC】2STM32G431 之 TIMADC【STM32G4-FOC】3STM32G431之三相互补 PWM【STM32G4-FOC】4PWM 硬件触发 ADC 同步采样【STM32G4-FOC】5DAC 受控输出闭环链路【STM32G4-FOC】2STM32G431之 TIMADC1. 项目简介1.1 定时触发采样的重要性1.2 定时器触发ADC的原理2. CubeMX工程配置2.1 CubeMX 工程配置2.2 ADC 配置2.3 TIM 配置2.4 工程配置3. CubeIDE 编程与调试2.1 CubeIDE编程2.2 编译与调试4. 小结1. 项目简介在【动手学STM32G4】5STM32G431之ADC采样 中我们介绍了STM32G4的ADC采样系统构建实现了电位器电压的采集。本文介绍使用定时器触发 ADC 转换并使用 DMA 进行数据传输。通过设置定时器的触发间隔就能实现 ADC 定时采样转换功能。1.1 定时触发采样的重要性在嵌入式数据采集系统中时序精度往往决定了整个系统的性能上限。软件触发 ADC 采样方式存在诸多局限CPU需要频繁响应中断采样间隔受限于中断延迟多任务环境下难以保证时间一致性。定时触发采样通过硬件机制确保了数据采集的时间精度实现了纳秒级的时间一致性这对于需要严格时序控制的电机控制、音频处理等应用至关重要同时它将CPU从频繁的中断处理中解放出来配合DMA大幅提升了系统效率更重要的是定时器能够精确协调ADC、PWM、DAC等多个外设的协同工作为复杂嵌入式系统提供了硬件级的同步保障在抗干扰方面硬件触发独立于CPU执行有效避免了软件调度带来的时序抖动增强了系统的稳定性。1.2 定时器触发ADC的原理STM32G431的TIM1作为高级定时器具备独立的时钟源和可配置的触发输出功能能够产生精确的时间基准。当TIM1配置为触发ADC时其工作原理如下定时器在计数达到预设定值后产生更新事件UEV这个硬件事件通过TIM1的TRGOTrigger Output输出直接连接到ADC的外部触发输入。ADC检测到这个触发信号后立即启动转换过程无需CPU干预。这种硬件级联动确保了采样时刻的精确性和可重复性将时间抖动控制在纳秒级别。关键时序关系可表示为定时器配置 时钟源 → PSC分频 → 计数器 → ARR重载 → 更新事件 ↓ 触发中断触发ADC检测 ↓ ADC启动转换 → 开始转换触发延迟主要包括ADC的采样时间和转换时间这些参数在CubeMX中可配置为系统设计提供了灵活性和可预测性。2. CubeMX工程配置2.1 CubeMX 工程配置新建工程。启动 STM32CubeMX点击 “Start New Project” 或Ctrl-N快捷键新建工程进入 New Project 界面。选择MCU为 STM32G431RBT6参考开发板的 MCU 型号选择。选择开发板为 NUCLEO-G431RB 开发板。点击右上角 “Start Project” 创建项目。配置系统时钟树。1点击顶部 “Clock Configuration” 选项卡进入时钟树配置。2设置输入频率 Input frequency24 MHzSysCLK frequency160 MHz。配置完成后System Clock 显示为160MHzHCLK、PCLK1、PCLK2 均为160MHz。Input frequency:24MHz(HSE)SysCLK frequency:160MHz(HSE)System Clock Mux: PLLCLK AHB Prescaler:1(不分频)APB1 Prescaler:1APB2 Prescaler:1系统配置在引脚配置Pinout Configuration中选择 “System Core – SYS” 。1设置调试器类型将 Debug 模式设为 “Serial Wire”。2设置基础时钟源Timebase Source可以选择默认设置 “SysTick”。3时钟配置在引脚配置Pinout Configuration中选择 “System Core – RCC” 配置时钟模式。设置高速时钟为外部晶振将 High Speed Clock (HSE) 设为 “Crystal/Ceramic Resonator”。Low Speed Clock (LSE) 设为 “Disable”本实验不需要。GPIO 配置。1将 LD2PA5配置为输出模式 “GPIO_Output”。2将用户按键PC13配置为外部中断 “GPIO_EXTI13”。配置设置虚拟串口LPUART使用串口发送 ADC/DAC 数据到 PC 来显示波形启用 LPUART1模式设为 Asynchronous波特率设置为 115200引脚使用默认的 PA2TX/PA3RX连接到 Nucleo 板上的 ST-LINK 虚拟串口。用于高频率发送数据到上位机或更新波形时可以考虑为 LPUART1_TX 分配 DMA 通道。2.2 ADC 配置Nucleo-G431RB 开发板上没有板载旋钮堆叠插接 X-NUCLEO-IHM16M1 电机驱动扩展板 后PC2 引脚连接到 NUCLEO-IHM16M1 驱动板上的板载旋钮电位器。启用并配置 ADC 通道1选择 “引脚配置Pinout Configuration”从左侧下拉列表中选择 “Analog – ADC1” 使用 IN8PC2 作为模拟输入通道将 IN8 设置为 “IN8 Singel-ended”。2开启独立通道 IN8设置为 “IN1 Single-ended”。3在 Pinout view 视图中将 PC2 引脚配置为 “ADC1_IN8”。PC2 引脚颜色变为绿色表示已配置为模拟输入模式。4在 NVIC 设置中为 ADC1 启用中断以便在回调函数中 ADC 转换结束时可以切换 GPIO。5配置 ADC 工作模式和参数注意触发源配置为 Timer 1 定时器触发。ADCs_Common_Settings Mode: Independent mode ADC_Settings Clock Prescaler: Asynchronous clock mode divided by4Resolution: ADC12-bit resolution Data Alignment: Right alignment右对齐 Gain Compensation:0Scan Conversion ModeDisable End of Conversion SelectionEnd of single of conversion Continuous Conversion Mode: Disable单次转换 DMA Continuous Requests: Disabled ADC_Regular_ConversionMode: Number of Conversion:1External Trigger Conversion Source: Timer1Trigger Out event External Trigger Conversion Edge: Trigger detection on the rising edge Rank1: Channel: Channel8Smapling Time:24.5Cycles Offset Number: No offset youcansqq.com2.3 TIM 配置配置定时器 TIM1 中断频率为 1kHz。计算预分频器(PSC)TIM1 挂载在APB1总线时钟频率 160MHz。所需中断频率 1kHz。考虑ARR通常设为较小值以获得高分辨率选择 PSC 159分频后频率 160MHz / (1591) 160MHz / 160 1000kHz。计算自动重载值(ARR)中断频率 分频后频率 / (ARR1)ARR (分频后频率 / 中断频率) - 1 (1000kHz / 1kHz) - 1 1000 - 1 999参数设置值说明Clock SourceInternal Clock使用内部时钟源Prescaler (PSC)159预分频值Counter ModeUp向上计数模式Counter Period (ARR)999自动重载值auto-reload preloadDisabled禁用自动重载预装载Trigger Event SelectionUpdate Event选择更新事件作为触发输出启用并配置TIM1 1选择 “引脚配置Pinout Configuration”从左侧下拉列表中选择 “Timers – TIM1 – TIM1 Mode and Configuration ” 将通道1 配置为生成但不输出 PWM “PWM Generation No Output”用于定时器内部触发 ADC。2.4 工程配置工程管理配置。1点击 Project Manager→ “Project”输入项目名称 “STM32G431_ADC02”。。2点击 Project Manager→ “Code Generator”设置如下。Project: - Project Name: STM32G431_ADC02 - Toolchain/IDE: STM32CubeIDE Code Generator: √ Generate peripheral initialization as a pair of.c/.h√ Keep User Code when re-generating √ Backup previously generated files youcansqq.com生成代码。1点击右上角GENERATE CODE按钮将自动由工程文件 “STM32G431_ADC02.ioc” 生成初始代码。2生成初始代码完成后弹出代码生成提示窗口点击 “Open Project” 直接进入 STM32CubeIDE 并打开代码。3. CubeIDE 编程与调试2.1 CubeIDE编程在 STM32CubeIDE 打开代码文件 main.c。代码生成后已经自动进入 STM32CubeIDE并打开创建的 STM32G431_DAC01 项目。在 “Core\Src” 目录中已经生成了 dac.c 和 main.c 等基础程序。程序 main.c 的架构如下main.c ├── 系统初始化 │ ├── 系统时钟配置160MHz │ ├── GPIO初始化 │ ├── TIM1初始化 │ └── ADC1初始化 ├── 主程序 │ ├── ADC校准 │ ├── 启动ADC中断模式 │ ├── 启动TIM1 PWM输出 │ ├── 配置TIM1 主从模式 │ └── 主循环 │ └── 串口输出 ADC 数据可选 └── 中断服务 └──HAL_ADC_ConvCpltCallback()├── 读取ADC转换值 ├── 更新转换计数器 └── 每10次转换切换LED可选 youcansqq.com生成代码并添加变量/* USER CODE BEGIN PV */// 用户变量volatileuint16_tadc_raw0;// ADC 转换原值volatileuint16_tadc_count0;// ADC 转换计数/*USER CODE END PV*/主函数初始化后添加代码/* USER CODE BEGIN 2 */// 校准ADCyoucansqq.comif(HAL_ADCEx_Calibration_Start(hadc1,ADC_SINGLE_ENDED)!HAL_OK)Error_Handler();// 使能 ADC 中断if(HAL_ADC_Start_IT(hadc1)!HAL_OK)Error_Handler();// 启动 TIM1 CH1 的 PWM 输出用于触发ADCif(HAL_TIM_PWM_Start(htim1,TIM_CHANNEL_1)!HAL_OK)Error_Handler();添加ADC转换完成回调函数voidHAL_ADC_ConvCpltCallback(ADC_HandleTypeDef*hadc){if(hadc-InstanceADC1){// 获取ADC转换值youcansqq.comadc_rawHAL_ADC_GetValue(hadc1);adc_count;// 每10次转换切换一次LED便于观察if(adc_count10){HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);adc_count0;}}}添加串口调试功能/* Infinite loop youcansqq.com*//* USER CODE BEGIN WHILE */while(1){// Update the transmissionfloatVch1adc_raw*3.3f/4095.0f;floatVch20;// low levelfloatVch33.3;// high level// New DMA transmission can only be initiated after the previous one is completedif(txReady){txReady0;frame[0].fVch1;// VOFACH1frame[1].fVch2;// VOFACH2frame[2].fVch3;// VOFACH3// The frame tail at frame[3] is a fixed value// A total of 4 floats (3 channels of data 1 frame tail), 16 bytes in total.HAL_UART_Transmit_DMA(hlpuart1,(uint8_t*)frame,4*sizeof(float));}HAL_Delay(1);// 1ms}2.2 编译与调试程序编辑、编译与调试点击工具栏中 “Build Debug” 按键对程序代码进行编译。点击工具栏中 “Debug” 按键将程序下载烧录到目标板 NUCLEO-G431RB 。点击工具栏中 “Resume” 按键 或 F8 快捷键运行程序。频率验证用示波器测量PA5LD2引脚看到 50Hz方波如下图所示。TIM1 中断频率为 1kHzLED 每10次转换10ms切换一次因此 LED 的闪烁周期为 50Hz。这说明 采样频率精确控制为1kHz。采样结果验证板载电位器连接到 PC2 ADC1_IN8提供0-3.3V模拟电压。旋转板载电位器通过串口查看 ADC 值变化如下图所示。AD 转换的最小值为 0 最大值为 3.3输出波形随电位器而变化说明 AD 采样正常。4. 小结本实验成功实现了基于STM32G431的定时器触发ADC周期性采样系统。通过配置TIM2定时器产生精确的1kHz触发信号驱动ADC1对板载电位器电压进行周期性采样并在每次转换完成后通过中断回调函数处理数据同时利用LED的50Hz方波输出直观验证系统运行状态。本实验不仅实现了基本的ADC采样功能更重要的是构建了一个可扩展、可验证、高可靠性的数据采集框架。通过严格的时序控制和中断管理为后续更复杂的嵌入式应用开发奠定了坚实基础。版权声明【动手学电机驱动】是 youcansqq 原创作品转载必须标注原文链接【STM32G4-FOC】2STM32G431之 TIMADC(https://blog.csdn.net/youcans/article/details/157174163)Copyrightyoucans 2026Crated2026-1

相关推荐

Atlas 300V 24G推理卡上跑通YOLO:模型转换与部署实战指南
Atlas 300V 24G推理卡上跑通YOLO:模型转换与部署实战指南

"atlas 300v 24g 是运算加速卡吗"这条搜索词在相关热词里挂了很久,再加上"atlas部署yolo"这个高频需求,基本就能勾画出提问者的画像:手上有一张或正打算买一张华为Atlas推理卡,想在边缘侧把YOLO检测算力跑起来… · 2026/9/25 7:26:12

从OpenRouter到MCP:AI Agent工具链搭建与CLI实操指南
从OpenRouter到MCP:AI Agent工具链搭建与CLI实操指南

1. 从"treg"这个模糊词说起:它到底指什么第一次看到"treg"这个词,我脑子里蹦出来的第一反应是生物学里的调节性T细胞(Regulatory T cell,简称Treg)。但结合后面跟着的一串热词——OpenRouter、age… · 2026/9/25 7:26:12

Transformers 模板指南:使用 Cookiecutter 与 `add-new-model-like` 向 Transformers 添加新模型
Transformers 模板指南:使用 Cookiecutter 与 `add-new-model-like` 向 Transformers 添加新模型

推理引擎大模型 【免费下载链接】FlexGen Running large language models on a single GPU for throughput-oriented scenarios. 项目地址: https://gitcode.com/gh_mirrors/fl/FlexGen 点击查看 免费下载 本篇技术指南完整讲解 HuggingFace Transformers 仓库内置… · 2026/9/25 7:26:12

Win10文件内容搜索失效原因与实战解决方案
Win10文件内容搜索失效原因与实战解决方案

1. 这不是“搜索”,而是“内容索引”——Win10文件内容查找的本质认知很多人一上来就点开资源管理器右上角那个放大镜,输入几个字,然后纳闷:“为什么搜不到?我明明在Word里写了‘项目预算表’,可搜出来全是… · 2026/9/25 7:56:11

node-fetch 完整指南:在 Node.js 中引入标准 Fetch API
node-fetch 完整指南:在 Node.js 中引入标准 Fetch API

后端 【免费下载链接】node-fetch A light-weight module that brings the Fetch API to Node.js 项目地址: https://gitcode.com/gh_mirrors/no/node-fetch 点击查看 免费下载 node-fetch 是一个轻量级模块,把浏览器原生的 window.fetch API 移植到 No… · 2026/9/25 7:56:11

Pot-Desktop 上手指南:划词翻译与截图 OCR,3 步装好用熟
Pot-Desktop 上手指南:划词翻译与截图 OCR,3 步装好用熟

Pot-Desktop 上手指南:划词翻译与截图 OCR,3 步装好用熟 【免费下载链接】pot-desktop 🌈一个跨平台的划词翻译和OCR软件 | A cross-platform software for text translation and recognition. 项目地址: https://gitcode.com/GitHub_Trend… · 2026/9/25 7:56:05

fast-colors ColorScale.createBalancedColorScale():用一组颜色快速构建平衡色阶的完整指南
fast-colors ColorScale.createBalancedColorScale():用一组颜色快速构建平衡色阶的完整指南

前端UI组件 【免费下载链接】fast The adaptive interface system for modern web experiences. 项目地址: https://gitcode.com/gh_mirrors/fa/fast 点击查看 免费下载 导读 ColorScale.createBalancedColorScale() 是 FAST Design System 的颜色工具库 microsof… · 2026/9/25 7:56:05

WatchYourLAN 部署指南:Docker 一条命令跑起局域网 IP 扫描,附配置清单与 VLAN 扫描实操
WatchYourLAN 部署指南:Docker 一条命令跑起局域网 IP 扫描,附配置清单与 VLAN 扫描实操

WatchYourLAN 部署指南:Docker 一条命令跑起局域网 IP 扫描,附配置清单与 VLAN 扫描实操 【免费下载链接】WatchYourLAN Lightweight network IP scanner written in Go. With notifications, history, export to Grafana 项目地址: https://gitcode.c… · 2026/9/25 7:56:05

Apache Iceberg 完整发布流程指南:从 RC 候选构建、社区投票到版本化文档与候选版本验证
Apache Iceberg 完整发布流程指南:从 RC 候选构建、社区投票到版本化文档与候选版本验证

数据湖大数据数据存储 【免费下载链接】iceberg Apache Iceberg 项目地址: https://gitcode.com/gh_mirrors/icebe/iceberg 点击查看 免费下载 Apache Iceberg 作为 Apache 顶级项目,其每个正式版本的诞生都遵循一套严谨、可审计的发布流程:… · 2026/9/25 7:55:59

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码