AVR 串口通讯没有数据发出 串口缓冲器总不为空
答案:1 悬赏:80 手机版
解决时间 2021-03-25 08:55
- 提问者网友:原来太熟悉了会陌生
- 2021-03-24 17:07
AVR 串口通讯没有数据发出 串口缓冲器总不为空
最佳答案
- 五星知识达人网友:拜訪者
- 2021-03-24 18:26
你要判断UDRE位的状态应该用 if( UCSRA&(1< 我刚才在等答案的时候直接把if语句改成了if( UDRE && My_UART_TxBuf.number == 0) 这样只要UDRE不为0, 前面半个就为真 这样写可以吧? 这样改了一下串口能收到了,不知道写法合不合理。
另外一个问题,串口每次能收到3个字节,比如我在main中每秒调用一次 UART_TxByte(0xff) 函数和 UART_TXC() 函数 应该只发出一个字节吧?追答第一个问题对于UDRE位是正确的;
第二个问题,不可以,UDRE是一个宏定义 #define UDRE 5 ,它是常量5,逻辑总是真。
第三个问题,不清楚原因,那你收到的三个字节对吗?是0xFF吗,如果不是可能波特率不匹配。追问奥 对 宏定义 是常数5……
我看datasheet上说 UDRE一定要为空才能写入数据,否则发送器会忽略发送的数据,也就是说不管我这里怎么写,单片机只有实实在在知道UDR里面空了 才会让我发出对吧?
是的,发出来的都对,每秒三个ff发出,波特率没问题吧应该,如果有问题应该是乱码的吧。追答当你写UDR时是把数据写入了缓冲寄存器,单片机会自动判断现在是否有数据正在发送,若没有它将把缓冲寄存器中数据移入移位寄存器(正在发送到数据在这里),并置位UDRE位,这是就又能够往缓冲寄存器写数据了,若当前有数据真正发送(移位寄存器数据还没发完)则他会等当前数据发完后再把缓冲寄存器的数据移入移位寄存器,并置位UDRE,在此期间不能往UDR中写新的数据。
另外一个问题,串口每次能收到3个字节,比如我在main中每秒调用一次 UART_TxByte(0xff) 函数和 UART_TXC() 函数 应该只发出一个字节吧?追答第一个问题对于UDRE位是正确的;
第二个问题,不可以,UDRE是一个宏定义 #define UDRE 5 ,它是常量5,逻辑总是真。
第三个问题,不清楚原因,那你收到的三个字节对吗?是0xFF吗,如果不是可能波特率不匹配。追问奥 对 宏定义 是常数5……
我看datasheet上说 UDRE一定要为空才能写入数据,否则发送器会忽略发送的数据,也就是说不管我这里怎么写,单片机只有实实在在知道UDR里面空了 才会让我发出对吧?
是的,发出来的都对,每秒三个ff发出,波特率没问题吧应该,如果有问题应该是乱码的吧。追答当你写UDR时是把数据写入了缓冲寄存器,单片机会自动判断现在是否有数据正在发送,若没有它将把缓冲寄存器中数据移入移位寄存器(正在发送到数据在这里),并置位UDRE位,这是就又能够往缓冲寄存器写数据了,若当前有数据真正发送(移位寄存器数据还没发完)则他会等当前数据发完后再把缓冲寄存器的数据移入移位寄存器,并置位UDRE,在此期间不能往UDR中写新的数据。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯