- 博客(23)
- 收藏
- 关注
原创 STM32 DMA 循环传输踩坑:断点调试卡死在DMA中断函数
最近调试 STM32 ADC+DMA 循环采集的时候遇到了一个很玄学的问题:明明开启了 DMA 的半传输和全传输中断,理论上DMA中断函数里的Adc_IntCnt应该严格按照1→2→1→2交替出现,结果打断点调试的时候,发现两个中断会同时进入并不断循环。问题场景STM32F103,ADC 连续转换模式,DMA 循环传输DMA 缓冲区 128 点,开启半传输(前 64 点)和全传输(后 64 点)中断半传输中断里,全传输中断里主循环里判断Adc_IntCnt非零就处理,处理完在滤波函数里清零。
2026-05-08 13:31:47
326
原创 STM32:keil如何查看编译后代码及堆栈大小,堆栈空间溢出触发HardFault_Handler解决及调试办法
最近在研究面向对象编程,在多个结构体内定义了数组,最终在main函数一起定义结构体对象的时候程序崩溃,直接触发了HardFault_Handler错误。
2026-04-24 11:24:43
441
原创 STM32 ADC+高速DMA 采集原理与实战
ADC 是模数转换器,作用是把模拟电压转换成数字值。STM32F103 的 ADC 是 12 位的,输出范围0~4095,对应电压范围0~3.3V电压 = ADC值 × 3.3V / 4096。DMA 是直接存储器访问控制器,可以在不占用 CPU 的情况下,直接把外设(比如 ADC、SPI、串口)的数据,搬运到内存数组里。相当于一个 “硬件快递员”,外设是 “发货点”,内存数组是 “收货点”,搬运过程完全自动,CPU 可以去干别的事。
2026-04-23 15:59:54
371
原创 C语言面向对象结构体嵌套踩坑记录
本博客仅记录自己的学习进程,无任何商业用途,基于论坛上已经存在的内容结合自己实操过程完成了此博客,自己也做了一些细节验证,在此记录下来作为学习沉淀。如有侵权,联系速删。
2026-04-21 11:24:48
25
原创 常用运放电路
本文系统讲解了运算放大器的核心原理和五大经典电路。首先阐述了运放工作的两个基本定律——虚断(输入电流≈0)和虚短(线性区V+=V-),强调负反馈的必要性。随后详细分析了五种典型运放电路:1)电压跟随器(增益=1,高阻抗隔离);2)同相放大器(增益≥1,同相位输出);3)反相放大器(增益可调,反相位输出);4)标准差分放大器(高共模抑制比);5)带偏置差分放大器(单电源适配)。每种电路都给出结构图、核心公式推导、特点说明和典型应用场景,特别是对同相/反相输入的特性差异和单/双电源配置要点进行了重点对比。最后介
2026-04-16 13:42:44
403
原创 STM32:CubeMX+IAR环境搭建全流程
首次打开时,会弹出提示(工程是CubeMX生成的旧版本格式,IAR版本较高),直接点击Yes,完成工程格式转换(转换后会自动备份原文件,不影响使用)。编译成功后,需要将程序下载到STM32芯片中,核心问题的是下载后需手动按复位键才能运行,尝试了多种办法一直不成功,如果有知道如何解决的烦请评论区指教。补充:固件包可在CubeMX中直接下载,也可提前从ST官网下载,下载后放在STM32Cubed的Repository文件下,CubeMX会自动识别。1.点击IAR顶端的Tools,选择Options,
2026-04-14 17:34:42
410
原创 0基础Keil5新建STM32F103C8T6标准库工程模板
新建项目时,直接复制STM32_DEMO总根目录,重命名为新项目名称,打开Project文件夹下的工程文件,修改工程名,根据项目需求,在Drivers分组添加对应的外设.c文件,修改User文件夹下的main.c,编写自己的代码,无需重新配置工程,直接编译下载即可。进入Output标签页,勾选Create HEX File(必须勾选,否则编译后不会生成.hex文件,无法下载到芯片), 点击Select Folder for Objects,找到总根目录下的Output文件夹,选中后点击OK;
2026-04-13 21:18:53
547
原创 STM32F103C8T6 移植 FreeRTOS 全流程+正版/盗版芯片差异+致命踩坑总结
STM32F103移植FreeRTOS v202107.00,优先级必须配置为configKERNEL_INTERRUPT_PRIORITY=255、configMAX_SYSCALL_INTERRUPT_PRIORITY=191,优先级分组必须为Group4,不能乱改。SVC_Handler、PendSV_Handler必须重定向,由FreeRTOS v202107.00移植层实现,stm32f10x_it.c中必须注释,不能重复实现。v202107.00版本编译报错与旧版本一致,可按常规方法排查。
2026-04-13 18:11:13
391
原创 STM32:吃透引脚、引脚复用与引脚重映射
由于STM32很多引脚支持“复用”和“重映射”功能,能将外设的功能从默认引脚“搬到”其他空闲引脚,完美解决引脚冲突问题。
2026-04-11 10:03:04
358
原创 STM32:SysTick系统定时器用法及中断与延时冲突解决
由于最近在使用STM32开发一个项目,需要用到多个定时器资源,而STM32总共只有一个高级定时器TIM1、三个通用定时器TIM2/3/4,思来想去想到还有一个系统定时器SysTick,因此记录下此篇文章。在STM32裸机开发中,SysTick作为内核自带的系统定时器,无需额外占用硬件资源,是实现时间基准、任务调度的最优选择。
2026-04-10 17:09:55
307
原创 IAR 9.1 版本创建 STM32F1 工程全解析(V3.6.0标准外设库)
之前一直用的KEIL MDK 编译ST工程,最近开始学习用IAR搭建工程:先是不知道官网下载的V3.6.0标准外设库,里面的文件该怎么挑、怎么放;再是IAR 9.1版本和网上低版本教程不兼容,一编译就报Pe147错误;最后还搞混“工程”和“工作空间”到底啥关系,建了几个实验工程就乱成一团。摸索了好几天,终于把工程搭建规范摸透了,也理清了所有文件的来源的路径,现在把自己的学习历程和整理的经验记录下来,既是给自己留个笔记,也希望能帮到和我一样刚开始学IAR的人。先说明:本文全程用的是IAR 9.1 版本。
2026-04-09 16:43:52
387
原创 STM32 驱动 HC-SR04 超声波模块:从原理到智能小车避障实战
最近在做智能小车的避障功能,用到了嵌入式最常用的 HC-SR04 超声波模块,踩了不少坑:比如测距跳数、斜墙漏检、阻塞式驱动卡死主程序... 折腾了蛮久终于搞定了一套稳定的非阻塞驱动,还基于它做了 6 角度雷达避障。
2026-04-02 18:48:20
467
原创 零基础看懂三相无刷电机理论结构、驱动电路以及六步换相法
本文系统介绍了三相无刷电机的驱动原理与电路优化过程。首先阐述了六步换向法的基本工作原理,指出初代驱动电路存在能量密度低、效率差的缺陷。通过引入反向电流控制,使转子N极和S极同时参与受力,显著提升了电机性能。文章详细讲解了星形/三角形两种绕组连接方式,并重点介绍了采用MOS管的三相电桥功率电路设计,包括续流二极管的保护作用。最后给出了六步换相的数字化编码方案,为后续FOC算法实现奠定了基础。全文通过理论分析与电路优化相结合的方式,完整呈现了无刷电机驱动系统的设计思路。
2026-03-31 10:35:20
631
1
原创 电流与磁场的关系(安培定则)
最近在学习三相无刷电机,发现之前学习过的安培定则几乎忘了个光,故以此篇文章作为巩固。首先说明下。在电源外部,电流从;在电源内部,电流。当电池提供电能时,电子从电池的负极流出,经过导线和用电器,再回到电池的正极,这是电子的实际移动方向。但我们在谈论电流方向时,是从电池的正极流出,经用电器等回到负极。这种规定是为了简化电路分析,使得电流的方向与正电荷移动方向一致。
2026-03-30 10:12:26
241
原创 STM32 江科大 0.96寸OLED介绍及如何将中文经转码后显示在屏幕上
OLED(Organic Light-Emitting Diode,有机发光二极管)是一种自发光显示技术,其核心优势在于无需背光源,每个像素可独立发光,这与传统LCD(液晶显示器)有本质区别:OLED:自发光、对比度极高(可达10000:1甚至无限)、响应速度快(微秒级)、视角广(接近180°)、功耗低(深色区域不耗电)、体积薄,适合小尺寸嵌入式场景,但寿命有限,长时间静态显示易出现“烧屏”现象。LCD:需背光源,对比度低、响应慢、功耗高,体积相对较大,但寿命长、成本低,适合大尺寸显示。
2026-03-28 22:36:48
377
原创 STM32将调试引脚重定义为普通IO,三种SWJ调试关闭区别
摘要:本文针对STM32开发中PB3、PB4等引脚被JTAG/SWD调试端口占用的问题,介绍了通过GPIO_PinRemapConfig函数释放IO口的方法。重点解析了三种调试配置模式的区别,推荐使用GPIO_Remap_SWJ_JTAGDisable保留SWD调试功能的同时释放PA15/PB3/PB4引脚。详细说明了配置步骤和注意事项,强调必须按顺序开启AFIO时钟、配置调试复用后再初始化GPIO,并警告不要随意完全关闭调试功能以免丢失下载能力。适用于需要复用调试引脚作为普通GPIO的开发场景。
2026-03-28 09:44:26
384
原创 STM32开发:Keil报错L6200E变量重复定义+头文件到底能不能定义变量?
摘要: 在嵌入式开发中,将全局变量定义在.h头文件中会导致L6200E重复定义错误。原因是#include会将头文件内容复制到每个包含它的.c文件中,造成同名变量多次定义。头文件应仅用于声明(extern变量、宏定义、类型定义等),变量定义应放在.c文件中。正确做法是在.c中定义变量,在.h中用extern声明,其他文件包含该头文件即可共享该变量。本文通过实例分析错误根源,总结了头文件的使用规范。
2026-03-27 15:44:25
36
原创 解决 Keil MDK 中 #1-D 警告: warning: #1-D: last line of file ends without a newline文件末尾无换行的屏蔽方法
在 STM32 开发中,我们经常会遇到 Keil MDK 编译器抛出的警告(如图)。这个警告本身不影响程序运行,但会让编译输出变得杂乱,影响我们快速定位真正的错误。本文将分享几种解决方法,帮助你彻底告别这个烦人的警告。
2026-03-27 15:24:28
237
原创 VSCode搭建STM32标准库开发环境:不墨迹纯干货!
本文详细介绍了在VSCode中使用EmbeddedIDE插件开发STM32项目的完整流程。主要内容包括:1)安装VSCode插件和环境配置;2)设置ARM工具链路径;3)创建STM32标准库工程;4)配置芯片支持包和构建器;5)通过STLink下载程序;6)补充说明ARMv5工具链的配置方法。文章以STM32F103C8T6为例,提供了从环境搭建到程序烧录的完整步骤指南,适合嵌入式开发初学者参考使用。
2026-03-24 11:51:19
729
1
原创 场效应管(MOS管)导通原理
当我们将负电压加到栅极和源极(一般源极和衬底相连,相当于加到栅极和衬底)时,N型半导体中的少数载流子(空穴)将开始积聚在栅极触点上,从而在两个P-区域之间形成导电桥。对于增强型NMOS而言,源极和漏极连接部分为N型半导体,带有多数载流子自由电子和少数载流子空穴,自由电子经扩散运动离开N型半导体,进入P型半导体,此时半导体带正电。如果我们将正电压 (VGS ) 施加到栅极端子,由于静电引力,P衬底中的少数电荷载流子(电子)将开始积聚在栅极触点上,从而在两个 n+ 区域之间形成导电桥。
2024-08-23 20:22:48
2514
原创 STM32F103C8T6标准库修改内部时钟以及去除32最小系统板上的8MHZ和32.768KHZ外部晶振
这几天在公司做项目,用到了C8T6作为主控,最开始写的代码是基于外部8MHZ晶振作为时钟源,后面和客户沟通不打算外接晶振使用内部时钟作为HSI作为时钟源,因此需要修改启动文件上的SystemInit函数,最终成功配置为64MHZ(内部时钟最高只能64),也是参考别的大佬写的,只是记录学习,有侵权联系删除。这样就可以省了两个晶振(8MHZ以及32.768KHZ),8MHZ是供给系统时钟源的,32.768是供给实时时钟RTC的,由于本项目用不到,所以就不用外接。改完时钟后跑之前的72MHZ项目代码 没有问题。
2024-08-23 11:24:17
2991
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅