自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

原创 标准RDM协议详解及代码实现篇一 —— RDM协议详解及数据包定义

详细解析RDM协议并通过HAL库

2024-12-18 16:02:38 2772

原创 市面上常见的开发板的介绍与选型

在学习嵌入式中最常接触的开发板是51系列开发板以及stm32系列开发板,但再实际生产中使用的开发板远不止这两种,本文为大家介绍一下市面上常见的开发板

2024-12-14 08:25:56 2522 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除