- 博客(14)
- 收藏
- 关注
原创 51单片机串口中断无法进入纠错
使用51单片机,用interrupt定义中断服务函数时,没有注意到之前有定义过相同的中断服务函数,但是编译通过,导致每次进入另一个中断,将RI(接收完成标志位)清除。
2025-03-15 09:48:39
121
原创 RDM协议数据包全解读(上)
最近开发RDM控制端的时候遇到了许多问题,在查阅官方文档后才发现RDM协议不仅只有9种数据包。截至目前的文章只介绍了九种,在这里补充剩下的数据包。之前的九种数据包可以看这篇文章标准RDM协议详解及代码实现篇一 —— RDM协议详解及数据包定义-优快云博客一、命令类型和命令ID1、CC(命令类型)CC还是只有三大类,发现,获取,设置,如下图,而PID( 命令ID)就有很多了2、DISC(发现命令)DISC有三个PID,前面文章有介绍。分别是发现设备,哑音,解除哑音。
2025-02-25 16:39:33
943
原创 关于DMX&RDM协议的 优化和纠错
年前写的几篇关于DMX及RDM协议的文章或多或少有点小问题,不能兼容部分设备。这里统一进行纠错并优化 DMX&RDM的接收方法 及 使用DMA进行 RDM数据的发送一、纠错不定期更新......
2025-02-22 11:01:22
1088
原创 【IAP】篇三 —— 开发属于自己的下载器 附HAL库代码
前两篇介绍了IAP的实现原理和数据包的传输,本篇为本系列的最后一篇,编写自己的下载器将固件升级包发送出去更新数据。一、固件升级逻辑主要的逻辑就是下载器将自己FLASH中的新的固件通过自定义的协议发送给设备,设备收到新的固件就下载到FLASH中完成更新。我的自定义的协议在【IAP】篇二 —— 自定义数据包传输协议实现固件升级中有介绍。1、下载器数据包发送逻辑简化版的逻辑就是这样的,因为我有两个固件需要一起完成升级,所以代码会复杂一点加油少年,完成一个属于自己的下载器吧!
2025-01-12 09:45:00
999
2
原创 标准【DMX512】协议详解 & 接收与发送实现(附HAL库代码)
DMX512协议主要用于控制舞台设备,也可用于控制灯光设备。这里给出DMX512协议的国际标准,有兴趣的可以自行研究。本文主要了解DMX512协议的时序以及数据包的收发。
2025-01-10 11:19:42
3502
原创 【IAP】篇二 —— 自定义数据包传输协议实现固件升级
阅读本篇需要有bootloader和FLASH内存划分的知识,如果不了解可以看上一篇IAP篇一 —— FLASH内存划分 & Target设置 附Bootloader或者网上搜索。一、固件升级概念 及 传输信道在高级的应用开发中,产品发布后不是一成不变的,需要对产品不断的迭代升级,修正BUG,固件升级就是用来完成这个步骤的。固件升级将新的固件代码下载到设备的闪存中,并替换旧的代码。这个过程可以通过多种方式实现,如串口、USB、网络等。完成升级后,设备会重新启动并以新的固件版本运行。
2025-01-07 11:34:38
1014
2
原创 【IAP】篇一 —— FLASH内存划分 & Target设置 附Bootloader
主要是技术实现,完成一个完整的bootloadr编写+App下载+芯片加密的流程,原理不深究,如果对FLASH内存划分了解充分的可以跳转到第四步。一、存储器映射市面上绝大部分32位单片机都遵循以下结构进行内存划分(每个开发板的内存划分结构相同,但是内存大小不同,需要参照自己的用户手册进行开发)最主要看的是三块地方Code RAM和分别是用户代码区 运存和外设寄存器。
2025-01-04 13:52:59
2211
原创 使用【芯片UID】实现芯片加密的代码
每个芯片都有唯一的UID,根据用户手册的存储器架构可以快速找到UID的存放地址,以PY32F403为例,UID存放在0x1FFFF5800在用户手册可以快速找到实现原理是自己写一套加密算法,读出UID,进行加密处理生成密文。生成密文后将密文保存到非易失存储器中,可以是板上存储器,也可以是FLASH。官方推荐的做法是存放到备份寄存器中,备份寄存器自带侵入检测,可以保护数据。
2024-12-31 09:26:50
983
原创 串口DMA配置错误笔记 —— 已解决
需要将DMA的通道连接到串口寄存器,一般来说所有DMA通道都可以连接串口寄存器,但部分芯片的DMA的部分通道可能不支持连接,需要查看用户手册。如果上一次的数据没有发送完却再次开启DMA发送会导致发送失败,即进入HAL_BUSY,建议开启DMA中断,在中断中调用会自动清除发送完毕标志位允许下一次传输。开启DMA接收时如果串口数据寄存器DR里有数据DMA就会立即搬运一次,如果不想接收该数据可以开启DMA前先清空DR。进行DMA接收时最好不要到接收的内存中读取数据,如果需要读取数据要先关闭DMA接收。
2024-12-28 09:14:33
708
原创 兼容DMX及RDM协议的数据包接收方式 & 串口BREAK中断
原以为DMX协议的起始信号检测非常反人类,需要切换GPIO为输入模式,或者当成错误帧处理。后来了解到了BREAK中断才发现实现如此简单,进行驱动编写的时候还是要多看看芯片的用户手册,许多功能都是HAL库没有封装好的。
2024-12-27 12:03:54
1186
原创 标准RDM协议详解及代码实现篇三 —— 接收端解包 & 串口DMA接收实现
RDM协议最后一篇,接收端的解包实现以及使用串口DMA减少CPU占用。一、串口DMA接收 & 阻塞发送修改了DMA接收,同时区分控制端额外初始化UID链表,初始化后默认状态是接收。/* 开启时钟 *//* GPIO *//* 串口 *///空闲中断/* 开启中断 */#endif因为RDM协议是半双工的,所以需要进行收发模式切换,在发送模式时需要关闭DMA接收和串口中断。//DMX发送。
2024-12-21 15:37:22
982
原创 标准RDM协议详解及代码实现篇二 —— 控制端组包解包及二分搜寻算法
本文介绍了控制端的组包和解包函数,接收端的组包和解包也类似,相信你也能独立完成接收端的组包和解包函数。下面是接口实现结果,本文结束。
2024-12-19 10:26:23
740
原创 市面上常见的开发板的介绍与选型
在学习嵌入式中最常接触的开发板是51系列开发板以及stm32系列开发板,但再实际生产中使用的开发板远不止这两种,本文为大家介绍一下市面上常见的开发板
2024-12-14 08:25:56
2522
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人