USART_IT_TXE?這就是發生的中斷。
靜電?夏爾?DTs[512];//發送緩沖區空間
靜電?易變?uint16_t?DTCursorTop = 0;
靜電?易變?uint16_t?DTCursorEnd = 0;
作廢?UART5_IRQHandler(void)
{?
//接收寄存器不為空
if(USART_GetITStatus(UART5,?USART_IT_RXNE)?!=?重置)
{
夏爾?數據?=?UART 5->;DR;//不好意思,我不喜歡用函數調用。如果中斷能節省運行時間,那就節省運行時間。
}
//發送寄存器為空。
if(USART_GetITStatus(UART5,?USART_IT_TXE?)?!=?重置)
{
if(DTCursorTop?==?DTCursorEnd){
open _ USARTx-& gt;CR1?& amp=?0xff7f//發送完成後,清除中斷發送標誌位。
}
否則{
UART 5->;DR=?DTs[(DTCursorTop ++) & amp;0x 1ff];//=?0x03
//USART_SendData(UART5,?0x 03);
//兩條語句功能相同,後面壹條會產生冗余指令,占用更多堆棧空間。
}
}?
}
int?sendchar(int?ch){
while((((DTCursorTop-DTCursorEnd))& amp;0x1ff)?==1)){
//?UART 5->;CR1?|=?0x80//λ ж?;// ?νáβ
}
DTs[(DTCursorEnd ++) & amp;0x1ff]?=?ch;
UART 5->;CR1?|=?USART _ Cr 1 _ tx eie;//設置觸發傳輸中斷。
回歸?0;
}/*?在?Serial.c?*/您使用了錯誤的參數。是手寫的,不是網上復制粘貼的。