嵌入式开发入门知识

📅 2026/6/28 2:18:55
嵌入式开发入门知识
有用的知识何为单片机?单片机Microcontroller UnitMCU是一块集成了中央处理器CPU、内存、定时器和多种输入/输出I/O接口的微型计算机芯片**in short 可以理解为一个非常非常精简的小电脑甚至于没有操作系统。当然可以移植运行一些极其精简的实时操作系统 如 FreeRTOS、RT-Thread 等。通常这些系统具有线程、任务、内存管理方便你开发。主流的生态选型STM32采用 ARM Cortex-M 系列内核从 M0 到最新的 M85主频跨度极大几十 MHz 到 800 MHz。它拥有极高的运算性能和纳秒级的中断延迟非常适合处理复杂的逻辑、电机控制和传感器融合算法。特点是便宜绝对的实时性(对与工业这点很重要) 开发需要非常了解硬件底层要了解 时钟树、中断、DMA、外设寄存器、开发个TCP甚至需要你自己实现..通常是裸机运行或 FreeRTOS适合PLC控制器、电机驱动器、工业机器人、温度调节器等保证绝对的实时性和高可靠性。ESP32早期 Xtensa LX6/LX7 双核架构最新型号全面转向开源的 RISC-V 架构如 C3/C6/P4。其主频通常在 160MHz~400MHz 之间**特点是原生集成 Wi-Fi 、BLE、Zigbee 自带支持协议栈 MQTT、HTTP/HTTPS、WebSocket、CoAP 等开箱即用。它开发相对简单点支持 MicroPython(可以理解为python) 脚本控制大幅降低入门门槛。缺点是实时性不足Wi-Fi 协议栈会占用大量 CPU 时间中断延迟不可预测单片机的架构架构决定了它的指令集、功耗和生态兼容性。如同桌面的端分为ARM和X86 架构 目前市场上主要分为两大阵营ARM Cortex-M 系列这是目前 32 位单片机领域的绝对霸主。ARM 公司只设计内核架构并授权给其他芯片厂商自己不生产芯片。全球有 40 多家企业获得了授权比如意法半导体ST、恩智浦NXP、微芯Microchip等。特点拥有统一的开发工具和软件生态不同厂家的 Cortex-M 芯片在代码层面有很高的兼容性。从低功耗的 M0 到带浮点运算和 DSP 指令的 M4/M7再到支持 AI 加速的 M55/M85产品线极其丰富。代表产品ST 的 STM32 系列、NXP 的 Kinetis 系列。RISC-V 架构这是一个开源的精简指令集架构近年来发展迅猛。特点指令集开源免费允许厂商高度自定义打破了 ARM 的垄断。在物联网和国产替代场景中非常活跃。代表产品乐鑫科技的 ESP32-C3、兆易创新的 GD32VF103。32位数STM32 和 ESP32 中的32指的都是 CPU 的通用寄存器宽度为 32 位。那就是意味着CPU 在一个时钟周期内可以直接对 32 位数据进行运算加减乘除、逻辑运算等也意味着这个CPU能管理的内存最大能寻址 2^32 个内存单元(管理最小的内存单元是Byte)也就是4GB2^32 Bytes4GB 2^32 Bytes4 GB 。这就是为什么 32 位 Windows 电脑最多只能识别 4G 内存的原因。有用的资料嵌入式开发入门- https://stm32f407-tech-doc.readthedocs.io/en/latest/pre/1嵌入式入门/嵌入式入门.html波特律动 - 波特律动HAL库函数速查手册 - HAL库函数速查手册 | 波特律动FreeRTOS极速通关 - 《FreeRTOS极速通关》课程资料 | 波特律动TM32CubeMX 工程创建 - https://x509p6c8to.feishu.cn/wiki/LfMpwjktZiMAuMkayt6c0LGZnpxSTM32 的开发IDEKeilKeil Product DownloadsKeil 是一款由德国 Keil 公司开发、后被美国 ARM 公司收购的嵌入式系统集成开发环境IDE主要用于 ARM、8051、C166 等微控制器的软件开发。在 STM32 开发领域大家常说的Keil通常指的是Keil MDKMicrocontroller Development Kit其核心编译器为ARMCC / ARMCLANG。在 ARM Cortex-M 系列如 STM32、NXP、GD32 等开发中Keil 是使用最广泛的 IDE 之一尤其在工业控制、汽车电子等领域几乎是行业标杆。但它是个收费软件未注册时编译有32KB 代码大小限制配置连接工具栏上的“魔术棒”图标Options for Target选择调试器在右侧的下拉菜单Use:中根据你实际使用的硬件选择对应的调试器。例如使用 ST-Link 就选ST-Link Debugger使用 J-Link 就选J-Link / J-Trace Cortex。进入详细设置点击右侧的Settings按钮在弹出的窗口中Port接口模式选择SW(Serial Wire)这是目前最主流的调试接口。Max Clock最大频率初次连接建议设为较低的频率如 1MHz 或 2MHz连接稳定后再适当调高以加快下载速度。Connect Reset Settings连接与复位强烈建议勾选Connect: under Reset。这个选项能让调试器在芯片处于复位状态时强行建立连接能有效解决很多因程序跑飞或低功耗模式导致的“无法连接”问题。串口重定向 (ASSIGN)注意该命令仅在仿真环境中有效KEIL 的ASSIGN命令本质上是在软件仿真层面进行了一次“信号劫持”或“虚拟映射”。它会将单片机内部串口UART/USART发出的数据直接通过 J-Link/SWD 调试接口传输到你的电脑屏幕上从而绕过了物理硬件引脚在 Keil 仿真器中单片机的串口被抽象为虚拟通道通常支持4 个串口单片机外设Keil 虚拟通道 (输入/输出)常用映射目标USART1 / UART1S0IN/S0OUTWIN1或COMxUSART2 / UART2S1IN/S1OUTWIN2或COMxUSART3 / UART3S2IN/S2OUTWIN3或COMxUART4S3IN/S3OUTWIN4或COMx执行命令调试模式下 -View-Command Window如果只想在 Keil 内部直接看打印不需要外接任何工具ASSIGN WIN1 S0IN S0OUT把 串口1直接劫持显示在 Keil 的 View - Serial Windows - UART #1 窗口中ASSIGN WIN1 S3IN S3OUT把 MCU 的 UART4 映射到 Keil 的 UART #1 窗口串口重定向 debug.ini每次进入调试都要手动敲命令很麻烦你可以将这些命令写进一个.ini配置文件例如命名为debug.ini然后在 Keil 中自动加载新建一个debug.ini文本文件内容如下MODE COM2 115200,0,8,1 ASSIGN COM2 S3IN S3OUT在使用ASSIGN之前通常需要先用MODE命令设置好电脑端串口的波特率等参数。例如MODE COM2 115200,0,8,1设置 COM2 波特率为 115200无校验位8位数据1位停止位在 Keil 中点击“魔法棒” -Debug选项卡。勾选右侧的Initialization File浏览并选中你刚刚创建的debug.ini文件。这样以后每次点击 Debug 进入仿真时Keil 就会自动帮你执行这些映射命令了。准备虚拟串口软件使用如 VSPD (Virtual Serial Port Driver) 等软件在电脑上创建一对互相连通的虚拟串口例如创建了COM2 - COM3这一对。打开串口助手在你的电脑串口调试助手如 XCOM、SSCOM中选择COM3也就是和 COM2 配对的那个端口设置好相同的波特率115200并打开串口。debuger track (printf) Viewer在 Keil 的 Debug (printf) Viewer 窗口中查看printf的输出核心步骤是在代码中将输出重定向到 ARM Cortex-M 内核内置的ITMInstrumentation Trace Macrocell端口工程配置在 Target Options - Debug - Settings 中确保选择了 ST-Link 或 J-Link。在 Debug 选项卡中启用Enable Debug Printf Viewer。Trace 选项卡中勾选Trace Enable并设置正确的Core ClockCPU 主频。代码重映射在代码中重映射fputc到 ITM/SWO (无需额外硬件)int fputc(int ch, FILE *f) { ITM_SendChar((uint32_t)ch); return ch; }如果你的工程中已经包含了 CMSIS 的核心头文件如core_cm4.h、core_cm7.h等也可以直接调用封装好的ITM_SendChar(ch);函数来代替上述的手动寄存器操作。在芯片的默认复用功能配置AF0下PB3 引脚同时具备 JTAG 调试输出JTDO和 SWO 跟踪输出的功能。确认该引脚已连接到 J-Link 的 SWO 脚。勾选微库MicroLIB点击工具栏的魔术棒图标Options for Target在Target选项卡中务必勾选Use MicroLIB。这是为了让printf能够适配资源受限的嵌入式环境。查看打印启动调试在菜单栏选择View - Serial Windows - Debug (printf) Viewer。获取 Core Clock?在代码中添加或找到系统全局变量SystemCoreClock。启动 Keil 仿真调试Debug 模式。将SystemCoreClock添加到Watch 1窗口。STM32CubeMXhttps://www.st.com.cn/zh/development-tools/stm32cubemx.html#tools-softwareSTM32CubeMX是意法半导体ST官方推出的一款图形化配置工具专门用于简化 STM32 系列芯片的开发流程。它的牛逼在于用鼠标点选代替手动配置寄存器并能自动生成完整的初始化 C 代码。强烈推荐新同学, 它可以通过可以提供图形化:配置每个引脚的功能如 GPIO、UART、SPI 等并自动检测引脚图形化的时钟树界面可以直观地设置系统时钟、外设时钟的分频和倍频参数并实时验证配置是否合法。支持 UART、SPI、I2C、等外设的参数配置以及 FreeRTOS、FatFS、LwIP、USB 等中间件的集成。关键的是它免费!STM32 的烧录J-Link 和 ST-Link 与 STM32 的通讯方式主要有两种SWD和JTAG。通讯方式(SWD 与 JTAG)这两种工具本质上都是将电脑上的调试指令翻译成单片机MCU能听懂的电信号。目前最常用的是 SWD 模式。SWD(Serial Wire Debug)ARM 公司推出的一种新型调试协议最大的优势是极其省引脚。它只需要2 根信号线加上电源和地线共 4 根就能实现完整的下载和调试功能。SWD全称是Serial Wire Debug串行调试SWD模式下用JLink给我们的板子debug时是用标准的二线DIO和CLKRESET管脚可不接当你频繁下载失败时可接上RESET管脚再试。在高速模式下SWD比JTAG更可靠一些常见的接线信号如下所示根据具体情况自主选择。核心引脚SWCLK时钟线由调试器发出节拍同步操作。SWDIO双向数据线负责传输命令和数据。现状因为占用的 MCU 引脚极少现在绝大多数 STM32 项目都默认使用 SWD 模式进行开发。SWD模式下SWDIO的上拉电阻可预留不贴在ST的一些MCU参考设计中有提到建议添加实际测试不加不影响下载。