<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[D_handsome的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/D_handsome</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; D_handsome]]></copyright><item><title><![CDATA[CAN总线学习（五）：外设]]></title><link>https://blog.youkuaiyun.com/D_handsome/article/details/163305705</link><guid>https://blog.youkuaiyun.com/D_handsome/article/details/163305705</guid><author>D_handsome</author><pubDate>Wed, 29 Jul 2026 15:02:36 +0800</pubDate><description><![CDATA[STM32的CAN外设采用三邮箱发送机制（支持优先级/顺序发送策略）和双FIFO接收队列（可配置过滤规则与溢出处理），通过NART、TXFP、RFLM等寄存器实现自动重传、发送优先级、队列锁定等控制功能。其工作模式包含正常/静默/环回/睡眠四种状态，支持自动唤醒，并提供发送完成、FIFO状态、错误检测等中断类型。过滤器采用可编程的32/16位标识符匹配机制，支持列表和掩码两种过滤模式，能有效管理CAN总线通信中的数据流。]]></description><category></category></item><item><title><![CDATA[CAN总线学习（四）：仲裁]]></title><link>https://blog.youkuaiyun.com/D_handsome/article/details/163238823</link><guid>https://blog.youkuaiyun.com/D_handsome/article/details/163238823</guid><author>D_handsome</author><pubDate>Mon, 27 Jul 2026 12:07:23 +0800</pubDate><description><![CDATA[CAN总线通过非破坏性仲裁机制解决多设备同时发送冲突问题。总线采用"先占先得"原则，空闲时设备可发送数据。当多个设备同时请求发送时，通过ID号进行仲裁：ID号小的优先级高，利用"线与"特性（0覆盖1）和回读机制，保证高优先级数据不被破坏。仲裁过程中，设备逐位比较发送位与回读位，若不一致则退出。数据帧优先级高于遥控帧，标准格式（11位ID）优先级高于扩展格式（29位ID）当高11位相同时。这一机制实现了高效、公平的总线资源分配。]]></description><category></category></item><item><title><![CDATA[CAN总线学习（三）：帧同步]]></title><link>https://blog.youkuaiyun.com/D_handsome/article/details/163164783</link><guid>https://blog.youkuaiyun.com/D_handsome/article/details/163164783</guid><author>D_handsome</author><pubDate>Fri, 24 Jul 2026 16:15:52 +0800</pubDate><description><![CDATA[CAN总线通过约定波特率实现无时钟线同步通信。发送方按固定时长输出数据位，接收方同步采样，但实际存在初始位置不对齐和时钟误差积累问题。位时序将每个数据位细分为同步段、传播段和两个相位缓冲段（PBS1/PBS2），通过调整Tq时间单位灵活定位采样点。硬同步利用SOF下降沿对齐初始相位，再同步通过动态调节PBS1/PBS2补偿时钟误差。波特率计算公式为各段Tq时长之和的倒数，例如当总时长为5us（10Tq）时，波特率为200kbps。这两种同步机制共同确保采样点稳定在数据位中心附近。]]></description><category></category></item><item><title><![CDATA[CAN总线学习（二）：帧格式]]></title><link>https://blog.youkuaiyun.com/D_handsome/article/details/163156874</link><guid>https://blog.youkuaiyun.com/D_handsome/article/details/163156874</guid><author>D_handsome</author><pubDate>Fri, 24 Jul 2026 11:21:16 +0800</pubDate><description><![CDATA[CAN协议帧类型与数据帧设计摘要 CAN协议定义了5种帧：数据帧（广播发送）、遥控帧（请求数据）、错误帧（错误通知）、过载帧（未就绪）和帧间隔（隔离前后帧）。数据帧设计核心思路：通过ID区分功能，DLC调整数据长度，RTR区分广播/请求模式，CRC校验完整性，ACK确认接收。采用位填充规则（每5相同位插入1相反位）确保同步，防止误判。标准/扩展格式由IDE标识，29位ID扩展帧支持更多地址。遥控帧无数据段，RTR置1，用于请求数据。波形实例展示了不同帧结构的填充位处理及ID、数据段的实际应用。]]></description><category></category></item><item><title><![CDATA[CAN总线学习（一）：CAN硬件电路]]></title><link>https://blog.youkuaiyun.com/D_handsome/article/details/162586630</link><guid>https://blog.youkuaiyun.com/D_handsome/article/details/162586630</guid><author>D_handsome</author><pubDate>Sun, 05 Jul 2026 01:26:54 +0800</pubDate><description><![CDATA[CAN总线通信需要控制器配合收发器实现电平转换，采用差分信号传输。高速CAN采用闭环网络和120Ω终端电阻，隐性电平为0V，显性电平为2V；低速CAN采用开环网络和2.2kΩ电阻，电平差更大（隐性-1.5V，显性3V）。收发器通过控制MOS管实现总线电平切换，隐性状态断开MOS管（默认高电平），显性状态导通MOS管形成电压差。不同设计适应不同速率需求：高速CAN闭环结构利于快速恢复，低速CAN大开环电平确保长距传输可靠性。]]></description><category></category></item><item><title><![CDATA[嵌入式：Bootloader跳转到固件流程]]></title><link>https://blog.youkuaiyun.com/D_handsome/article/details/161803640</link><guid>https://blog.youkuaiyun.com/D_handsome/article/details/161803640</guid><author>D_handsome</author><pubDate>Mon, 08 Jun 2026 19:25:37 +0800</pubDate><description><![CDATA[摘要：MCU通过Bootloader完成固件(.bin)刷写后，需要正确跳转到APP程序。关键步骤包括：1)Bootloader关闭外设和中断；2)将中断向量表地址更新为APP在Flash中的起始地址(如0x08010000)；3)通过汇编指令更新MSP和PC指针，跳转到APP的中断向量表。APP程序随后按照标准启动流程执行：Reset_Handler→SystemInit→main()。该过程确保了两个独立程序(Bootloader和APP)的中断向量表和运行环境正确切换。]]></description><category></category></item><item><title><![CDATA[深入理解 RTOS 任务启动：SVC 异常与寄存器恢复过程]]></title><link>https://blog.youkuaiyun.com/D_handsome/article/details/161594334</link><guid>https://blog.youkuaiyun.com/D_handsome/article/details/161594334</guid><author>D_handsome</author><pubDate>Mon, 01 Jun 2026 16:23:36 +0800</pubDate><description><![CDATA[RTOS启动首个任务时通过SVC_Handler进入异常处理流程。Cortex-M硬件会自动保存部分寄存器（R0-R3、R12、LR、PC、xPSR）形成异常栈帧，而R4-R11需RTOS手动保存。任务栈结构需包含这两部分：手动保存区和硬件栈帧区。在SVC_Handler中，首先从任务栈手动恢复R4-R11寄存器，然后将PSP指针指向异常栈帧起始地址。通过异常返回机制，硬件自动恢复剩余寄存器，并将PC指向任务入口，从而实现任务切换。该过程充分利用了Cortex-M的硬件特性，通过软硬件协同完成上下文切换。]]></description><category></category></item><item><title><![CDATA[嵌入式：Bootloader中ringbuffer中断入队&主循环出队存在的问题]]></title><link>https://blog.youkuaiyun.com/D_handsome/article/details/161430387</link><guid>https://blog.youkuaiyun.com/D_handsome/article/details/161430387</guid><author>D_handsome</author><pubDate>Tue, 26 May 2026 21:22:37 +0800</pubDate><description><![CDATA[摘要：Bootloader使用ringbuffer实现串口数据的异步解析，中断接收数据入队，主循环出队解析。关键问题在于中断入队和主循环出队操作tail指针时的并发冲突：当tail=0x00FF时，中断中未完整更新16位指针（仅更新低字节），导致tail错误变为0x0000（应为0x0100），引发缓冲区满的错误判断，造成数据丢失。这揭示了嵌入式系统中共享资源访问的原子性问题。]]></description><category></category></item><item><title><![CDATA[Vscode配置C/C++环境“无法使用 compilerPath 解析配置”及引用路径问题]]></title><link>https://blog.youkuaiyun.com/D_handsome/article/details/161342451</link><guid>https://blog.youkuaiyun.com/D_handsome/article/details/161342451</guid><author>D_handsome</author><pubDate>Sat, 23 May 2026 15:06:41 +0800</pubDate><description><![CDATA[摘要：本文分析了C/C++项目中头文件引用错误的问题。在c_cpp_properties.json配置文件中，相对路径引用会导致标准头文件和include路径中的子文件引用失败。正确的做法是使用绝对路径，格式为${workspaceFolder}+相对路径。示例展示了如何将原配置中的相对路径修改为绝对路径，包括app、components、driver、platform等目录路径以及编译器路径，确保项目能够正确识别和引用所有必要的头文件。]]></description><category></category></item><item><title><![CDATA[嵌入式：单片机启动流程与MSP/PC指针原理]]></title><link>https://blog.youkuaiyun.com/D_handsome/article/details/161278988</link><guid>https://blog.youkuaiyun.com/D_handsome/article/details/161278988</guid><author>D_handsome</author><pubDate>Thu, 21 May 2026 12:11:28 +0800</pubDate><description><![CDATA[摘要：单片机启动时首先执行启动文件中的初始化流程，包括设置MSP（栈指针）和PC（程序计数器）。MSP用于管理函数调用时的栈操作，PC则指示下一条执行指令。通过实例分析展示了从复位到main()函数的完整过程：复位时MSP和PC被赋予初始值，进入main()后通过调整SP为局部变量分配栈空间，函数调用时PC跳转并保存返回地址。整个过程体现了MCU通过MSP管理栈空间、PC引导指令执行的运行机制。]]></description><category></category></item><item><title><![CDATA[WSL安装中“wsl --list --online”未显示Ubuntu版本号]]></title><link>https://blog.youkuaiyun.com/D_handsome/article/details/161259133</link><guid>https://blog.youkuaiyun.com/D_handsome/article/details/161259133</guid><author>D_handsome</author><pubDate>Wed, 20 May 2026 15:57:43 +0800</pubDate><description><![CDATA[摘要：Windows 10用户安装WSL时若无法显示Ubuntu版本号，是因WSL版本过低。解决方案分三步：1）执行&quot;wsl --update&quot;升级至WSL2；2）重新运行&quot;wsl --list --online&quot;查询发行版；3）通过&quot;wsl --install --web-download -d Ubuntu-24.04&quot;下载指定版本。该流程可解决旧版WSL不兼容问题，实现Ubuntu 24.04的顺利安装。（149字）]]></description><category></category></item><item><title><![CDATA[嵌入式： 为什么中断服务函数必须尽快执行完毕？]]></title><link>https://blog.youkuaiyun.com/D_handsome/article/details/160635554</link><guid>https://blog.youkuaiyun.com/D_handsome/article/details/160635554</guid><author>D_handsome</author><pubDate>Wed, 29 Apr 2026 21:34:22 +0800</pubDate><description><![CDATA[文章摘要：实验发现当USART3中断处理函数中包含耗时日志打印时，会导致数据包丢失。分析表明，在回调函数中执行printf打印会占用过多时间，使得在115200波特率下无法及时处理连续接收的数据字节（每个字节需在86μs内处理）。由于串口1的日志输出波特率远低于CPU主频，导致中断响应延迟，当上位机快速发送多字节时，未及时读取的DR寄存器数据会被新数据覆盖，从而产生吞包现象。建议优化方案包括：移除中断中的耗时操作、使用DMA传输、或建立环形缓冲区进行异步处理。]]></description><category></category></item><item><title><![CDATA[嵌入式：什么是回调函数，为什么要使用回调函数？]]></title><link>https://blog.youkuaiyun.com/D_handsome/article/details/160635493</link><guid>https://blog.youkuaiyun.com/D_handsome/article/details/160635493</guid><author>D_handsome</author><pubDate>Wed, 29 Apr 2026 21:03:03 +0800</pubDate><description><![CDATA[回调函数是通过函数指针调用的函数，用于实现不同功能模块间的解耦。当驱动层事件发生时（如按键按下），通过预先注册的回调函数通知应用层执行相应操作，而无需驱动层了解具体实现。使用步骤：1）定义回调函数类型；2）提供注册接口（如key_register_callback）；3）事件触发时调用注册函数。相比直接调用具体函数，回调机制使驱动层更通用，应用层可灵活扩展功能（如点灯、蜂鸣等），提升了代码复用性和可维护性。典型应用场景包括中断处理、异步通信等需要分层设计的系统。]]></description><category></category></item><item><title><![CDATA[Pyrtlsdr历程及相关资料]]></title><link>https://blog.youkuaiyun.com/D_handsome/article/details/129148909</link><guid>https://blog.youkuaiyun.com/D_handsome/article/details/129148909</guid><author>D_handsome</author><pubDate>Tue, 21 Feb 2023 19:56:01 +0800</pubDate><description><![CDATA[pyrtlsdr相关学习资料]]></description><category></category></item><item><title><![CDATA[Matlab高斯白噪声信道仿真]]></title><link>https://blog.youkuaiyun.com/D_handsome/article/details/127854740</link><guid>https://blog.youkuaiyun.com/D_handsome/article/details/127854740</guid><author>D_handsome</author><pubDate>Mon, 14 Nov 2022 20:38:01 +0800</pubDate><description><![CDATA[信号叠加一个的均值为0.2，方差为0.5的高斯噪声后进行信号和噪声功率谱密度分析。]]></description><category></category></item><item><title><![CDATA[基于RTL—SDR及Simulink的FM收音机仿真]]></title><link>https://blog.youkuaiyun.com/D_handsome/article/details/126556879</link><guid>https://blog.youkuaiyun.com/D_handsome/article/details/126556879</guid><author>D_handsome</author><pubDate>Sat, 27 Aug 2022 13:53:49 +0800</pubDate><description><![CDATA[基于通信系统建模与仿真原理后，利用rtl-sdr模块在Simulink上进行FM收音机仿真。]]></description><category></category></item><item><title><![CDATA[Simulink仿真代码之step（）函数的使用]]></title><link>https://blog.youkuaiyun.com/D_handsome/article/details/126111384</link><guid>https://blog.youkuaiyun.com/D_handsome/article/details/126111384</guid><author>D_handsome</author><pubDate>Mon, 01 Aug 2022 22:42:45 +0800</pubDate><description><![CDATA[simulink 仿真代码中调用库元件的step（）的使用注释]]></description><category></category></item><item><title><![CDATA[Matlab中firpm函数设计具有非对称衰减的 FIR 带通滤波器]]></title><link>https://blog.youkuaiyun.com/D_handsome/article/details/126083500</link><guid>https://blog.youkuaiyun.com/D_handsome/article/details/126083500</guid><author>D_handsome</author><pubDate>Sun, 31 Jul 2022 11:45:27 +0800</pubDate><description><![CDATA[Matlab使用firpm函数时的参数解释]]></description><category></category></item><item><title><![CDATA[采样频率在频谱分析中的理解]]></title><link>https://blog.youkuaiyun.com/D_handsome/article/details/125869631</link><guid>https://blog.youkuaiyun.com/D_handsome/article/details/125869631</guid><author>D_handsome</author><pubDate>Tue, 19 Jul 2022 13:17:46 +0800</pubDate><description><![CDATA[采样频率在频谱分析的主要地位，即模拟信号到数字信号，频谱的变化入手，抓住采样频率这个关键区间内，可以还原模拟信号的全频段的重点]]></description><category></category></item><item><title><![CDATA[SDR在windows环境下pyrtlsdr的安装]]></title><link>https://blog.youkuaiyun.com/D_handsome/article/details/125437679</link><guid>https://blog.youkuaiyun.com/D_handsome/article/details/125437679</guid><author>D_handsome</author><pubDate>Fri, 24 Jun 2022 01:24:32 +0800</pubDate><description><![CDATA[解决windows下安装pyrtlsdr遇到的问题]]></description><category></category></item></channel></rss>