OpenEdv-开源电子网

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

[已解决]请教一个串口通讯的问题

[复制链接]

3

主题

9

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2013-8-26
在线时间
0 小时
发表于 2013-9-17 10:10:28 | 显示全部楼层 |阅读模式
用mini开发板在学习串口通讯,根据教程学习了一遍,对串口通讯有点问题不太明白。
我设置一个u16变量,然后我想把这个变量的数值发送出去,应该如何做?
求大侠赐教


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2013-9-16
在线时间
0 小时
发表于 2013-9-17 10:19:09 | 显示全部楼层
串口一次只能发送8bit,1字节,所以要分高低位发送。
回复 支持 反对

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2013-8-26
在线时间
0 小时
 楼主| 发表于 2013-9-17 10:19:56 | 显示全部楼层
回复【2楼】Adela:
---------------------------------
能写一下具体怎么操作吗?C语言的字符操作实在没学号。
回复 支持 反对

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2013-9-16
在线时间
0 小时
发表于 2013-9-17 10:26:13 | 显示全部楼层
u16 data;
//data 赋值操作
UART1->DR=data;
//等待发完,或者中断一次发一个。
UART1->DR=data>>8;


就是这么个意思,这样是低位先发,超出部分无效,只发送8位。不安心可以来个“&”操作,将高8位清零(data & 0x0f)。
回复 支持 反对

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2013-8-26
在线时间
0 小时
 楼主| 发表于 2013-9-17 10:28:00 | 显示全部楼层
回复【4楼】Adela:
---------------------------------
好的。来试试,谢谢啦。
回复 支持 反对

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2013-9-16
在线时间
0 小时
发表于 2013-9-17 10:28:57 | 显示全部楼层
回复【5楼】limosummer:

回复【4楼】Adela:
---------------------------------
好的。来试试,谢谢啦。

---------------------------------
解决后,请把标题加上已解决。我也看着舒服。
回复 支持 反对

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2013-8-26
在线时间
0 小时
 楼主| 发表于 2013-9-17 11:55:00 | 显示全部楼层
回复【4楼】Adela:
---------------------------------
再请教一个问题。我操作UART1->DR=0X43;
利用串口通讯软件收到的数据,有时候是43,有时候是68,这是为什么?
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2013-9-17 12:14:19 | 显示全部楼层
回复【7楼】limosummer:
---------------------------------
波特率太高有时候就会出错的,试着调低点试下
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2013-9-16
在线时间
0 小时
发表于 2013-9-17 12:25:18 | 显示全部楼层
回复【7楼】limosummer:

回复【4楼】Adela:
---------------------------------
再请教一个问题。我操作UART1->DR=0X43;
利用串口通讯软件收到的数据,有时候是43,有时候是68,这是为什么?

---------------------------------
查看发送寄存器为空再发。
回复 支持 反对

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2013-8-26
在线时间
0 小时
 楼主| 发表于 2013-9-17 13:09:37 | 显示全部楼层
回复【9楼】Adela:
---------------------------------
我使用while((temp=UART1->DR)!=0x00)好像行不通。用了一个延时可以了。想知道怎么去查寄存器是否为空
回复 支持 反对

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2013-9-16
在线时间
0 小时
发表于 2013-9-17 15:08:31 | 显示全部楼层
回复【10楼】limosummer:

回复【9楼】Adela:
---------------------------------
我使用while((temp=UART1->DR)!=0x00)好像行不通。用了一个延时可以了。想知道怎么去查寄存器是否为空

---------------------------------
读的是UART->SR里面的发送空标志位,bit7(参见数据手册).
如果不确定该怎么写,可以参照库函数里面的。
#define USART_FLAG_TXE  0X0080  //bit7
if((USART1->SR & USART_FLAG_TXE ) !=0)
{
}
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-13 01:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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