关于stm8s单片机串口2的疑问

问题是关于stms105的串口2发送方面的。发送一个字符,我的开发板自带程序是这样写的:voidUART2_SendByte(u8TxData){while(UART2_... 问题是关于stms105的串口2发送方面的。
发送一个字符,我的开发板自带程序是这样写的:
void UART2_SendByte(u8 TxData)
{
while(UART2_GetFlagStatus(UART2_FLAG_TXE) == RESET); // 等待传输结束 句1
UART2_SendData8(TxData); //句2
}
我的疑问:应该是先写句2啊,才写句1,也就是句2应该在句1前面啊。
我是这样认为:
第一次进来时,UART2_FLAG_TXE为0没错,于是先发完这第一个字节。当这第1个字节发送完时,UART2_FLAG_TXE被置位位1了。第二次进来时,UART2_FLAG_TXE还是1啊,不就永远停在这个while了吗,那第2个字节怎么发出去的?
验证过了,这个程序是能工作的,实在想不明白了,求教,谢谢了。
展开
 我来答
百度网友0fb03cc
2014-04-07 · 超过30用户采纳过TA的回答
知道答主
回答量:100
采纳率:0%
帮助的人:91.7万
展开全部
首先,你看错程序了 你注意到句一最后有个“;”了吗 也就是说 如果UART2_FLAG_TXE为0,就一直执行这条语句,直到UART2_FLAG_TXE为1才跳过这条语句执行句2;

其次, TXE应该是发送数据寄存器为空的 标志位,也就是发送数据寄存器为空的时候为1,不为空也就是还没发送完的时候为0,;
所以刚进程序的时候 UART2_FLAG_TXE为1;然后跳过句1到句2,执行发送,发下一字节前先检查上一字节发送是否结束。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式