/******************************************************************************* * Function Name : USART2_IRQHandler * Description : This function handles USART2 global interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void USART2_IRQHandler(void) { BYTE bTByte; WORD wTPsn; if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //串口2接收中断 { /* Read one byte from the receive data register */ bTByte = (USART_ReceiveData(USART2)); wTPsn = W_InSerial2; if(++wTPsn == MAX_SERIAL_LEN2) wTPsn = 0;//修改指针边界 if(wTPsn != W_OutSerial2) //队列没有满的情况下 { B_SerialQueue2[W_InSerial2] = bTByte; W_InSerial2 = wTPsn; } /* Clear the USART2 Receive interrupt */ USART_ClearITPendingBit(USART2, USART_IT_RXNE); } if(USART_GetITStatus(USART2,USART_IT_TXE)){ //串口2发送中断 //此处加入发送串口数据组帧处理 /* Clear the USART2 Receive interrupt */ USART_ClearITPendingBit(USART2, USART_IT_TXE); } }
判断串口是接收中断,还是发送中断,不能
else if(USART_GetITStatus(USART2,USART_IT_TXE)){ //串口2发送中断
只能
if(USART_GetITStatus(USART2,USART_IT_TXE)){ //串口2发送中断
因为如果全双工时是同时收发, 这是会不好处理。
stm32串口中断收发数据环形缓冲区的设计,这里采用的是环形队列做缓冲区。
--> stm32系统初始化要初始化哪些内容?
一般是时钟>中断>外设
不过stm32初始化之后外设基本全关了,用哪个外设需要先开相应外设的时钟
一般是时钟>中断>外设
不过stm32初始化之后外设基本全关了,用哪个外设需要先开相应外设的时钟