先貼出中斷函數:
[plain] view plain copy void USART1_IRQHandler(void){ IF (USART_GetiTStatus(USART1, USART_IT_RXNE) != RESET) { USART_ClearITPendingBit(USART1, USART_IT_RXNE); USART1_Buffer[i++]=USART_ReceiveData(USART1); //USART1_Buffesh是一個自己定義的接收數組 if(i>3){ SendFlag = 1; } } if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET){ //USART_IT_TC這裏也可替換 if(Open_Send_Flag){ //這是一個發送的標誌 uart1_sendstring(temp_data); USART_ITConfig(USART1, USART_IT_TXE, DISABLE); //USART_IT_TC Open_Send_Flag = 0; } else{ USART_ITConfig(USART1, USART_IT_TXE, DISABLE); //USART_IT_TC } } }
發送字符串的函數:
[plain] view plain copy void uart1_sendstring(uint8_t* cp) { while((*cp)!='\0') { Usart1_Send_isr(*cp); cp++; } }
發送單個字符的函數:
[plain] view plain copy void Usart1_Send_isr(uint8_t ch){ USART_SendData(USART1, (uint8_t)ch); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET ); //這裏做緩衝區是否發送完判斷 }
然後在中斷函數外面發送數據的時候,打開發送中斷。USART_ITConfig(USART1, USART_IT_TXE, ENABLE); //USART_IT_TC
之後再貼出兩個簡單的串口接收和發送的測試小例子:
第一種:中斷接收並把接收到的數據直接發送。
[plain] view plain copy void USART1_IRQHandler(void){ unsigned char RxData; if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { USART_ClearITPendingBit(USART1, USART_IT_RXNE); RxData=USART_ReceiveData(USART1); RxData = RxData + 1; USART_SendData(USART1,RxData); } }
優點:簡單,適合很少量數據傳輸。
缺點:無緩存區,並且對數據的正確性沒有判斷,數據量稍大可能導致數據丟失 。
第二種:中斷接收之後判斷數據頭和數據尾,如果正確就直接發送出去。
[plain] view plain copy void USART1_IRQHandler(void){ if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { USART_ClearITPendingBit(USART1, USART_IT_RXNE); USART1_Buffer[i++]=USART_ReceiveData(USART1); } if((USART1_Buffer[0] == 0x01) && (USART1_Buffer[i-1] == 0x02)){ Flag = 1; } if(USART_GetFlagStatus(USART1,USART_FLAG_ORE) == SET){ //溢出,不明白? USART_CleaRFlag(USART1,USART_FLAG_ORE); USART_ReceiveData(USART1); } if(Flag){ for(j = 0;j<20;j++){ USART_SendData(USART1,USART1_Buffer[j]); } } }
相關的stm32串口以及中斷相關的資料
(stm32串口應用)
http://www.makeru.com.cn/live/1392_1164.html?s=45051
基於STM32講解串口操作
http://www.makeru.com.cn/live/1758_490.html?s=45051
stm32之SPI通信
http://www.makeru.com.cn/live/3523_1795.html?s=45051
STM32中斷系統
http://www.makeru.com.cn/live/3523_1745.html?s=45051