- 博客(28)
- 收藏
- 关注
原创 vscode开发stm32添加新的头文件路径和包含源文件
本文介绍了使用CMake管理项目文件的实用方法。在CmakeLists.txt中,可通过file(GLOB)命令批量添加指定目录下的.c源文件,并利用list(APPEND)合并多个目录的源文件列表,避免变量覆盖问题。对于头文件管理,则需在target_include_directories()中添加自定义.h文件路径。文章以LogisticsRobot项目为例,详细说明了Driver、Application等目录的源文件包含方式,并解释了list命令的作用机制。该方法能有效提升CMake项目管理效率,适用
2026-03-21 01:43:30
449
原创 基于stm32保姆级寄存器点亮LED教程
本文基于STM32F103VET6芯片,详细介绍了通过寄存器操作点亮LED的实现过程。主要分为三个步骤:1)开启GPIOB时钟(配置RCC_APB2ENR寄存器);2)设置PB0为推挽输出模式(配置GPIOB_CRL寄存器);3)控制PB0输出低电平(配置GPIOB_ODR寄存器)。文章详细解析了每个寄存器的地址计算方法、位操作原理及代码实现,包括0x40021018地址的APB2时钟使能、0x40010C00地址的端口配置、0x40010C0C地址的电平控制等关键操作。通过位运算实现对特定引脚的精确控制,
2026-03-06 23:27:35
593
原创 淘晶驰串口屏使用波形图控件,接收单片机或者串口助手数据生成图像的区别
摘要:上位机和串口发送曲线波形图指令的格式不同。上位机直接发送"adds0.id,0,70";串口发送需使用ASCII码格式"add1,0,70"加3个0xFF结束符。单片机实现时需分开处理:先用UART_SendString发送字符串部分,再用UART_SendByte发送3个0xFF结束字节。注意不能将十六进制值作为字符串发送,否则会被解析为字符序列。
2026-02-14 00:10:46
315
原创 UART+ DMA +FIFO+ 空闲中断 (IDLE) + Queue接收数据
摘要:针对STM32串口高波特率下CPU占用率高的问题,提出DMA+空闲中断+消息队列组合方案。DMA负责数据搬运降低CPU负载,空闲中断检测数据包结束,通过消息队列通知任务处理数据。方案实现了硬件自动搬运、实时响应和任务解耦,特别适合FIFO深度较浅的芯片。工作流程包括DMA初始化、自动搬运、空闲中断触发、队列通知和任务处理五个阶段,通过中断服务程序和主任务协同完成高效数据接收与处理。
2026-02-10 00:25:39
859
原创 esp32基于中断+FIFO+事件队列的uart
摘要:本文分析了基于队列的数据处理机制,适用于多任务并行、容错性要求高及协议解析场景,但不适合超低功耗或资源受限系统。通过实例解析了串口中断触发条件(包括正常接收、异常错误和特殊信号),并演示了三种数据处理情况:少量数据(触发超时中断)、大量数据(分批次处理)以及处理速度慢于接收速度时的积压处理。该机制通过环形缓冲区和队列实现稳健的数据处理,确保数据不丢失,但需注意硬件资源消耗。
2026-02-09 23:40:44
734
原创 linux系统搭建esp32开发环境
摘要:本文详细介绍在Ubuntu系统下搭建ESP32开发环境的步骤。主要包括:1)创建esp32目录并安装必要工具;2)从Gitee克隆esp-gitee-tools工具和v5.2版本的esp-idf框架;3)执行子模块更新脚本下载蓝牙、WiFi等协议栈库文件;4)运行install.sh安装工具链;5)执行export.sh配置环境变量使系统识别idf.py命令。整个过程涉及大量依赖库的下载和配置,需要耐心等待各步骤完成。
2026-02-09 16:29:41
556
原创 USB OTG 和 USB Host有什么区别?
USB Host负责供电、通信控制和设备管理,是USB系统的核心;USB OTG则允许设备在主机和从机角色间灵活切换,扩展了应用场景。传统USB采用固定主从关系,而OTG通过ID引脚或Type-C的CC引脚实现角色识别。硬件上,Host只需单向供电,OTG需双向供电管理;软件上,Host侧重驱动开发,OTG还需身份切换逻辑。根据需求选择:稳定供电选Host,灵活扩展选OTG。
2026-02-06 01:28:42
991
原创 GPIO开漏输出和推挽输出有什么区别
摘要:推挽输出和开漏输出是两种常见的数字输出模式。推挽输出由互补MOSFET组成,具有高速切换和强驱动能力,适用于SPI、PWM等应用,但不能并联使用。开漏输出仅包含下拉MOSFET,需外接上拉电阻,支持电平转换和多机"线与"连接,适用于I2C总线等场景。推挽输出在高低电平切换时功耗低,而开漏输出在高电平时存在上拉电阻功耗。两种模式各有特点:推挽适合高速驱动应用,开漏则更适合需要电平兼容和多机通信的场合。
2026-02-05 00:27:39
1266
原创 瑞萨FSP库中使用freertos多线程后,为什么默认线程void hal_entry(void)函数中的代码执行不了?
摘要:本文对比了FreeRTOS与裸机模式在瑞萨FSP设计中的区别。裸机模式下,hal_entry中的while(1)是CPU的全部工作;而FreeRTOS模式下,hal_entry仅作为初始化脚本执行硬件Open操作,完成后即退出。若在其中加入while(1)会因优先级问题导致系统卡死。在多线程模式下,main函数仅负责创建任务(如Task_Al_Analysis等)并启动调度器vTaskStartScheduler(),之后CPU将在各任务间切换,main函数后续代码不会执行。
2026-02-04 21:23:58
585
原创 e2stdio环境下使用FreeRTOS创建多任务
本文详细介绍了FreeRTOS中线程创建与配置的全过程。主要内容包括:1)通过FSP Configuration界面创建线程并选择堆分配算法;2)分析5种堆分配方案(heap_1至heap_5)的特性及适用场景,其中heap_4为推荐首选;3)配置线程参数(栈大小、优先级等)及内存分配方式;4)代码生成与多任务测试。文章重点对比了不同内存管理方案的优缺点,为嵌入式开发者提供了实用的FreeRTOS线程配置指南,特别强调了堆分配算法的选择策略和常见错误排查方法。
2026-02-04 01:12:15
637
原创 江协的OLED屏幕代码怎么移植到其他单片机?
摘要:本文详细介绍了在瑞萨RA6M5开发板(200MHz主频)上驱动OLED显示屏的实现方法。主要内容包括:1) 选择P112和P113作为开漏输出引脚;2) 修改OLED_W_SCL(x)和OLED_W_SDA(x)函数,添加5微秒延时以适配高频处理器;3) 优化初始化函数,删除冗余的GPIO配置;4) 提供完整的测试代码和效果验证。文章对比了瑞萨库与STM32 HAL库的实现差异,并给出了基于e2studio环境的完整驱动代码,最终成功实现了OLED的数字显示功能。
2026-02-03 21:56:00
729
原创 stm32烧录时报错Eror Flash Download failed - Target DLL has been cancelled
摘要:STM32芯片被锁无法下载程序的解决办法是:将BOOT0接3.3V进入系统存储器模式,复位后烧录程序,完成后BOOT0接回GND。常见锁死原因包括:禁用SWD/JTAG调试引脚、进入低功耗模式、看门狗复位以及代码逻辑错误导致系统崩溃。STM32的启动模式由BOOT0和BOOT1引脚状态决定,其中BOOT0=1时可进入厂家固化的Bootloader模式进行程序恢复。
2026-02-03 16:36:08
281
原创 在嵌入式项目中为什么常见#if 和 #endif?
摘要:条件编译(#if/#endif)是嵌入式开发中的重要技术,可实现代码选择性编译。主要应用场景包括:1)快速注释大段代码(#if 0);2)灵活切换不同硬件接口(如SPI/I2C);3)调试日志分级管理(通过DEBUG_LEVEL控制)。相比普通if语句,条件编译能在预处理阶段完全移除不需要的代码,有效节省存储空间并提升运行效率。这种技术特别适合资源受限的嵌入式系统开发。
2026-02-01 13:38:10
195
原创 FreeRTOS中怎么创建队列?为什么要使用队列?
队列是一种先进先出(FIFO)的数据结构,支持入队(Enqueue)和出队(Dequeue)操作。在FreeRTOS中,队列具有重要作用:1) 实现任务解耦,使生产者和消费者无需直接交互;2) 提供任务同步与阻塞机制,提高CPU利用率;3) 保证数据安全,通过临界区保护实现线程安全;4) 作为缓冲层应对流量高峰。队列创建方式包括动态分配(运行时)和静态分配(编译时),各有适用场景。常用操作包括复位、删除、读写队列等,其中xQueueSend和xQueueReceive是最核心的函数。特别需要注意的是,中断服
2026-01-31 16:09:51
1174
原创 volatile关键字在嵌入式中的作用
摘要: volatile关键字告知编译器变量可能被外部修改(如中断、多任务场景),禁止优化(如缓存到寄存器),确保每次访问都从内存读取。嵌入式开发中必须使用volatile的三大场景:1)硬件寄存器映射(值由硬件自动更新);2)中断服务程序修改的全局变量(主程序与ISR异步访问);3)多任务共享变量(保证修改对其他任务可见)。此外,外设结构体成员通常整体声明为volatile。核心原则:若变量可能被外部修改,必须加volatile。
2026-01-31 00:36:47
597
原创 韦东山的RA6M5与Renesas Flash Programmer连接失败解决方法
摘要:使用RenesasFlashProgrammer时需选择J-Link工具和SWD接口。韦东山开发板自带DAP-Link,但JTAG烧录需自行焊接2x5p 1.27mm接口。焊接后需测试3.3V和GND端,正确连接GND、3V3、DIO和CLK四根线。注意J-Link版本需V9以上,V6版本可能无法使用。
2026-01-26 20:54:11
529
原创 什么是MCUBoot?与传统Bootloader有什么区别?和TrustZone和SCE加密结合会怎样?
MCUboot是一款专为微控制器设计的开源安全引导程序,通过签名验证和完整性检查确保固件安全。与传统Bootloader相比,MCUboot具有更高安全性,支持A/B分区升级和自动回滚。它与TrustZone和SCE加密模块协同工作:TrustZone提供硬件级安全隔离,MCUboot运行在其安全域并控制域切换;SCE则提供硬件加速加密运算和安全密钥存储。三者共同构建完整的安全启动流程,实现固件验证、安全启动和可靠升级。这种架构特别适用于医疗等对安全性要求高的嵌入式场景。
2026-01-25 19:17:17
1192
原创 FreeRTOS任务调度入门总结
FreeRTOS任务调度机制分析 本文系统阐述了FreeRTOS实时操作系统的任务调度原理。首先介绍了5种任务状态及其转换规则,重点区分了阻塞态与挂起态的核心差异。其次详细说明了Tick时长配置方法,指出1ms是兼顾精度与性能的最佳平衡点。文章深入剖析了5种任务切换触发方式,包括时间片轮转、主动放弃CPU、高优先级抢占等。通过三种典型场景的时序图分析,直观展示了同优先级任务轮转、高优先级任务抢占以及任务延时的调度过程。最后描述了Tick中断处理流程,包括时间基准更新和任务调度执行的关键步骤。本文为开发者理解
2026-01-24 23:34:11
943
原创 瑞萨e2stdio开发环境使用TrustZone时怎么设置分区内存的大小?
本文介绍了使用瑞萨器件分区管理器(Renesas Device Partition Manager)配置TrustZone安全区域的方法。操作步骤包括:1)通过e2studio软件打开分区工具;2)勾选Set TrustZone选项启用分区修改功能;3)根据开发板参数(如RA6M5的1-2MB代码闪存、512KB SRAM等)划分安全(S)和非安全(NS)区域,特别注意代码闪存和SRAM需要设置非安全可调用(NSC)区域。操作前需选择正确连接方式并点击Run执行配置。
2026-01-24 01:36:28
539
原创 瑞萨芯片使用TrustZone时的器件生命周期管理(DLM)OEM(PL2/1/0)分别是什么意思?怎么切换?
本文介绍了瑞萨芯片的器件生命周期管理(DeviceLifecycleManagement)中OEM状态与保护级别(PL)的关系。芯片出厂时为CM状态,通过初始化可切换至OEM状态进行开发调试。PL级别(PL2/PL1/PL0)决定了调试接口和Flash操作的权限开放程度,其中PL2权限最高,PL0最严格。文章详细对比了三者的调试权限、Flash操作权限及适用场景,并阐述了PL级别转换的规则:高到低无限制,低到高需满足临时验证级别要求。最后提供了使用RFP工具或RDPM将设备初始化为OEM_PL2状态的具体操
2026-01-23 18:06:11
952
原创 为什么FreeRTOS中不用普通delay函数,而多使用vTaskDelay和vTaskDelayUntil
摘要:本文对比了FreeRTOS中的vTaskDelay、vTaskDelayUntil与普通延时函数的区别。普通延时采用忙等待,完全占用CPU;vTaskDelay是相对延时,让出CPU执行权;vTaskDelayUntil实现绝对延时,保证周期任务精确执行。选择建议:非周期性任务(如按键消抖)使用vTaskDelay,周期性任务(如传感器采集)必须用vTaskDelayUntil以避免周期漂移。核心判断依据是任务是否需要固定周期重复执行。
2026-01-22 23:56:47
1145
原创 基于瑞萨e2stdio创建TrustZone工程文件
本文介绍了在e2studio环境下开发RA6M5芯片TrustZone功能的项目创建流程。主要内容包括:1)TrustZone项目需要同时创建安全和非安全两个工程,且必须先在同一个工作空间创建安全工程;2)详细说明了两种开发模式及联合开发模式的具体实现步骤;3)重点阐述了安全工程和非安全工程的创建方法、配置要点及编译顺序;4)强调了项目同步机制,建议将安全工程设为非安全工程的引用项目以确保自动同步。最后总结了TrustZone项目与普通工程的主要区别在于需要创建两个相互关联的工程并保持同步。
2026-01-22 00:21:57
994
原创 瑞萨开发环境e2 stdio不小心把fsp Configuration关掉了怎么办?
在e2stdio 4.5.0版本中,通过点击Project菜单选择OpenFSP Configuration选项,可以打开相关配置界面。该操作路径简单明了,方便用户快速访问FSP(可能是某种文件系统或项目设置)的配置功能。
2026-01-21 00:10:12
184
原创 flash和SRAM有什么区别?
本文对比分析了嵌入式系统中Flash和SRAM两种存储器的特性与应用场景。Flash作为非易失性存储器,具有断电保留特性但读写速度较慢,适合存储固件程序、配置参数等静态数据;SRAM作为易失性存储器,读写速度快但断电数据丢失,主要用于存储线程栈空间、全局变量等动态数据。文章通过对照表清晰呈现了两者在易失性、读写速度和存储内容等方面的核心差异,并提出了实际项目中的存储优化策略:Flash采用Bank分区管理和MPU保护,SRAM按线程分区配置权限。这种存储资源分配方案能有效平衡数据安全性与系统性能。
2026-01-21 00:02:25
893
原创 板子只有JTAG调试协议接口要怎么用swd调试协议烧录?
摘要:本文对比了JTAG和SWD两种调试接口。JTAG是通用标准协议,采用4线并行通信,兼容多种芯片架构但功耗较高;SWD是ARM专为Cortex-M设计的简化协议,仅需2线串行通信,具有高速和低功耗特性。JTAG适用于多架构开发和量产测试,而SWD是Cortex-M开发的首选方案。接线时SWD接口只需连接CLK、SWDIO、电源和地线即可直接烧录。
2026-01-20 02:04:52
550
原创 oled屏,lcd屏和串口屏怎么选?
本文对比分析了OLED屏、LCD屏和串口屏的技术特点和适用场景。OLED屏具有自发光、高对比度等优势,适合便携设备;LCD屏技术成熟、成本低,适用于工业控制等场景;串口屏开发便捷,适合嵌入式系统。功耗方面,OLED最低,串口屏最高;CPU占用上,串口屏最优,LCD最高。选择建议:OLED适合低功耗便携设备,LCD适合预算有限且需稳定显示的场合,串口屏适合快速开发项目。
2026-01-20 00:02:56
552
原创 FreeRtos创建多任务
本文介绍了使用FreeRTOS的xTaskCreate函数创建任务的方法。首先分析该函数的6个参数:任务入口函数、任务名称、栈深度、参数指针、优先级和任务句柄。然后通过Keil开发环境进行实战演示,包括在freertos.c文件中编写任务函数(如FirstTask实现LED闪烁),调用xTaskCreate创建任务,并说明烧录调试方法。最后总结创建多任务的两个核心步骤:正确编写任务函数和配置xTaskCreate参数。该过程适用于需要动态分配内存的任务创建场景。
2026-01-19 16:07:57
1187
原创 CubeMX创建FreeRtos工程
本文介绍了STM32开发中CubeMX工具的关键配置步骤。首先在Pinout & Configuration页面配置HSE晶振时钟、系统模式和RTOS(选择CMSIS_V2),并详细对比了CMSIS_V2相比V1在功能、兼容性、性能等方面的改进。随后在Clock Configuration中设置168MHz主频,最后在Project Manager中完成工程命名、路径选择(MDK-ARM编译器),并配置代码生成选项:复制所有库文件和按外设分.c/.h文件生成初始化代码。这些配置为STM32F407V
2026-01-19 14:06:23
619
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅