完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
MCU:SC92F7321。之前我便发过串口的类似问题,在各位坛友的指点下已经得到解决,但经过反复测试,模拟发送串口存在如下问题:在发送过程中,有时会出现字节漏发的情况,本来想用分析仪之类的抓一下波形,但奈何在抓取过程中从不出现,真是让人无奈。功能就是硬件串口中断接收,再转IO口发送数据,实现一个IO口通信。 现在有两个怀疑对象:一个是程序写出BUG;一个是并非是MCU漏发,而是波形在那几个字节这儿畸变了,串口助手接收不认为是数据。(稍后附上发送相关代码),望各位大大指点下迷津 |
|
相关推荐
8个回答
|
|
|
|
|
|
|
|
|
|
接收用的硬件串口中断,发送时转为IO发送,也就是RX转为普通IO口比如P12,单线通信,在发送时需要将串口关闭且不允许接收数据,您觉得会是哪里的问题呢?
|
|
|
|
原来是单线通信,还以为是用其它GPIO转发。
你这个定时器定时发送程序,显然有很多需要完善的细节。 除了定时器,是否还有其它中断? 定时器的程序也不够精细,MCU机器周期是多少?从代码看,应该是1us,这个已经是比较慢速的MCU了。 定时器里关闭T0,赋值,计算输出是0还是1,都需要时间,导致实际输出波形严重偏离设计初衷。 1、进定时器,不可以暂时关闭T0 2、TH0永远赋值0xff,TL0是-103,也就是153,如果设置T0是16bit定时器,直接: TL0+=153;TH0=0XFF; 这样没有计时误差。 由于TH永远是0XFF,直接用8bit重装载模式,更简单,也没有累计计时误差。 3、关于1和0的输出,中间计算判断占用时间,导致时序错误抖动,应该本次中断计算是1还是0,下次进中断时立即输出,这样每次输出不会前后抖动。 这些都是自己都可以分析出来的问题,示波器一看波形就知道了。 |
|
|
|
|
|
|
|
最好定义一个半双工通信协议,即平时接收命令时绝不会发送;发送应答时决不会接收新命令。
这样发送时就可以关闭中断,通过纯软件或查询定时器计数寄存器的方法来算延时,发送时序可以非常精准。 |
|
|
|
1 你逻辑分析仪的采样率是多少。如果实际上抖动很小,应该是软件bug,和时序部分逻辑可能关系不大。
2 TH0和TL0自动重载模式,这样能改善一些固定抖动。 3 P12赋值的值,进入中断后直接赋值,然后计算下次进中断要赋值多少,开中断前也要准备好P12要输出的值。这样能节省一些随机抖动。 4 TxFlag =1; TxTemp = dat; //将发送字节放入全局->在定时器里发 这两句是不是要换个位置? 5 Flag太多,计数太多,状态机待优化。 |
|
|
|
这种发送还不如直接软件延时,禁止中断,波特率搞高点,毕竟发送的数据应该不多 每发送完一个字节重新开一下中断,这样最多中断延时一个字节时间,大多数应用是满足要求的 你这样逻辑复杂了,容易出错, 定时中断应该最高优先级,同时要自动重装才好,中断函数不够简练 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
238 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
629 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
552 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
552 浏览 0 评论
1074 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11763 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 20:53 , Processed in 0.798189 second(s), Total 83, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号