使用中斷
- 通過配置串口的接收作為中斷源,開啟中斷輸出控制,配置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);
- 中斷服務(wù)子函數(shù)
中斷服務(wù)子函數(shù)寫好后,就可以在中斷里讀取接收到的數(shù)據(jù)了。
當接收到數(shù)據(jù)后,觸發(fā)接收中斷,主程序暫停執(zhí)行。接收完數(shù)據(jù)后主程序回復(fù)執(zhí)行。當接收到數(shù)據(jù)時,就觸發(fā)中斷。
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2,USART_IT_RXNE)==SET) //RXNE 標志位為1 表示可以接收數(shù)據(jù)
{
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 表示可以接收數(shù)據(jù)
{
RX_Data=USART_ReceiveData(USART2);
Flag=1;
USART_ClearITPendingBit(USART2,USART_IT_RXNE); //清除RXNE標志位
}
}
下圖為程序現(xiàn)象:可以看到,串口確實收到了數(shù)據(jù),只是我把接收到的數(shù)據(jù)0xFE放在了while循環(huán)里,這說明數(shù)據(jù)接收是成功的,使用中斷是可行的。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
STM32
+關(guān)注
關(guān)注
2270文章
10915瀏覽量
356754 -
串口通信
+關(guān)注
關(guān)注
34文章
1627瀏覽量
55605 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4341瀏覽量
62806 -
中斷源
+關(guān)注
關(guān)注
0文章
16瀏覽量
8010
發(fā)布評論請先 登錄
相關(guān)推薦
利用中斷實現(xiàn)串口不長接收數(shù)據(jù)
STM32CUBEME--2USART通過DMA方式接收不定長數(shù)據(jù)概述硬件準備選擇芯片型號配置時鐘源配置時鐘樹
發(fā)表于 08-11 07:07
STM32 串口使用IDLE中斷+DMA接收(HAL庫函數(shù))
STM32 串口使用IDLE中斷+DMA接收(HAL庫函數(shù))一、開發(fā)環(huán)境單片機型號:STM32H743IIT6工程配置環(huán)境:STM32CubeMX 6.3.0固件庫:STM32Cube
發(fā)表于 12-02 21:06
?41次下載
STM32使用CubeMAX配置的串口中斷接收方法
STM32使用CubeMAX配置的串口中斷接收方法目錄1.定位串口中斷發(fā)生的地方2.處理串口中斷接收
發(fā)表于 12-14 18:45
?28次下載
STM32 HAL CubeMX 串口IDLE接收空閑中斷+DMA
關(guān)于DMA原理部分講解,及CubeMx配置部分,請參考該文章【STM32】HAL庫 STM32CubeMX教程十一—DMA (串口DMA發(fā)送接收)本篇文章我們僅針對例程進行詳解剖析本篇文章提供兩種
發(fā)表于 12-20 19:39
?31次下載
stm32 串口接收不定長度數(shù)據(jù)及黏包處理 + 串口DMA接收
都是通過單片機的中斷機制實現(xiàn)的,stm32單片機串口接收有一個空閑中斷機制,只要我們在配置
發(fā)表于 12-23 19:09
?27次下載
STM32—無需中斷來實現(xiàn)使用DMA接收串口數(shù)據(jù)
本節(jié)目標:通過DMA,無需中斷,接收不定時長的串口數(shù)據(jù) 描述:當在串口多數(shù)據(jù)傳輸下,CPU會產(chǎn)生多次中
發(fā)表于 12-24 19:01
?8次下載
STM32CubeMx配置DMA+串口空閑中斷+FreeRTOS,完美處理串口數(shù)據(jù)。
作為STM32最常用的外設(shè)之一,可以說串口用的好不好可以看出使用者有沒有深入掌握STM32的使用。常見的串口輪訓(xùn)發(fā)送+接收中斷雖然能夠應(yīng)付一
發(fā)表于 12-24 19:11
?53次下載
串口接收中斷--并不是說不使能串口接受中斷就無法接收數(shù)據(jù)
并不是說不使能串口接受中斷就無法接收數(shù)據(jù),只是為了在串口接收數(shù)據(jù)的時候防止其程序打擾串口數(shù)據(jù)的
發(fā)表于 12-28 19:15
?15次下載
評論