使用中斷
- 通過配置串口的接收作為中斷源,開啟中斷輸出控制,配置NVIC。開啟中斷通道。
//開啟中斷輸出控制
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
//配置NVIC
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannel=USART2_IRQn; //選擇USART2的中斷通道
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE; //中斷使能
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&NVIC_InitStruct);
- 中斷服務子函數
中斷服務子函數寫好后,就可以在中斷里讀取接收到的數據了。
當接收到數據后,觸發接收中斷,主程序暫停執行。接收完數據后主程序回復執行。當接收到數據時,就觸發中斷。
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2,USART_IT_RXNE)==SET) //RXNE 標志位為1 表示可以接收數據
{
RX_Data=USART_ReceiveData(USART2);
Flag=1;
USART_ClearITPendingBit(USART2,USART_IT_RXNE); //清除RXNE標志位
}
}
- 主程序測試
uint8_t RX_Data;
uint8_t Flag;
int main()
{
Serial_Init();
Serial_SendByte(0x16);
while(1)
{
if(Flag==1)
{
Serial_SendByte(RX_Data);
}
}
}
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2,USART_IT_RXNE)==SET) //RXNE 標志位為1 表示可以接收數據
{
RX_Data=USART_ReceiveData(USART2);
Flag=1;
USART_ClearITPendingBit(USART2,USART_IT_RXNE); //清除RXNE標志位
}
}
下圖為程序現象:可以看到,串口確實收到了數據,只是我把接收到的數據0xFE放在了while循環里,這說明數據接收是成功的,使用中斷是可行的。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
STM32
+關注
關注
2293文章
11032瀏覽量
364842 -
串口通信
+關注
關注
34文章
1640瀏覽量
56808 -
函數
+關注
關注
3文章
4381瀏覽量
64857 -
中斷源
+關注
關注
0文章
16瀏覽量
8215
發布評論請先 登錄
相關推薦
熱點推薦
STM32 串口使用IDLE中斷+DMA接收(HAL庫函數)
STM32 串口使用IDLE中斷+DMA接收(HAL庫函數)一、開發環境單片機型號:STM32H743IIT6工程配置環境:STM32CubeMX 6.3.0固件庫:STM32Cube
發表于 12-02 21:06
?42次下載

STM32 HAL CubeMX 串口IDLE接收空閑中斷+DMA
關于DMA原理部分講解,及CubeMx配置部分,請參考該文章【STM32】HAL庫 STM32CubeMX教程十一—DMA (串口DMA發送接收)本篇文章我們僅針對例程進行詳解剖析本篇文章提供兩種
發表于 12-20 19:39
?31次下載

stm32 串口接收不定長度數據及黏包處理 + 串口DMA接收
都是通過單片機的中斷機制實現的,stm32單片機串口接收有一個空閑中斷機制,只要我們在配置
發表于 12-23 19:09
?27次下載

STM32CubeMx配置DMA+串口空閑中斷+FreeRTOS,完美處理串口數據。
作為STM32最常用的外設之一,可以說串口用的好不好可以看出使用者有沒有深入掌握STM32的使用。常見的串口輪訓發送+接收中斷雖然能夠應付一
發表于 12-24 19:11
?53次下載

評論