USART_IT_RXNE 是接收中断.
USART_IT_TXE 才是发生中断.
static char DTs[512];//发送缓冲空间
static volatile uint16_t DTCursorTop=0;
static volatile uint16_t DTCursorEnd=0;
void UART5_IRQHandler(void)
{
//接收寄存器非空
if(USART_GetITStatus(UART5, USART_IT_RXNE ) != RESET)
{
char Data = UART5->DR;//抱歉不喜欢用函数调用.中断的地方能节省运行时间就节省运行时间
}
//发送寄存器为空
if(USART_GetITStatus(UART5, USART_IT_TXE ) != RESET)
{
if(DTCursorTop == DTCursorEnd){
Open_USARTx->CR1 &= 0xff7f;//发送完成清除中断发送标志位
}
else{
UART5->DR = DTs[(DTCursorTop++)&0x1ff];//= 0x03;
//USART_SendData(UART5, 0x03);
//两条语句是一样的功能,下面的会产生多余的指令和占用更多的堆栈空间
}
}
}
int sendchar(int ch){
while((((DTCursorTop-DTCursorEnd)&0x1ff) ==1)){
// UART5->CR1 |= 0x80;//ÖÃλ·¢ËÍÖжÏ;//µ½´ï»·Ðνáβ
}
DTs[(DTCursorEnd++)&0x1ff] = ch;
UART5->CR1 |= USART_CR1_TXEIE;//置位触发发送中断
return 0;
} /* in Serial.c */
你用错参数了. 纯手工编写,不是网上复制粘贴的.
关注这个问题