电子产业一站式赋能平台

PCB联盟网

搜索
查看: 14|回复: 0
收起左侧

为什么嵌入式调试经常用UART,不用SPI、I2C、USART?

[复制链接]
匿名  发表于 2024-3-23 10:00:00 |阅读模式
你点击蓝字关注,回复“入门资料”获取单片机入门到高级开挂教程
开发板带你入门,我们带你飞

文 | 无际(微信:2777492857)
全文约1507字,阅读大约需要 5 分钟
我一直在做单片机开发,不知道Linux是怎么一种调试方式。
对于单片机开发来说,不管是UART、I2C、SPI、USART,比起像STlink之类的在线硬件仿真调试,都是弟弟。
以前我也是用比较Low的办法,去调试程序的BUG,比如借助数码管,屏、UART,甚至是LED灯,因为有些产品并没有把UART的接口引出来。
这些办法,其实对于复杂点的产品,调试效率是极低的,特别是指针异常的情况。
我对在线仿真调试的渴望和认知,是几年前,我在做车载产品,用到了升迈的GM81xx方案,领导让我把在线仿真调试搭建起来。
忘记当时是用哪个开发工具了,反正不是Keil。
资料贼少,也没支持,搞了我几个星期,都有点想发火了,然后跟领导说不搞在线仿真行不行,我直接写程序还更快一点。
领导说不行,也没说原因,我也没鸟他,边写程序边研究,现在还有当时的程序版本记录。

当时我非常不理解他,为什么非要死磕在线仿真功能,又不是刚需,没有这功能也能写程序开发产品啊,是不是看我不爽,故意给我找茬?
直到后面,我接触到一些复杂的项目,碰到了一些棘手的BUG,才理解他的用意,理解在线仿真调试的重要性。
比如说我们无际项目特训营的项目3和6的菜单系统。



在菜单系统跑起来之前,先初始化好,把各种子菜单通过链表的方式关联起来。

当我们要切换菜单的时候,就不用记住要跳转到哪个菜单了,直接把系统菜单的指针,指向当前菜单的子/父级菜单地址即可。

这种方式,哪怕是几十上百个子菜单,管理起来也不会乱,更方便,灵活。
但用链表这种方式,调试阶段出现BUG的时候比较头痛,因为涉及结构体、指针比较多,如果没有STlink在线仿真看指针地址的话,一个BUG可能要搞一天,如果直接用在线仿真调试看地址,可能几分钟就搞定了。
所以,一旦享受过在线硬件仿真调试的,很难再接受用UART去调试,除非硬件上不支持。
USART用的也多,如果是用于调试目的,一般会配置为UART模式。
所以USART和UART对于调试来说,可以理解成是一样的。
单片机开发基本不会用IIC和SPI去调试的,如果有,我愿尊称他为大佬!
我觉得有必要先了解下,这几种协议的区别:
特性/协议UART (通用异步收发器)USART (通用同步/异步收发器)IIC (Inter-Integrated Circuit)SPI (Serial Peripheral Interface)
同步性异步通信支持同步和异步通信同步通信同步通信
连接线数2线(Tx和Rx)2或3线(Tx、Rx和可选的RTS/CTS)2线(SDA和SCL)4线(MOSI、MISO、SCLK和SS)
波特率可变,由软件设置可变,由软件设置可变,由软件设置可变,由软件设置
通信速度慢到中等可变,支持高速通信慢到中等高速通信
错误检测奇偶校验可配置奇偶校验或无校验无内置错误检测,可使用CRC无内置错误检测
硬件复杂性简单较复杂,有额外的硬件支持简单较复杂
多主设备支持不支持支持支持不支持
应用场景串口通信、调试接口微控制器间通信、RS-232/RS-485接口低速设备通信,如传感器、EEPROM高速设备通信,如SD卡、LCD显示屏

IIC和SPI不用于调试,我个人的心得是,调试需要通过电脑串口去看数据才方便,电脑有串口,但是没有IIC和SPI接口(或许有IIC,SPI的串口转接器,但多此一举,还不如直接用UART)。
还有一点就是距离的问题,串口加个485,距离能做得很远,方便调试那种距离比较远的设备。
end


下面是更多无际原创的个人成长经历、行业经验、技术干货。
1.电子工程师是怎样的成长之路?10年5000字总结
2.如何快速看懂别人的代码和思维
3.单片机开发项目全局变量太多怎么管理?
4.C语言开发单片机为什么大多数都采用全局变量的形式
5.单片机怎么实现模块化编程?实用程度让人发指!
6.c语言回调函数的使用及实际作用详解

7.手把手教你c语言队列实现代码,通俗易懂超详细!

8.c语言指针用法详解,通俗易懂超详细!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表