打印

关于串口发送字符

[复制链接]
613|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
哈金|  楼主 | 2020-4-21 13:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如下这个函数:

// 发送一个字节

void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
{

        USART_SendData(pUSARTx,ch);

        while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);        
}


问题:
while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);         这个语句的具体含义是什么
两个形参分别表示什么?是不是相当于keil4里面的



我见视频里面的讲课人每次烧录程序之后都会按一个按键。






如果我把这个判断条件去掉了,直接这样子:


main()
{
while(1)
{


Usart_SendByte(DEBUG_USARTx,10);


}




}




这样子能一直循环发送吗?


我是不能再新的新手,高手勿喷,请给新手一次机会。。。。

使用特权

评论回复

相关帖子

沙发
blust5| | 2020-4-21 13:25 | 只看该作者
这个while应该是判断发送完成的。
视频里每烧录一次按一下键应该是复位键 和这个没关系

使用特权

评论回复
板凳
diweo| | 2020-4-21 16:23 | 只看该作者
本帖最后由 diweo 于 2020-4-21 16:31 编辑

你可以先看一下UART的框图。
发送数据时候,写完1个数据之后不能紧接着写入第2个数据,否则就把前面的那个数据“冲掉“了。要等第1个数据全部复制到专用的移位寄存器后才行。
SR寄存器里面的TXE,当写入数据后被清0,当数据全部复制到移位寄存器后置1。
while的意思就是当TXE为0的时候死等,等到它置1了,表示可以不等了,可以发送下一个数据了。


使用特权

评论回复
地板
ningling_21| | 2020-4-21 17:29 | 只看该作者
会一直循环发送

使用特权

评论回复
5
cyc2009| | 2020-4-22 22:11 | 只看该作者
while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET); 意思是:
等待发送完成;如果正在发送,就在那等待;当发送完成了,USART_FLAG_TXE这个标识就会变成SET;从而跳出while循环。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

432

主题

433

帖子

1

粉丝