高中生
最后登录1970-1-1
在线时间 小时
注册时间2019-5-5
|
[mw_shl_code=c,true]/* 发送一个字节 */
void Usart_SendByte(USART_TypeDef* pUSARTx, uint8_t data)
{
USART_SendData(pUSARTx, data);
/*发送一个字节字节后判断数据发送寄存器是否为空,如果不判断,
*只发送一个字节没有任何影响,但发送多个字节会导致最后一个发送的字节之前数据被吞。*/
while( USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET );
}[/mw_shl_code]
[mw_shl_code=c,true]// 串口中断服务函数
void DEBUG_USART_IRQHandler(void)
{
uint8_t ucTemp;
if(USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE)!=RESET)
{
ucTemp = USART_ReceiveData(DEBUG_USARTx);
USART_SendData(DEBUG_USARTx,ucTemp);
//教程上没有下面这句,跟从32发送字节到串口不同,没有下面这句也不会吞数据,有的话也不影响。而发送字节必须有下面这句。
while( USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET );
}
}[/mw_shl_code]
为什么连续发送数据时不等待寄存器TXE位置一会导致吞数据?
为什么重写的中断服务函数不用等待TXE位置一?
|
|