IO口模拟串口通信问题

2019-08-14 05:51发布

问题来自于今年国赛的光通信。
最后问题化简成这样

好了我单片发送方机编程实现的是在while循环里面不停的发0x07这个数据

  1.   while(1)
  2.         {
  3.             while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
  4.             USART_SendData(USART1,0x07);
  5.         }
复制代码
2.jpg

然后在串口助手里面查看,果然接收的数据为0x70刚好成了误码的数据了。

下面给出我分析的误码的原理
1.jpg
上图中S是串口通信起始位,T是停止位,空是两帧数据之间的间隔,上面是写出的得到误码的数据,下面是我期望的数据。
原因就是起始位置判断不对,它把原本数据的第4位看成了起始位,造成的,
我想知道这个怎么解决呢?







友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
squall001
1楼-- · 2019-08-14 07:07
yklstudent 发表于 2017-8-16 09:33
楼主这是IO模块串口通信???

对,用IO口模拟串口通信
Sun_Fly
2楼-- · 2019-08-14 09:14
起始之前拉高时间长一点
squall001
3楼-- · 2019-08-14 10:26
Sun_Fly 发表于 2017-8-16 17:42
起始之前拉高时间长一点

这个比例关系是怎么样的? 我反正100K的速度
squall001
4楼-- · 2019-08-14 12:56
 精彩回答 2  元偷偷看……
squall001
5楼-- · 2019-08-14 13:23
yklstudent 发表于 2017-8-17 13:27
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
            USART_SendData(USART1,0x07);
...

这是单片机正常发送,模拟是另外一边

一周热门 更多>