现在已经实现了串口发送数据和接收数据。 0 Z* p- K4 o& _. M9 l" ` % f9 S" ~- |. S7 l5 X+ L+ E! @: s我想请教的是为什么串口中断一打开,我就可以在中断服务程序里,判断到TXE标志进行写数据。 7 g! t: [3 o8 x& b4 F , ]8 R1 C7 g: K% c这个TXE标志不应该是硬的数据从TDR到移位寄存器里的置的。: U, ?7 N) X+ s; c+ J: z
就是我打开中断后,第一次进中断后,判断标志,发送数据,我还没有发第一次数据,这个时候TXE标志怎么能够查询到?
2 Y$ }6 r( U; M6 I' D& G3 d: W
void USART1_IRQHandler(void) `2 h1 l+ L9 A h6 X' J
{
MCU_INT32MU tmp_flag = 0, tmp_it_source = 0;% X8 d: Q$ h2 r9 A5 Q3 J6 }- [
# L8 C+ B7 l c, M* \9 Y" `
#ifndef VC_PRJ
$ O4 A7 R8 v; W7 J1 ]
tmp_flag = __HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE);
tmp_it_source = __HAL_UART_GET_IT_SOURCE(&UartHandle, UART_IT_RXNE);
if((tmp_flag != RESET) && (tmp_it_source != RESET))
{8 Z8 ?/ _: |7 R5 f# ?
xMBRTUReceiveFSM( );% g) y s9 y/ e" l m- ~
}
tmp_flag = __HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_TXE);+ C: E7 ]# }6 ]1 F6 p6 h/ ?
tmp_it_source = __HAL_UART_GET_IT_SOURCE(&UartHandle, UART_IT_TXE);
/* UART in mode Transmitter ------------------------------------------------*/
if((tmp_flag != RESET) && (tmp_it_source != RESET))
{
xMBRTUTransmitFSM( );
}
5 U* p# n8 K5 t( b1 b
#endif
原来是这样的,理解了,谢谢你的解释。