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

2019-08-17 02:53发布

在源码里面看到了这一段代码
//串口发送数据
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函数啊?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
黎明雨林
1楼-- · 2019-08-17 08:51
应该是宏定义了#define  USART_SR_TXE   0x80,因为TXE是位7。程序中“与”这个值后看结果,是1就说明发送空了,可以接着写数进寄存器;是0说明还没发送出去
bruceleegyx
2楼-- · 2019-08-17 11:37
 精彩回答 2  元偷偷看……
Sandwich
3楼-- · 2019-08-17 12:24
bruceleegyx 发表于 2017-7-5 16:23
看不懂你的程序,USART3->SR是串口3状态寄存器的数据,USART_SR_TXE是发送数据寄存器空标志位,等于1时说明 ...

是啊,我也看不懂啊,SR和SR_TXE完全不一个层面,不知道为啥会&起来。我是在源码里面看到的,好像还有个数组的写法,当时忘记保存了,现在找不到了,,
执迷
4楼-- · 2019-08-17 17:51
USART_SR_TXE估计是个参数或者宏定义,,右键go to define“、”应该可以看到值,大概是0或1,一般是0用来清标志位。。。sendtest在哪里出现。。不就是你定义的这个函数吗。。这里是它第一次出现的地方。。你要看哪里有调用,双击选中Ctrl+F,,find all。可以找到所有调用它的地方
gc475668754
5楼-- · 2019-08-17 19:20
黎明雨林 发表于 2017-7-5 19:37
应该是宏定义了#define  USART_SR_TXE   0x80,因为TXE是位7。程序中“与”这个值后看结果,是1就说明发送 ...

SR_TXE是这样定义的,可是0x80不是 1000 0000 吗,与USART_SR做“与运算”的时候,后面7位不一直是0吗? 抱歉啊,可能问题很弱智,小白,请海涵啊
gc475668754
6楼-- · 2019-08-17 20:08
执迷 发表于 2017-7-5 18:21
USART_SR_TXE估计是个参数或者宏定义,,右键go to define“、”应该可以看到值,大概是0或1,一般是0用来 ...

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

一周热门 更多>