嵌入式
文章平均质量分 83
我不是程序猿儿
平淡地看待超出自己能力外的事
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【嵌入式】数码管的段选和位选
数码管显示控制需要段选和位选两类信号配合。段选决定显示形状(如数字0需点亮a、b、c、d、e、f段),位选选择当前点亮的位置(如5位数码管中的第几位)。多位数码管通常共用段线,通过快速轮换位选实现动态扫描显示,利用人眼视觉暂留效应形成"同时显示"的效果。这种设计既节省连线,又能实现多位独立显示,是数码管驱动的核心原理。原创 2026-04-21 10:18:01 · 449 阅读 · 0 评论 -
【嵌入式】STM32的MCU固件包各个示例文件夹分析
本文详细解析了ST官方NUCLEO-H723ZG开发板工程目录结构。NUCLEO-H723ZG是ST Nucleo系列开发板,搭载STM32H723 MCU。其Projects目录包含7个子目录:Applications(多模块组合的应用示例)、Demonstrations(综合展示工程)、Examples(HAL外设示例)、Examples_LL(LL库示例)、Examples_MIX(HAL+LL混合示例)、Templates(HAL工程模板)和Templates_LL(LL工程模板)。每个目录都有特定原创 2026-04-15 17:45:40 · 1018 阅读 · 0 评论 -
【嵌入式】STM32 的 ADC 多次采样常见的软件实现方式:阻塞轮询版、定时器触发版、DMA版,各自区别是什么
STM32 ADC多次采样实现方式可分为三类:阻塞轮询版、定时器触发版和DMA版,各具特点与应用场景。阻塞轮询版通过CPU主动控制采样流程,简单直观但效率低,适合demo验证;定时器触发版利用硬件定时器实现固定频率采样,周期稳定但配置较复杂,适合周期性采集任务;DMA版通过DMA自动搬运数据,CPU占用率最低,适合大批量连续采样和正式项目应用。这三种方式构成从入门到进阶的学习路径:先掌握基础采样流程,再理解定时触发机制,最后学习DMA高效处理,逐步深入ADC应用开发。原创 2026-04-14 09:00:00 · 444 阅读 · 0 评论 -
【嵌入式】ADC单次采样的背后逻辑
本文介绍了一个用于单次ADC采样的函数ADC1_ReadOnce()。该函数通过4个关键步骤实现ADC采样:启动转换、等待完成、读取结果、停止ADC。文章详细解析了每个HAL库函数的作用,包括HAL_ADC_Start()启动转换、HAL_ADC_PollForConversion()轮询等待、HAL_ADC_GetValue()读取结果以及HAL_ADC_Stop()停止ADC。同时说明了该函数适用的场景(按键触发、临时测量)和必要前提(ADC初始化配置)。最后补充了相关概念,如软件触发、单次转换模式和轮原创 2026-04-13 16:49:45 · 423 阅读 · 0 评论 -
【嵌入式】面向 STM32 的 ADC 与 DMA 学习路线
摘要:ADC(模数转换器)将模拟电压转换为数字值,是处理传感器信号等模拟量的关键外设;DMA(直接存储器访问)能自动搬运数据,减轻CPU负担。二者结合可实现高效连续采样:ADC负责采集数据,DMA自动将结果存入内存数组。学习路径建议从单通道ADC采样开始,逐步掌握DMA自动搬运、多通道采样和数据处理技术。典型应用包括电位器采样、电池电压监测等,这种组合能显著提升嵌入式系统的数据采集效率。原创 2026-04-13 16:33:43 · 659 阅读 · 0 评论 -
【嵌入式】第3讲:做 USB CDC 虚拟串口,最小工程到底要具备哪些条件
本文总结了实现USB CDC虚拟串口最小工程必须满足的5个核心条件:1)硬件链路正常,包括MCU支持USB、正确连接DP/DM线、稳定供电和使用数据线;2)系统时钟满足USB严格时序要求;3)软件工程包含必要的USB核心文件、描述符文件和CDC类驱动文件;4)正确配置USB中断处理机制;5)完整执行USB初始化链条。文章特别强调,仅编译通过不代表能正常工作,必须确保工程具备完整协议栈和正确初始化流程。最终验收标准是电脑能识别并稳定显示COM端口。新手常见错误是过早关注数据传输而忽略基础条件检查。原创 2026-04-02 16:00:31 · 399 阅读 · 0 评论 -
【嵌入式】第2讲:USB CDC 从“插上电脑”到“出现 COM 口”,枚举过程到底发生了什么
本文主要讲解了USB设备从插入电脑到出现COM口的枚举过程。关键点包括: COM口不是USB插入即有的,而是电脑通过完整枚举流程确认设备为CDC类后才会生成。 枚举过程分为多个阶段:物理接入检测、设备复位、读取设备描述符、分配地址、读取完整配置描述符等。 每个阶段都可能出现问题,导致不同现象: 完全无反应(物理层问题) 出现未知设备(早期枚举失败) 识别设备但无COM口(CDC类配置错误) 调试时应先观察设备管理器反应,定位故障阶段,再针对性检查: 硬件连接 时钟稳定性 描述符配置 驱动匹配 理解枚举过程对原创 2026-04-02 15:48:06 · 592 阅读 · 0 评论 -
【嵌入式】第 1 讲:STM32F103 做 USB CDC,软件工程里通常有哪些文件和模块,各自干什么
本文摘要:STM32F103 USB CDC工程架构解析 一个完整的USB CDC工程包含5个核心模块:应用层、CDC类层、USB Device核心层、USB底层驱动层和板级基础层。典型工程文件包括: main.c - 系统初始化入口 usb_device.c - USB设备框架搭建 usbd_desc.c - 设备描述符管理 usbd_cdc.c - CDC类协议实现 usbd_cdc_if.c - 关键应用接口(含收发回调) 中断相关文件 - USB事件处理核心 开发重点在于理解数据流路径:从PC通过U原创 2026-03-30 17:10:54 · 606 阅读 · 0 评论 -
【嵌入式】USBCDC学习目标--STM32 板载 USB 做 CDC 虚拟串口(Virtual COM Port)
本文介绍了使用STM32F103实现USB CDC虚拟串口的开发流程。主要内容包括:1) 将目标拆解为电脑识别设备、出现COM口、串口打开和回显功能四个步骤;2) 关键概念如USB主机/设备、枚举过程、描述符和CDC类;3) 工程实施顺序,从基础准备到枚举成功再到实现回显;4) 硬件上需关注USB_DM/DP引脚,软件上需理解USB协议的主从通信机制;5) 强调应基于官方例程开发,避免从零实现复杂协议。开发过程分为5个阶段,重点先确保设备枚举成功并出现COM口,再逐步实现数据收发和稳定性优化。原创 2026-03-30 17:09:23 · 861 阅读 · 0 评论 -
【嵌入式】适合 STM32 初学者BootLoader 入门学习心得
BootLoader是嵌入式系统中负责启动管理的小程序,位于Flash起始位置,上电后首先运行。它的核心功能包括升级管理(接收、校验新固件)、安全擦写(先擦后写Flash)、可靠跳转(设置栈指针和向量表)。采用BootLoader+App架构可实现设备安全升级,BootLoader负责固件更新流程,App运行业务功能。关键流程包含硬件初始化、升级判断、数据校验、Flash操作和跳转准备。设计时需特别注意中断处理、向量表配置和异常场景(如固件损坏、校验失败等),确保升级过程可靠稳定。原创 2026-03-24 17:27:44 · 558 阅读 · 0 评论 -
【嵌入式】更改app的 起始地址为0x08004000 ,那么 boot的memory regions 终点地址为什么不用改成0x08003999?
摘要: 在Bootloader与App分区设计中,若App起始地址为0x08004000,Boot的ROM结束地址理论上应设为0x08003FFF以避免重叠。当前实验因Boot代码量小(未触及App区)可能暂时运行,但存在隐患:Boot扩容后可能覆盖App,导致运行时异常。规范做法是同步修改Boot的.icf文件,明确限定其ROM范围至0x08003FFF,确保链接器强制分区隔离,提升工程鲁棒性。此举还能优化下载流程管理,提前暴露容量超限问题。原创 2026-03-24 17:04:04 · 517 阅读 · 0 评论 -
【嵌入式】读代码之startup_stm32f103xb.s
寄存器视角的执行动画 初始状态: R0:未知值(上电后随机) PC:指向 Reset_Handler 的第一条指令 执行 LDR R0, =SystemInit: 动作:将 SystemInit 函数的地址加载到 R0 结果: R0 = SystemInit 的地址 PC += 4(指向下一条指令 BLX R0) 执行 BLX R0: 动作:跳转到 R0 中的地址(即调用 SystemInit()) LR(链接寄存器)自动保存返回地址(PC+4) 结果: PC = SystemInit 的入口地址 R0 值原创 2026-03-24 10:54:08 · 545 阅读 · 0 评论 -
【嵌入式】程序跳转、BootLoader
摘要: 程序跳转与BootLoader的核心在于理解STM32的启动机制。关键点包括: 启动流程:STM32默认从0x08000000执行,依赖向量表的前两项(初始栈指针MSP和复位入口Reset_Handler); 跳转本质:从Boot跳转到App需重置MSP并指向目标程序的Reset_Handler,而非简单函数调用; 学习路径:先掌握启动文件、链接地址等基础概念,再通过最小实验(如LED闪烁验证跳转)实践,最后扩展至完整的BootLoader功能(升级、校验等)。 核心结论:BootLoader是程序原创 2026-03-23 16:22:39 · 564 阅读 · 0 评论 -
【嵌入式】编码器计数倍频,机械一格与电气计数
编码器计数倍频现象解析:当旋转编码器时,机械"咔哒"一格可能对应多个电气计数。这是由于编码器A/B相在转动过程中会产生多个边沿信号,定时器会根据配置对这些边沿进行计数。文中EC11K1525413编码器在特定配置(TIM_ENCODERMODE_TI12+上升沿触发)下,每机械一格会产生2个计数(+2/-2),而非预期的1个。这种差异源于电气分辨率与机械刻度的不对等,不同编码器或配置可能导致1/2/4倍计数。实际应用时需以当前环境实测值为准。原创 2026-03-21 15:23:53 · 253 阅读 · 0 评论 -
【嵌入式】定时器采集编码器实验点
本文提出了一套分阶段实现STM32编码器控制LED亮度的开发方案。方案分为四个任务:1)验证编码器采集功能;2)验证PWM调光功能;3)实现编码器与PWM的联动;4)添加按键中断控制开关。强调开发应遵循分层思想:硬件层、外设层、业务层和调试层,并指出学习的本质是掌握从硬件采集到功能实现的完整思路,而非单纯记忆API。最后建议通过三个练习循序渐进地掌握编码器采集、PWM控制和系统整合的核心技能。原创 2026-03-21 15:17:11 · 269 阅读 · 0 评论 -
【嵌入式】编码器分类
编码器主要分为增量式和绝对式两大类,按检测原理可分为机械式、光电式和磁式,按应用场景有旋转和直线编码器。增量式编码器输出转动信息但无绝对位置,绝对式可直接读取位置。判断电路中的编码器可观察器件型号(如EC11)、引脚名称(A/B相)及外围电路(上拉电阻等)。不同编码器在精度、成本和适用环境上各有特点。原创 2026-03-20 15:25:07 · 104 阅读 · 0 评论 -
【嵌入式】STM32 硬件 PWM 学习文档
本文档以STM32F103VB芯片的PA1/TIM2_CH2/LED17为例,详细讲解了STM32硬件PWM的实现原理和配置方法。主要内容包括: PWM基本原理:通过调节脉冲宽度控制输出平均效果 硬件PWM与软件PWM的区别:硬件PWM由定时器自动产生波形,效率更高 关键参数计算:系统时钟(8MHz)、预分频器(PSC=7)、自动重装值(ARR=999)共同决定1kHz的PWM频率 占空比调节:通过比较寄存器(CCR)控制高电平持续时间,实现LED亮度调节 引脚配置:必须将PA1设置为复用推挽输出(GPIO原创 2026-03-19 18:01:33 · 613 阅读 · 0 评论 -
【嵌入式】趣味理解“volatile”
摘要: volatile关键字用于告知编译器变量可能被意外修改(如中断、硬件等),需每次从内存读取而非优化缓存。在STM32开发中,中断与主循环共享的变量(如标志位)必须加volatile,否则编译器可能缓存旧值导致程序异常。典型场景包括:中断修改主循环读取的变量、硬件寄存器访问等。但需注意,volatile仅解决可见性问题,不保证原子性操作,多线程冲突仍需其他机制。仅在变量可能被异步修改时才需使用,局部变量无需标记。原创 2026-03-19 15:10:47 · 458 阅读 · 0 评论 -
【嵌入式】外部中断和定时器控制led闪烁DEMO
STM32定时器中断示例摘要 本示例展示了如何使用STM32的TIM2定时器实现LED周期性闪烁。通过改造传统的HAL_Delay()延时方式,改为定时器中断控制,实现更高效的LED闪烁。 关键实现: 初始化TIM2定时器,配置为500ms触发一次中断 在中断回调函数中设置标志位led10_blink_flag 主循环检测标志位并翻转LED 同时保留按键外部中断控制另一LED的功能 优点: 相比while(1)循环延时,CPU利用率更高 主循环专注于业务逻辑处理 中断与主循环分工明确,结构清晰 学习要点:原创 2026-03-18 17:54:12 · 295 阅读 · 0 评论 -
【嵌入式】外部中断的学习小坑记录
中断处理中应避免使用HAL_Delay()等阻塞操作,否则会导致SysTick中断无法触发,造成程序卡死。建议采用"中断置标志+主循环处理"的模式:中断中仅快速记录事件(如置位标志变量),所有业务逻辑(如消抖、状态判断等)放在主循环中处理。这种分层设计既能保证中断响应速度,又能安全使用延时等操作。对于简单操作(如LED翻转)可直接在中断中处理,但复杂业务必须移至主循环,遵循"中断通知、主循环处理"的原则,避免影响系统实时性。原创 2026-03-17 18:00:11 · 693 阅读 · 0 评论 -
【嵌入式】中断(Interrupt)和外部中断(External Interrupt)
摘要:中断是CPU暂停当前任务处理紧急事件的机制,外部中断是其中一种特定类型,由芯片外部引脚信号触发。普通中断来源广泛(定时器、串口等),而外部中断仅通过GPIO引脚电平变化触发(如按键、传感器)。两者都通过中断服务函数处理事件后返回原程序,但外部中断需配置EXTI控制器,指定引脚和触发方式。典型应用中,串口接收使用通用中断,而按键检测则依赖外部中断。原创 2026-03-16 16:57:44 · 441 阅读 · 0 评论 -
【嵌入式】MCU常用外设模块介绍
摘要:GPIO是通用输入输出接口,用于控制引脚电平;USART1/USART2是串口通信模块,用于数据传输;TIM是定时器,用于时间控制和PWM输出。这些外设模块挂在不同总线上,影响时钟配置和性能参数。理解它们的功能和总线连接关系对MCU开发至关重要。(149字)原创 2026-03-16 15:37:39 · 282 阅读 · 0 评论 -
【嵌入式】RCC-复位与时钟控制模块及实例
RCC(复位与时钟控制模块)是STM32中管理时钟和复位的核心硬件模块。它主要负责:1)配置系统时钟源(HSE/HSI/PLL)和总线分频;2)控制外设时钟使能(如GPIO、USART等)。在HAL库中,通过SystemClock_Config()配置主频,使用__HAL_RCC_xxx_CLK_ENABLE()开启外设时钟。RCC设计实现了低功耗(未用外设无时钟)和集中管理,使用外设时必须先通过RCC开启时钟。典型应用包括配置72MHz系统时钟和为GPIOE提供时钟以驱动LED。原创 2026-03-16 14:22:09 · 399 阅读 · 0 评论 -
【嵌入式】时钟配置入门及切入实操
摘要:该STM32程序通过HSE 8MHz时钟源经PLL 9倍频产生72MHz系统时钟,配置GPIOE引脚控制LED。关键点包括:1)系统时钟源为PLL输出;2)主频72MHz;3)GPIOE位于APB2总线;4)必须通过__HAL_RCC_GPIOE_CLK_ENABLE()开启GPIO时钟才能使外设正常工作。程序实现了LED的周期性闪烁功能。原创 2026-03-16 13:54:50 · 297 阅读 · 0 评论 -
【嵌入式】stm32的时钟配置入门及切入
摘要:本文针对MCU时钟系统学习提供了结构化路径。首先建立基础认知:时钟驱动模块运行、存在多级时钟(源/系统/总线/外设)、配置本质是选源-调速-分发。建议从6个关键词(HSI/HSE/PLL/SYSCLK/AHB-APB/外设时钟使能)切入,按四步学习:理解时钟树结构→掌握上电默认时钟→学习最小配置(如8MHz→PLL→72MHz)→结合GPIO/USART/TIM外设实践。提出可落地的三阶段OKR目标,并推荐通过分析工程时钟配置代码、绘制简化时钟树、外设实验等方式验证理解。核心要义是抓住"外设原创 2026-03-16 13:38:44 · 597 阅读 · 0 评论 -
【嵌入式】IAR 9.4 搭建 STM32F103VB SPL 标准库工程实操
本文介绍了如何在IAR 9.4环境下搭建STM32F103VBT6的SPL标准库工程,实现LED12闪烁功能。主要内容包括:工程目录结构建议、IAR工程创建步骤、必需文件的添加(启动文件、系统文件、外设驱动等)、头文件路径配置、预处理宏定义设置(USE_STDPERIPH_DRIVER和STM32F10X_HD)、芯片设备选择以及关键配置文件的编写(stm32f10x_conf.h、stm32f10x_it.h/c)。最后给出了main.c的实现代码框架,包含GPIO初始化和简单延时函数,通过SPL库函数控原创 2026-03-13 14:54:24 · 831 阅读 · 0 评论 -
【嵌入式】IAR 9.4 搭建 STM32F103VB HAL 工程实操
本文介绍了如何在IAR 9.4环境下搭建STM32F103VBT6的HAL库工程并实现LED12闪烁功能。主要内容包括:1)搭建工程目录结构;2)添加必要的启动文件、系统文件和HAL库文件;3)配置头文件路径和预处理宏;4)设置芯片型号为STM32F103VB;5)编写main.c、main.h和HAL初始化文件。重点说明了LED12是低电平有效的特性,并提供了完整的GPIO初始化和控制代码。通过配置系统时钟为72MHz,实现了LED的稳定闪烁控制。原创 2026-03-12 16:55:06 · 729 阅读 · 0 评论 -
【嵌入式】【工具】Download active application、 Download file、Erase memory
IAR调试器下载菜单选项解析:1) Download active application - 下载当前工程编译的程序到目标板,用于常规开发流程;2) Download file... - 手动选择外部文件下载,适合烧录他人固件;3) Erase memory - 擦除芯片Flash,用于解决下载异常或清空程序。日常使用推荐:常规开发选第一项,烧录外部文件选第二项,遇到下载问题时先用第三项擦除再重新下载。原创 2026-03-11 10:39:25 · 110 阅读 · 0 评论 -
【嵌入式】IAR 调试时最常用的 “运行控制按钮”
IAR调试运行控制按钮功能详解 摘要:本文详细介绍了IAR调试环境中最常用的运行控制按钮,分为单步类和运行控制类两大功能组。单步类包括Step Into(进入函数内部)、Step Over(跳过函数执行)和Step Out(跳出当前函数);运行控制类包含Go(连续运行)、Run to Cursor(运行到光标处)、Break(暂停)等功能。文章通过具体示例说明各按钮的使用场景和区别,特别针对嵌入式开发中的常见调试场景给出实用建议,并提供了便于记忆的口诀。对于STM32初学者,建议从Go、Pause和Step原创 2026-03-10 17:42:26 · 489 阅读 · 0 评论 -
【嵌入式】知识扫盲iar的Make 、Compile、Build、Rebuild、Download and Debug
IAR开发环境中几个核心按钮的区别如下:Compile仅编译当前文件;Make执行增量编译,只重新编译修改过的文件;Rebuild All强制重新编译整个工程;Download and Debug将程序下载至芯片并进入调试模式。对于STM32开发,建议常规修改后使用Make,异常时用Rebuild All,调试时选择Download and Debug。这些操作分别对应代码检查、工程构建和硬件调试三个关键开发阶段,形成"修改-构建-调试"的标准工作流。原创 2026-03-10 17:26:51 · 669 阅读 · 0 评论 -
【嵌入式】JLINK的使用实操(J-Flash与J-Link Commander)
前期准备:1 板子已上电2 J-Link 已接到目标板电压参考(VCC/VTref)3 接线大概率没大问题(至少 VCC/GND 这条链路对了),同时给你一套“Commander 最少命令版”。原创 2026-03-10 16:24:52 · 785 阅读 · 0 评论 -
【嵌入式】转接板,避免 6pin 转接板接反小记
摘要: 避免6pin转接板接反的关键在于精准定位1脚并验证电源/地。首先通过丝印、焊盘形状或外壳缺口确定1脚(如VCC),再用万用表蜂鸣档确认GND脚(连接USB外壳),上电后测量3.3V锁定VCC。剩余信号线(SWDIO/SWCLK/RESET)可先接必需线路测试连通性,逐步添加。核心步骤:1脚定位→硬确认GND/VCC→分阶段接线验证,确保方向正确且安全。(149字)原创 2026-03-10 16:09:43 · 280 阅读 · 0 评论 -
【嵌入式】初次与硬件结合(拿到板子
摘要:本文提供了一套从零开始调试嵌入式开发板的完整流程。首先需确认MCU型号、供电方式、调试接口和时钟源等关键硬件信息,进行硬件自检。接着通过J-Link工具验证与MCU的连接,确保调试链路正常。然后在IAR中创建最小工程,配置正确的设备和调试器,实现第一个点灯Demo。最后给出了从基础到进阶的功能开发路线,包括时钟配置、中断处理、PWM控制等模块的实现建议。重点强调了硬件确认优先、逐步验证的开发方法,并提供了首日具体行动清单,帮助开发者快速建立调试环境并验证基本功能。原创 2026-03-09 11:08:16 · 447 阅读 · 0 评论 -
【嵌入式】【工具】--JLINK与IAR
J-Link是SEGGER推出的硬件调试器/下载器,通过SWD/JTAG接口连接MCU实现程序烧录和在线调试功能。它与IAR等IDE配合使用:IAR作为软件控制台发出调试指令,J-Link作为执行硬件完成实际操作。使用时需在IAR中配置调试器选项,也可脱离IDE通过SEGGER工具独立操作。需注意硬件连接正确性和软件配置匹配性,两者协同工作才能确保程序正确烧录和运行。(149字)原创 2026-03-06 17:17:57 · 421 阅读 · 0 评论 -
【嵌入式】新手从没接触过原理图,最省力的切入方式是:先把“能跑起来的最小闭环”看
摘要:本文为硬件新手提供快速上手原理图的实用指南。建议从最小闭环入手,按优先级分步掌握:1)电源部分,确认供电系统;2)复位与启动电路;3)调试接口;4)时钟电路;5)目标GPIO/LED线路。推荐采用"连线地图"思维,重点关注网络名而非元件型号,通过具体案例(如LED控制)建立信心。关键技巧包括:定位3V3来源、理解高低电平点亮方式、确认GPIO引脚号等,避免通读全图,快速实现从原理图到实际代码的闭环验证。原创 2026-03-06 17:09:17 · 385 阅读 · 0 评论 -
【嵌入式】入门准备
本文提供了一套嵌入式开发学习路径,涵盖C++语言、工具链配置、外设驱动开发等核心内容。学习目标包括:掌握嵌入式C++(指针/封装/RAII)、熟练使用IAR/J-Link工具链、搭建STM32工程环境、实现GPIO/定时器/PWM/编码器等外设驱动开发,以及Bootloader跳转功能。每个任务包含必做Demo、常见问题、验收标准和推荐资料,并建议提交文档说明、实测证据和问题复盘。预计完成周期为5-10周(每天2-3小时),可根据实际投入时间调整。特别强调要注重寄存器级理解、时钟配置优化和代码内存管理,避免原创 2026-03-03 15:41:41 · 583 阅读 · 0 评论
分享