OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4423|回复: 8

关于USART1传输数组停止位后面多一位高电平的问题。

[复制链接]

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-3-6
在线时间
0 小时
发表于 2015-4-13 18:13:00 | 显示全部楼层 |阅读模式
5金钱

之前关于串口的问题已经解决了

新的问题是:为什么传输一个7个数的数组,每个字节的停止位后都有一位高电平呢?

这是我编程的问题还是USART传输数据就是这样呢?

这个高电平是空闲状态么?求高手解答~

或者大家来帮我想一想可能是什么原因呢?感觉大脑一片空白。

看到这个帖子的朋友留个言帮顶下~谢谢大家~



最佳答案

查看完整内容[请看2#楼]

任何设备之间传递数据,必须要有时钟, 串口是异步,没有时钟,并非不需要,而是有其他解决办法, 第一是约定波特率,频率已知; 第二就是起始位,一个下降沿,解决时钟的相位问题。 如此,相位、频率都有了,时钟就可以自己产生。 所以,串口的格式中,起始位、停止位是必不可少的。 懂这个道理,才可能用 GPIO 模拟串口,或者用 CPLD、FPGA 来做串口。当然还存在很多细节问题。 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11557
金钱
11557
注册时间
2014-4-1
在线时间
1318 小时
发表于 2015-4-13 18:13:01 | 显示全部楼层
任何设备之间传递数据,必须要有时钟,

串口是异步,没有时钟,并非不需要,而是有其他解决办法,

第一是约定波特率,频率已知;

第二就是起始位,一个下降沿,解决时钟的相位问题。

如此,相位、频率都有了,时钟就可以自己产生。

所以,串口的格式中,起始位、停止位是必不可少的。

懂这个道理,才可能用 GPIO 模拟串口,或者用 CPLD、FPGA 来做串口。当然还存在很多细节问题。


由于下降沿有着“相位”的重要作用,所以平时必须保证为高电平;如果有下降沿出现,接收方就会误动作。

停止位本身就是高电平,其实是为下一个“下降沿”做好铺垫。
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-3-6
在线时间
0 小时
 楼主| 发表于 2015-4-13 19:31:46 | 显示全部楼层
我正在做毕业设计~是PLC与单片机的通讯~
用PLC与串口调试助手调已经成功了~
用USART与串口调试助手调也成功了~
现在就差一个PLC与USART调了,我觉得问题可能出在出现的这个小小的高电平上~
因为多了几个小小的高电平,导致后面的都接收不到了~
这是最关键的一点了,只要基础通讯完成,后面的事情都非常简单了~
看到帖子的大家回复下让我看到你们好嘛~谢谢~
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-13 19:35:45 | 显示全部楼层
没研究过,帮顶。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-3-6
在线时间
0 小时
 楼主| 发表于 2015-4-14 10:01:49 | 显示全部楼层
[mw_shl_code=c,true] int main(void) { u8 i; u8 a,b,c,d,e,f,g,h; u8 t=0; u8 len; u16 times=0; u8 fasongshuzu[7]={0x40,0x41,0x42,0x43,0x44,0x45,0x46}; SystemInit();//系统时钟等初始化 delay_init(72); //延时初始化 NVIC_Configuration();//设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(9600);//串口初始化为9600 LED_Init(); //LED端口初始化 while(1) { if(KEY0==0) { delay_ms(100); if(KEY0==0) { for(i=0;i<7;i++) { USART_ClearFlag(USART1,USART_FLAG_TC);//清除标志位 USART1->DR=fasongshuzu; while((USART1->SR&0X40)==0);//等待发送结束 } // USART_RX_STA=0; } }[/mw_shl_code]

代码如上所示,会不会是最上面那个清除标志位的问题呢?
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-3-6
在线时间
0 小时
 楼主| 发表于 2015-4-14 13:37:46 | 显示全部楼层
问题没解决,不过现在已经不是问题了。
估计就是中间的空闲位吧~对通讯没影响
已经成功通讯~问题就是AB两端线接反了……
总是犯这种低级错误也是醉了……
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11557
金钱
11557
注册时间
2014-4-1
在线时间
1318 小时
发表于 2015-4-14 13:53:16 | 显示全部楼层
LZ 的问题,“停止位后都有一位高电平”,怎么回事呢?

那就意味着也有下降沿。
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-3-6
在线时间
0 小时
 楼主| 发表于 2015-4-14 20:13:30 | 显示全部楼层
回复【7楼】xuande:
---------------------------------
谢谢回复~对串口理解更深了~
的确是有下降沿的~不过是与下一个起始位构成的~
具体问题就是比如连续传输两个数0x40,0x41
波形就是这样的~11……11 0 0000 0010 1 1 0 1000 0010 1 1 11……11
在一位停止位1后面还有一位高电平~
请问这个是短暂的平时么?
就像传完一个字符累了歇口气似的~
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11557
金钱
11557
注册时间
2014-4-1
在线时间
1318 小时
发表于 2015-4-14 20:34:07 | 显示全部楼层
火车上,不方便了。

感觉两个发送端接一起了。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 15:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表