OpenEdv-开源电子网

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

USART1发送数据,用示波器测波形乱码

[复制链接]

2

主题

15

帖子

0

精华

新手上路

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

准备做一个单片机与PLC通讯,利用usart1发送数据,利用示波器测试txd的波形。

示波器测得的波形一直在闪动,按下stop键后才能看清。

当传输是一个数组时,没有发现规律。

当传输是0x01时波形显示为00000001101。

注释掉的代码是数组传输,没注释的是单个数据的传输。

程序代码如下所示:

[mw_shl_code=c,true] int main(void) { u8 i; u8 t=0; u8 len; u16 times=0; u8 fasongshuzu[4]={0x01,0x02,0x03,0x0A}; SystemInit();//系统时钟等初始化 delay_init(72); //延时初始化 NVIC_Configuration();//设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(9600);//串口初始化为9600 LED_Init(); //LED端口初始化 while(1) { ++t; // if(t==1) { // for(i=0;i<4;i++) { USART_SendData(USART1,0x01); // USART_SendData(USART1,fasongshuzu); // while((USART1->SR&0X40)==0);//等待发送结束 while(USART_GetFlagStatus(USART1, USART_FLAG_TC)!=SET); } USART_RX_STA=0; }[/mw_shl_code]


请问各位高手,为什么会是这种情况。

示波器可以用来测试USART么?如果不可以的话应该如何测试呢?

是我测试的方法有问题还是程序有问题呢?

还是最后的是停止位?但是发送0x21的时候并没有这种规律。

小白玩家,困惑多日!诚心求教!不胜感激!

最佳答案

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

波形乱码问题已解决,分享给有可能跟我犯同样错误的人。 开始的时候波形抖动是因为我程序中t设置的是u8类型,++t一直执行会溢出,导致一直发送,波形重叠了。 后来使用按键0发送改善了这个问题。 乱码其实并不是乱码,是自己读取的方式不对。 USART传输数据的时候是空闲线高电平1,起始位低电平0,停止位高电平0。 但传输时是从低位开始传输,所以低位应该在示波器屏幕右侧。 例:若发送数据为0X41即二进制0100 0001,一位停 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-3-6
在线时间
0 小时
 楼主| 发表于 2015-3-31 16:34:44 | 显示全部楼层
波形乱码问题已解决,分享给有可能跟我犯同样错误的人。
开始的时候波形抖动是因为我程序中t设置的是u8类型,++t一直执行会溢出,导致一直发送,波形重叠了。
后来使用按键0发送改善了这个问题。
乱码其实并不是乱码,是自己读取的方式不对。
USART传输数据的时候是空闲线高电平1,起始位低电平0,停止位高电平0。
但传输时是从低位开始传输,所以低位应该在示波器屏幕右侧。
例:若发送数据为0X41即二进制0100 0001,一位停止位,则示波器显示波形应该为:0 1000 0010 1。而并非0 0100 0001 1。
现在串口调试助手和示波器的波形都可以对上了。
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-3-6
在线时间
0 小时
 楼主| 发表于 2015-3-31 19:19:17 | 显示全部楼层

自顶~~~发现有起始位和停止位~但是波形还是不对~将位数修改至9了~还是不对~

一边自己探索一边等待热心朋友的解救吧~

回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-31 22:49:09 | 显示全部楼层
帮顶....
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-3-6
在线时间
0 小时
 楼主| 发表于 2015-4-1 17:06:18 | 显示全部楼层

今天对多种数据进行了测试~结果如下:

0x22:1 00100010 01

0x33:1 00110011 01

0x44:011 00100010 011 00010001

0x55:1 01010101 01

0x66:1 01100110 01

0x77:1 01110111 01

0x32:1 00110010 01

0x21:011 01000010 011 0100001

其中只有0x44 0x21与想象中不符合,所以记录了更多的数据,感觉另外几组都是有规律的周期性变化。

回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-3-6
在线时间
0 小时
 楼主| 发表于 2015-4-1 17:10:28 | 显示全部楼层
修改了IO口频率之后波形依旧在颤抖,不知道如何解决。
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-3-6
在线时间
0 小时
 楼主| 发表于 2015-4-5 16:46:21 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子大大,帮帮忙吧!我一直怀疑波形不稳定与乱码是缓存区是9位,我发送的数据是8位的缘故。请问会是这个原因吗?
可是如何清除发送缓存呢?
我觉得这是最简单的程序了!不是想发送字符串也不想发送接收到的数据,只是简单的想发送一个数组而已!
利用串口调试助手能把发送的数组转化成字符显示在屏幕上了,但是我的程序明明只想让它发一次它却一直在发送。
已经卡在这好几个星期了!还是没有改善呀!毫无头绪!救命啊!!!!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-5 22:45:11 | 显示全部楼层
回复【6楼】听雪的小松:
---------------------------------
先搞通基础的通信再说。
PLC没用过,不知道支不支持单字节测试。
支持的话,测试下吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-3-6
在线时间
0 小时
 楼主| 发表于 2015-4-8 11:03:19 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
谢谢,再请问一下~如果用串口调试助手接收数据,显示是正确的信息,是不是就是通讯成功了呢?即使用示波器测试的时候波形跟想象中的不太一样?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

25

主题

81

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2015-3-14
在线时间
5 小时
发表于 2015-4-9 08:01:03 | 显示全部楼层
回复【6楼】听雪的小松:
---------------------------------
你不是还有一个停止位吗?加在一起就九位了。
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-3-6
在线时间
0 小时
 楼主| 发表于 2015-4-9 18:14:57 | 显示全部楼层
回复【10楼】斌封天下:
---------------------------------
USART的电气规范不应该是一个起始位,7-8个数据位,一个奇偶校验位或者无校验位,一个停止位么~
我设置的是无校验,停止位一位,应该一共10位呀。
空闲线高电平,起始位低电平,停止位高电平。
如果发送数据0x44,我的理解测量发送端的波形应该为:11……110 01000100 111……11.
但发送数组时,实际上的波形跟理想的不太一样,在中间的几个字节总是缺失起始位或者停止位多了一个。
虽然用串口调试助手成功了,但是还是很介意示波器的结果不对。
回复

使用道具 举报

25

主题

81

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2015-3-14
在线时间
5 小时
发表于 2015-4-19 15:57:43 | 显示全部楼层
回复【12楼】听雪的小松:
---------------------------------
解决了就好,恭喜恭喜,我也学到了!
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-5-25
在线时间
2 小时
发表于 2015-7-24 08:41:04 | 显示全部楼层
当传输是0x01时波形显示为00000001101。   怎么解释
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 19:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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