- 博客(71)
- 收藏
- 关注
原创 开漏和推挽输出
如果我们控制输出为0,低电平,则P-MOS管关闭,N-MOS管导通,使输出接地,若控制输出为1(它无法直接输出高电平)时,则P-MOS管和N-MOS管都关闭,所以引脚既不输出高电平,也不输出低电平,为高阻态。正常使用时必须接上拉电阻。开漏模式一般应用在I2C、MDIO、SMBUS通讯等需要“线与”功能的总线电路中,除此之外,还用在电平不匹配的场合,如需要输出5伏的高电平,就可以在外部接一个上拉电阻,上拉电源为5伏,并且把GPIO设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出5伏的电平。
2025-06-20 19:34:33
268
原创 STM32H750VBT6配置定时器
本文介绍了使用STM32CubeMX配置时钟树和TIM2定时器的关键注意事项。在时钟树配置中,需特别注意晶振频率匹配(如40M vs 8M)、Flash延迟参数手动配置、电压稳定性、480MHz主频限制以及芯片版本识别。定时器配置部分阐明了TIM2作为普通定时器使用APB1时钟的特性,详细演示了生成代码、开启中断、编写回调函数及主程序调用的完整流程。文章通过图文结合的方式,针对调试过程中遇到的典型问题提供了实用解决方案,对嵌入式开发者具有实际指导意义。
2025-06-18 13:24:57
255
转载 指针与内存对齐
2)当用#pragma pack(n)指定时,以n和结构体中最长的成员的长度中较小者为其值。1)当未明确指定时,以结构体中最长的成员的长度为其有效值。))指定长度时,强制按照此值为结构体的有效对齐值。3)当用__attribute__ ((
2025-06-16 21:10:53
3
原创 CRC64校验
摘要:CRC64校验在单片机应用中具有优势,其更高的准确性弥补了CRC16的不足。虽然CRC64计算复杂度更高(8n vs CRC16的2n),但对单片机性能影响不大。文中提供了CRC64的ECMA标准实现代码,包含两个核心函数:Generate_CRC64_ECMA用于生成校验值并写入Flash,Check_CRC64_ECMA用于启动时校验数据完整性。实现采用0x42F0E1EBA9EA3693多项式,通过移位和异或操作完成校验,最后与存储值比对验证数据可靠性。(149字)
2025-06-16 20:12:13
194
原创 结构体定义嵌套定义
对于不熟悉这种嵌套结构体的开发者来说,可能会对代码的理解产生困难。例如,他们可能会误以为 WCH 和 RCH 是独立的结构体,而不是嵌套在 AD4858_IOMap_TypeDef 中的字段。不必要在外部定义其他的结构体声明,更符合面向对象的设计思想。这种初始化方式会导致编译错误。在C语言中,嵌套结构体不能直接初始化。缺点:增加编译器负担。
2025-05-28 18:59:33
147
原创 哪里买正版元器件?
在寻找芯片一级供应商时,贸泽和e络盟是可靠的选择,尤其是贸泽,尽管价格较高,但其器件种类齐全,特别适合研发使用。对于调试工具如J-LINK,建议购买正版,因为盗版产品使用正版驱动时可能会遇到效率问题。对于初学者,建议在嘉立创购买,避免在淘宝上购买,因为淘宝上假货较多,特别是STM32C8T6和功放芯片等产品。
2025-05-16 17:06:12
96
原创 vscode与keil的乱码不兼容问题
自动识别也可以设置识别优先级,把GB2312和UTF8排在自动识别序列前面(因为keil默认就是GB2312)在暂存更改的时候,不要把vscode的设置给暂存了,因为vscode的设置里面有自动转化编码格式。或者先把代码暂存提交,然后再咱才能提交vscodfe json配置文件,这样不会乱码。先提交json配置文件。这样就相当于配置生效,如果暂存效果相当于放弃当前配置。中文注释的话,打开vscode的自动识别格式,如下。
2025-05-08 11:46:37
773
原创 protothread协程库实现非阻塞延时(无操作系统)
这个协程库是根据行号来进行跳转的,struct pt里面只有一个short类型变量用来存 当前行号,具体代码如下,加sleep 1 是为了观察实验现象,项目里不加延时。只需要下面三个头文件即可实现非阻塞延时。
2025-04-25 14:34:36
325
原创 单片机使用printf,不用微库
由于MicroLIB对是缺省 C 库的备选库,它是为了配合实现要装入到极少量内存中的深层嵌入式应用程序而存在的,而这种使用场合下,多数是没有操作系统的,故它删除了与操作系统有关的函数,并且不符合 ISO C 库标准, 不支持某些 ISO 特性;原文链接:https://blog.csdn.net/sarsscofy/article/details/122395372。// 加入以下代码,以支持printf函数,而不需要选择use MicroLIB;//定义_sys_exit()以避免使用半主机模式。
2025-04-02 13:38:36
409
原创 串口/其他接收的回调函数流程
回调函数加链表而已,没啥高大上的,链表的每个节点是一个结构体,这个结构体有命令id,该命令的执行函数指针,下一个节点的地址等。如果串口或者其他收到消息id,就在此链表查询id是否匹配,也就是查链表,如果匹配则执行该id的函数指针。注册回调就是把这个函数指针加到此链表里面。
2025-03-31 10:53:10
107
原创 keil的代码美化工具AStyle3.1
F:\Software\keil break\MDK\there mdk\AStyle\astyle.exe 这个写exe所在的文件路径就行,不用和我一样。工具就是AStyle,但是现在官网发的安装包不好用,我之前用的版本挺好的。
2025-03-29 19:27:40
211
原创 关于AURIX在debug时elf文件丢失无法调试
在TriCore Debug (TASKING)文件夹下发现elf莫名其妙没有了,导致编译和调试均无法进行。解决办法右键工程,clean工程,然后再次编译即可。
2025-02-14 16:49:44
230
原创 AURIX相关安装调试问题_持续更新
这是安装aurix他自己弹出的安装DAS驱动,确认安装。安装aurix他会自己安装DAS,不需要自己再安装。或者去百度网盘获取,或者私我(有偿提供-5米)。创建AURIX项目,选择芯片,finsh即可。安装包需要去官方申请(很麻烦)oneeye依赖性要打勾。AURIX安装与配置。
2025-02-13 10:08:48
299
原创 keil已有项目改工程名
如果有现成的工程(往往都会有现成的工程),只需要稍微修改工程信息,借助这个基础工程会节省很大的开发周期;说明下如何简单快速的修改工程。
2024-12-22 20:35:09
257
原创 vscode通过ssh连接虚拟机进行开发
1.VSCODE安装扩展Tabnine(AI代码补全),Remote Development。在网上看SSH协议其实像加密的TCP协议(传输层协议),用于进程间通信。连接上就去ubuntu上建立vscode的工作区,把不需要的文件夹去掉。虚拟机自带的vscode很卡而且画质感觉不行,所以用这种方法解决。SSH还可以用下面这个软件去映射linux的文件。配置vscode的ssh config。host和name都可以通过命令查询。开启ubuntu的SSH服务。也可以在当前终端写命令。
2024-12-05 19:39:00
672
原创 面向对象思想和面向过程思想分析
所以崽这个类的实例是大学生和小学生,大学生和小学生是不同的对象,他们的写作业的方法不一样,但是写代码的时候只需要调用写作业这个方法就行了。面向过程需要的参数很多,面向对象需要的参数就是对象(类的实例-结构体),这样后续需要加某些属性,比如洗衣机的容量,直接在对象的定义处添加即可,不需再在函数的定义上添加。继承:就是定义类的时候,继承父类的属性,减少代码冗余,比如大学生和小学生都是学生,他们有学生的共同属性(如学号、班级等),这时候继承父类(学生)即可,不需要重复 定义。面向对象,这样看着更清晰。
2024-10-27 17:20:51
339
原创 嵌入式栈溢出怎么办?
在写文件的时候,因为把FATFS这些数据结构定义在了函数里,所以栈溢出了,我把比较大的数据结构放在全局变量上,就没事了.目前仅测试阶段,也可以放在堆里.不用的时候释放掉,减少耦合度.或者加static.
2024-09-13 15:52:23
281
原创 串口接收不到数据之电阻虚焊bug分析思路
单片机和EC移远通信模块进行通信,相同的代码运行在相同的硬件上,但是一个能联网,一个因为没有EC的应答连不上网。说要不响不代表两个模块的串口引脚没有连接,实测,YF08E的左侧和EC模块是通的,蜂鸣档响。YF08E的右侧和单片机是通的。检查单片机的连线发现,EC模块和单片机之中间夹着8位移位器YF08E,看了下他的作用。排除情况2,因为在EC模块上电的时候,能收到EC的准备命令RDY。这里飞线可以正常同学排查EC模块本身问题,用万用表的蜂鸣器档测。发现EC的接受引脚和单片机的引脚没有蜂鸣器响的声音。
2024-09-11 19:55:38
700
原创 程序员如何写笔记并整理资料?
这样就能看到XYD期间的更改,从而一步步进行审查,可以拒绝更改过允许更改。全部检查完毕,就可以把XYD期间这份word删除掉,保持word最新唯一性。存在自己的固态硬盘,确保自己的固态硬盘只存最新的。当然有钱直接开个腾讯文档会员小200块一年,也是可以的。没错,我也看了网上一大堆软件,还有git管理等等。个人认为如果笔记只是记录个人的经验积累,一个word就够了,那些notepad,laTex个人觉得不够简练。3.word自带的审阅功能,能帮助自己进行笔迹版本管理。
2024-09-08 19:28:12
2183
5
原创 Keil下载烧录程序到单片机提示flash outtime超时
3.有外部看门狗,外部看门狗用跳帽屏蔽了再下载,要用跳线帽短接外部看门狗,不要用杜邦线,之前试过杜邦线有时候不行,阻挡不住外部看门狗复位,跳线帽可以。2.RESET按键按一下再下载(或者一直按着下载),这样能让单片机进入烧录模式。
2024-09-05 09:26:06
937
原创 C语言接口
现在手里有一个pcf8563的RTC模块,之前同事写的不完整,功能有问题。但是也不是全部代码都要推翻的。比如可以利用里面的iic等功能函数。网上找了个demo,但是里面的函数名和同事的函数名都不一样,但是有的函数功能 是一样的。这时候可以用接口把两者缝合起来。接口:说白就是结构体+函数指针。接口可以减少耦合,模块化。
2024-09-04 17:04:21
473
原创 Git+word记笔记
程序员记笔记主要同步很重要,我这个方法只支持个人笔记,如果团队还是用企业微信开个企业会员比较方便。为什么用word,因为可以镶嵌代码和文档,不仅仅是文字,兼容性强。语雀,云笔记这些对于上传的word都是有限制的,10MB左右。公司网上gitee太卡了,回家在写。去gitee建仓库。然后添加公钥,SSH。
2024-09-04 13:58:57
411
原创 关于keil程序无法进入main函数问题
上面这么多其实就是想全擦然后分别写入程序和bootloader进单片机flash。到此,bootloader和代码都烧写好了,把擦除全片改为擦除扇区(否则再次烧写会把bootloader冲掉)3.编译完烧写在单片机上,这一步相当于冲掉了bootloader,只下载了程序进入单片机的flash。1.把单片机的芯片上的数据全擦了(bootloader+代码数据)情况:之前烧写没问题,不然再次烧写的稍后显示boot损坏。不会烧写bootloader的看这个。断点都取消掉,编译下载进去。然后勾选下面这两个框。
2024-08-07 11:02:41
1295
1
原创 liteos定时器回调时间过长造成死机问题解决思路
因为定时器的回调函数其实都是存在定时器回调队列里面的,如果一个回调过长,在实时性操作系统里会紊乱系统,加上屎山代码,就会死机。原代码是稳定的,现我实现EMQ平台断开连接的时候,把HSL的模拟点位数据采集到网关,然后存入Flash,当EMQ平台连接的时候,把Flash里面的点位数据放在消息队列里面,不影响实时采集。OK,不要动不动在回调函数写耗时操作,一两次可能没问题,但是一直进行回调的话,会造成奇怪的紊乱。最后的日志,然后就一直在进行度队列操作,队列ID是垃圾值。2.队列的id存的地方被覆盖了。
2024-07-25 19:46:27
476
原创 插入删除单链表指定结点-偷天换日法
同理前插法也用了偷天换日法。就是插入在p前的话,我直接就插到p上面,后面再copy一个p即可了。王道说下面的代码有BUG,比如当删除的结点p在最后一个元素时,p->next=NULL;q->data就是错误的,我认为加个判断就行。
2024-06-11 22:51:30
324
原创 数据结构与算法题目集(中文) 6-4 链式表的按序号查找
简单,没啥讲的int i = 0;int a = 0;if(K<=0)while(K–)if(!L)a=L->Data;L=L->Next;return a;
2024-06-11 14:32:38
128
原创 数据结构与算法题目集(中文) 6-3 求链表的表长
该代码使用循环遍历链表来计算链表的长度。代码首先定义了一个整数变量。while(NULL)相当于while(0)来遍历链表中的每一个节点,并将计数变量。用于计数,并初始化为0。
2024-06-11 14:02:23
393
原创 串口接收第一个字节接收不到
我在第一个字节收到后加了一个字节的延时(用标志位控制)。注意不能加太久延时,否则空闲中断发生,挥着中断时间溢出后面的字节都收不到了。看了网上说的,我一次只发一个字节不会出现这种情况,发多个字节全速运行就会出现这样情况,于是我怀疑是全速运行的锅。全速运行第一个字节就没有了。但是把接受的数据再发出来,发现第一个字节到了最后一个字节。我发 5 1 2 3 他接受的是1 2 3 5。我是115200的波特率,加了8us。
2024-04-17 09:34:33
627
原创 IAR跳转到别的目录的源文件了
解决方法2:把那个 ignore standard include directories 勾选了。V4的程序点击变量的引用处,项目出现了V3的源文件,V4没有。解决方法1:使用绝对路径。
2023-12-22 11:47:36
655
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人