请大家看这里,不一一回复了,我后面又改成另外一个中断,但是不能再DMA里面接收数据了。
void UART3_IRQHandler(void)
{
OSIntEnter();
if(RESET != usart_interrupt_flag_get(UART3_PERIPH_USART, USART_INT_FLAG_RBNE))
{
uint8_t data = usart_data_receive(UART3_PERIPH_USART);
if((UART3_ReceiveFlag&0x7FFF) < UART3_LENGTH_RECEIVEBUFFER)
{
UART3_ReceiveBuffer[(UART3_ReceiveFlag++)&0x7FFF]=data;
// printf("%02X ",data);
}
else
{
usart_data_receive(UART3_PERIPH_USART);
}
usart_interrupt_flag_clear(UART3_PERIPH_USART,USART_INT_FLAG_RBNE);
}
else if(RESET != usart_interrupt_flag_get(UART3_PERIPH_USART, USART_INT_FLAG_IDLE))
{
volatile uint32_t stat = USART_STAT0(UART3_PERIPH_USART);
volatile uint32_t data = usart_data_receive(UART3_PERIPH_USART);
(void)stat; (void)data; // 避免编译器警告
if(UART3_ReceiveFlag) UART3_ReceiveFlag |= 0x8000;
// printf("UART3_ReceiveFlag = %d\r\n",UART3_ReceiveFlag&0x7fff);
// for(uint8_t i = 0;i<(UART3_ReceiveFlag&0x7fff);i++){
// printf("%02X ",UART3_ReceiveBuffer);
// }
// printf("\r\n");
//usart_interrupt_flag_clear(UART3_PERIPH_USART,USART_INT_FLAG_IDLE);
}
OSIntExit();
}
|