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

STM32 FOC调试记录

发布时间:2026/11/5 7:48:50 来源:云帆数科 栏目:资讯中心
STM32 FOC调试记录
STM32 FOC调试记录程序卡死在set_pwm_dutyweak符号踩坑现象ADC中断正常后把电流模式代码加进 while(1)cmotor_control_context.torque_norm_d 0;motor_control_context.torque_norm_q 0.4;motor_control_context.type control_type_torque;HAL_Delay(1000);程序卡在这段代码后面后面的printf不打印了。更严重的是电机开始发烫——PWM还在输出但FOC中断不再更新占空比某一相持续通电。排查过程第一步用printf逐段定位在关键位置加printf看程序执行到哪一步cprintf(A\r\n);motor_control_context.type control_type_torque;printf(B\r\n);HAL_Delay(1000);printf(C\r\n);打印到B就停了说明卡在 HAL_Delay(1000) 里或者它后面。第二步在lib_torque_control里加printfcvoid lib_torque_control(float torque_norm_d, float torque_norm_q){printf(T1\r\n);float d torque_d_loop(torque_norm_d);printf(T2\r\n);float q torque_q_loop(torque_norm_q);printf(T3\r\n);foc_forward(d, q, rotor_logic_angle);printf(T4\r\n);}打印到T3就停了卡在 foc_forward。第三步在foc_forward里加printfcvoid foc_forward(float d, float q, float rotor_rad){printf(F1\r\n);float d_u 0, d_v 0, d_w 0;svpwm(rotor_rad, d, q, d_u, d_v, d_w);printf(F2\r\n);set_pwm_duty(d_u, d_v, d_w);printf(F3\r\n);}打印了4个F1进入函数、三个变量初始化、svpwm完成第5个F1set_pwm_duty之后没打印。卡在set_pwm_duty函数里。根因weak符号被链接器选中打开 foc.c发现里面有一个weak版本的 set_pwm_dutycvoid set_pwm_duty(float d_u, float d_v, float d_w) __attribute__((weak));void set_pwm_duty(float d_u, float d_v, float d_w){while (1);}我的 main.c 里明明有强符号版本cvoid set_pwm_duty(float d_u, float d_v, float d_w){d_u min(d_u, 0.9);d_v min(d_v, 0.9);d_w min(d_w, 0.9);__disable_irq();__HAL_TIM_SET_COMPARE(htim1, TIM_CHANNEL_1, d_u * htim1.Instance-ARR);// ...__enable_irq();}但链接器选了 foc.c 里的weak版本运行时卡在 while(1)。关于weak符号__attribute__((weak)) 是GCC/ARM编译器的弱符号机制。规则如果别处有同名的强符号链接器就用强符号如果没有才用弱符号。原作者的意图foc.c 是算法层不应该关心底层硬件所以放一个weak版本的 set_pwm_duty 作为占位如果你的工程里实现了硬件驱动就用你的如果忘了实现就执行 while(1) 死循环让你一运行就发现这个设计思路是对的但在我这翻车了。为什么链接器选错了可能的原因链接顺序问题foc.o 在 main.o 之前被链接链接器先看到weak版本就定了编译器对weak的处理有差异不同工具链行为可能不一致main.c里的强符号因为某种原因没被识别结果就是本该用“主胎”的用了“备胎”卡死在while(1)。修复方法删掉 foc.c 里的weak函数定义只保留一行声明cvoid set_pwm_duty(float d_u, float d_v, float d_w);这样链接器只能去 main.c 里找实现没有选择余地。改完后编译烧录程序不再卡死电机正常响应。声明和定义的区别写法 类型 作用void set_pwm_duty(float d_u, float d_v, float d_w); 声明 告诉编译器有这个函数具体实现去别处找void set_pwm_duty(float d_u, float d_v, float d_w) { ... } 定义 给出函数的完整实现唯一区别在末尾有分号 声明有花括号 定义。总结项目 内容现象 程序卡死电机发烫根因 链接器选了foc.c里的weak版本卡在while(1)解决 删掉weak定义只保留声明教训 weak符号调试时要小心编译期报错比运行期死循环好

相关推荐

REA 逆向工具安装指南:10 分钟装好 CLI,把分析能力接进 AI 智能体
REA 逆向工具安装指南:10 分钟装好 CLI,把分析能力接进 AI 智能体

REA 逆向工具安装指南:10 分钟装好 CLI,把分析能力接进 AI 智能体 【免费下载链接】rea Reverse engineer anything with agents, from app behavior down to native binaries. 项目地址: https://gitcode.com/GitHub_Trending/rea2/rea 拿到一个… · 2026/11/5 7:48:50

过滤了不等于隔开了:多租户AI应用的文档隔离、记忆边界、检索硬过滤与权限贯通
过滤了不等于隔开了:多租户AI应用的文档隔离、记忆边界、检索硬过滤与权限贯通

目录 一、泄漏现场:AI 应用把传统隔离模型打穿了 (一)三个泄漏面同时打开 (二)一次成功的提问如何跨过租户墙 (三)软过滤为什么不是隔离 (四)贯穿算例:服… · 2026/11/5 7:47:50

能本地不等于该本地:Java应用在本地模型与云端模型之间的质量、隐私、延迟、并发、部署成本与运维选型
能本地不等于该本地:Java应用在本地模型与云端模型之间的质量、隐私、延迟、并发、部署成本与运维选型

目录 一、把口号还原成工程问题 (一)三种错误比法会同时把问题问歪 1. 只比参数量 2. 只比单价 3. 只比出不出内网 (二)六个对照维度,每一个都要有判定动作 (三)贯穿场景:一套… · 2026/11/5 7:47:50

大模型驱动 SIEM 告警降噪实战:语义聚类、LLM 研判与防注入流水线
大模型驱动 SIEM 告警降噪实战:语义聚类、LLM 研判与防注入流水线

大模型驱动 SIEM 告警降噪实战:语义聚类、LLM 研判与防注入流水线 法律红线声明:本文所有技术内容仅用于企业授权范围内的安全运营建设、自有实验环境或防御性研究。文中示例日志均来自本地构造的脱敏数据,不含任何真实企业数据;不… · 2026/11/5 8:05:57

从零构建图像检索系统:特征提取、FAISS索引与检索排序实战
从零构建图像检索系统:特征提取、FAISS索引与检索排序实战

简介:图像检索系统是一份面向计算机视觉初学者与进阶学习者的完整实践源码包,围绕以图搜图这一核心问题,覆盖图像预处理、特征提取、相似度计算、索引构建、检索策略与性能评估等关键环节,可应用于搜索引擎、数字图书馆、医学影像… · 2026/11/5 8:05:57

IPTV后台管理系统部署与优化:EPG、m3u导入、接口签名缓存与源巡检
IPTV后台管理系统部署与优化:EPG、m3u导入、接口签名缓存与源巡检

简介:面向IPTV后台开发与二次开发学习者的双子星IPTV后台管理系统PHP源码包,适合研究后台系统代码组织、数据库测试数据以及PHP运行环境搭配的初中级开发者参考。压缩包约31.82MB,主体包含PHP源码、数据库测试文件,并附带VC9-32位… · 2026/11/5 8:05:57

OpenCV计算机视觉课程实验拆解:6次实验参数与避坑
OpenCV计算机视觉课程实验拆解:6次实验参数与避坑

简介:面向高校计算机视觉课程学习、实验复现与考前梳理的配套资料包,汇集浙江大学2020—2021秋冬课程六次实验、复习资料和OpenCV学习内容,适合修读相关课程、准备实验报告或希望补齐传统视觉与深度学习基础的学习者。包内共1319个文件&#… · 2026/11/5 8:05:57

Jshop小程序商城:PHP开源DIY可视化编辑器实战指南
Jshop小程序商城:PHP开源DIY可视化编辑器实战指南

简介:Jshop小程序商城源代码是一套面向中小企业及开发者的一站式移动电商解决方案,支持微信小程序、支付宝小程序、APP、公众号与H5多端统一管理,适用于快速搭建自有品牌线上商城或二次开发定制化电商系统。资源包为RAR格式,大小1… · 2026/11/5 8:05:57

Fashion_MNIST对抗攻防实战:FGSM/PGD/TRADES闭环实现
Fashion_MNIST对抗攻防实战:FGSM/PGD/TRADES闭环实现

简介:本资源是一份面向深度学习初学者与安全研究者的实战项目包,聚焦图像分类模型在Fashion_MNIST数据集上的对抗攻击生成与对抗训练全流程实现,解决模型鲁棒性评估与防御能力提升这一核心问题,适用于AI安全入门、课程实验及科研复… · 2026/11/5 8:04:56

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

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

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

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

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

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

多智能体协作系统架构设计与实践优化
多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中… · 2026/11/5 0:00:39

大模型系统性入门实战指南:从原理到部署微调的全链路路线
大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#… · 2026/11/5 0:00:39

鸿蒙文件系统沙箱机制解析与开发实践
鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的… · 2026/11/5 0:00:39

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

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

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

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

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

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

了解更多?预约专属演示

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

企业微信二维码