-
-
-
-
-
-
-
- void USART2_IRQHandler(void)
- {
- BYTE bTByte;
- WORD wTPsn;
-
- if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
- {
-
- 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;
- }
-
- USART_ClearITPendingBit(USART2, USART_IT_RXNE);
- }
-
- if(USART_GetITStatus(USART2,USART_IT_TXE)){
-
-
-
- USART_ClearITPendingBit(USART2, USART_IT_TXE);
- }
- }
判断串口是接收中断,还是发送中断,不能
- else if(USART_GetITStatus(USART2,USART_IT_TXE)){
只能
- if(USART_GetITStatus(USART2,USART_IT_TXE)){
因为如果全双工时是同时收发, 这是会不好处理。
stm32串口中断收发数据环形缓冲区的设计,这里采用的是环形队列做缓冲区。
--> stm32系统初始化要初始化哪些内容?
一般是时钟>中断>外设
不过stm32初始化之后外设基本全关了,用哪个外设需要先开相应外设的时钟