OpenEdv-开源电子网

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

初学者,请问串口发送数据的问题

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2017-7-5
在线时间
0 小时
发表于 2017-7-5 16:08:09 | 显示全部楼层 |阅读模式
1金钱
在源码里面看到了这一段代码
//串口发送数据
void Send_Test(void)
{
         u8 i;
         for(i=0;i<8;i++)
         {
         while(!(USART3->SR & USART_SR_TXE));
         USART3->DR=(u32) ((u8*)0xFF);
         }
         while(!(USART3->SR & USART_SR_TXE));
         USART3->DR=(u32) ((u8*)0x82);
         while(!(USART3->SR & USART_SR_TXE));
         USART3->DR=(u32) ((u8*)0xA6);
         while(!(USART3->SR & USART_SR_TXE));
         USART3->DR=(u32) ((u8*)0x7C);
         while(!(USART3->SR & USART_SR_TXE));
         USART3->DR=(u32) ((u8*)0x03);
         while(!(USART3->SR & USART_SR_TXE));
         USART3->DR=(u32) ((u8*)0x14);
         while(!(USART3->SR & USART_SR_TXE));
         USART3->DR=(u32) ((u8*)0x39);
         while(!(USART3->SR & USART_SR_TXE));
         USART3->DR=(u32) ((u8*)0x03);
         while(!(USART3->SR & USART_SR_TXE));
         USART3->DR=(u32) ((u8*)0x00);
         while(!(USART3->SR & USART_SR_TXE));
         USART3->DR=(u32) ((u8*)0x75);
         
}

请问 (USART3->SR & USART_SR_TXE  这个是什么意思呢?还有在源码里面的这一部分有个数组的写法,现在找不到了,问问有没有人知道是在哪里出现的这个sendtest函数啊?

最佳答案

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

应该是宏定义了#define USART_SR_TXE 0x80,因为TXE是位7。程序中“与”这个值后看结果,是1就说明发送空了,可以接着写数进寄存器;是0说明还没发送出去
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2016-4-15
在线时间
31 小时
发表于 2017-7-5 16:08:10 来自手机 | 显示全部楼层
应该是宏定义了#define  USART_SR_TXE   0x80,因为TXE是位7。程序中“与”这个值后看结果,是1就说明发送空了,可以接着写数进寄存器;是0说明还没发送出去
回复

使用道具 举报

15

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
373
金钱
373
注册时间
2017-4-21
在线时间
56 小时
发表于 2017-7-5 16:23:03 | 显示全部楼层
看不懂你的程序,USART3->SR是串口3状态寄存器的数据,USART_SR_TXE是发送数据寄存器空标志位,等于1时说明数据已经被转移到移位寄存器。你把这两个与起来,真不知道啥意思
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2017-7-5
在线时间
0 小时
 楼主| 发表于 2017-7-5 16:28:51 | 显示全部楼层
bruceleegyx 发表于 2017-7-5 16:23
看不懂你的程序,USART3->SR是串口3状态寄存器的数据,USART_SR_TXE是发送数据寄存器空标志位,等于1时说明 ...

是啊,我也看不懂啊,SR和SR_TXE完全不一个层面,不知道为啥会&起来。我是在源码里面看到的,好像还有个数组的写法,当时忘记保存了,现在找不到了,,
回复

使用道具 举报

13

主题

175

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2016-4-30
在线时间
141 小时
发表于 2017-7-5 18:21:49 | 显示全部楼层
USART_SR_TXE估计是个参数或者宏定义,,右键go to define“、”应该可以看到值,大概是0或1,一般是0用来清标志位。。。sendtest在哪里出现。。不就是你定义的这个函数吗。。这里是它第一次出现的地方。。你要看哪里有调用,双击选中Ctrl+F,,find all。可以找到所有调用它的地方
回复

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2017-6-30
在线时间
15 小时
发表于 2017-7-5 20:19:38 | 显示全部楼层
黎明雨林 发表于 2017-7-5 19:37
应该是宏定义了#define  USART_SR_TXE   0x80,因为TXE是位7。程序中“与”这个值后看结果,是1就说明发送 ...

SR_TXE是这样定义的,可是0x80不是 1000 0000 吗,与USART_SR做“与运算”的时候,后面7位不一直是0吗? 抱歉啊,可能问题很弱智,小白,请海涵啊
回复

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2017-6-30
在线时间
15 小时
发表于 2017-7-5 20:20:55 | 显示全部楼层
执迷 发表于 2017-7-5 18:21
USART_SR_TXE估计是个参数或者宏定义,,右键go to define“、”应该可以看到值,大概是0或1,一般是0用来 ...

TXE是宏定义的0x80,小弟不太明白USART_SR与上USART_SR_TXE代表的含义,
回复

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2017-6-30
在线时间
15 小时
发表于 2017-7-5 20:24:46 | 显示全部楼层
黎明雨林 发表于 2017-7-5 19:37
应该是宏定义了#define  USART_SR_TXE   0x80,因为TXE是位7。程序中“与”这个值后看结果,是1就说明发送 ...

明白了,刚刚有点糊涂了。也就是这里USART_SR替换成一个别的东西也可以吗
回复

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2017-6-30
在线时间
15 小时
发表于 2017-7-5 20:27:48 | 显示全部楼层
黎明雨林 发表于 2017-7-5 19:37
应该是宏定义了#define  USART_SR_TXE   0x80,因为TXE是位7。程序中“与”这个值后看结果,是1就说明发送 ...

这下想明白了,谢谢前辈啊~~~感激不尽
回复

使用道具 举报

0

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2016-4-15
在线时间
31 小时
发表于 2017-7-5 23:49:25 来自手机 | 显示全部楼层
gc475668754 发表于 2017-7-5 20:27
这下想明白了,谢谢前辈啊~~~感激不尽

嗯,理论上是只要是用户定义的都可以改,多看程序吧,看多就会了
回复

使用道具 举报

0

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2016-4-15
在线时间
31 小时
发表于 2017-7-5 23:52:55 来自手机 | 显示全部楼层
gc475668754 发表于 2017-7-5 20:27
这下想明白了,谢谢前辈啊~~~感激不尽

USART->SR是固定的,是串口的状态寄存器调用,这个不能改
回复

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2017-6-30
在线时间
15 小时
发表于 2017-7-6 15:03:52 | 显示全部楼层
黎明雨林 发表于 2017-7-5 23:52
USART->SR是固定的,是串口的状态寄存器调用,这个不能改

嗯嗯,是的,一开始吧TXE这个参数作为一个变量来看了,后来想明白了,刚学习确实有些困难,谢谢前辈不吝赐教~~
回复

使用道具 举报

3

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2016-1-16
在线时间
15 小时
发表于 2017-7-6 20:56:21 | 显示全部楼层
这是一个等待数据发送完的机制,在所有串口手动发送中几乎都需要这样来判断,所有的官方例程亦是如此,路漫漫其修远兮
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-17 01:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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