使用中斷
- 通過配置串口的接收作為中斷源,開啟中斷輸出控制,配置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ù)了。
當(dāng)接收到數(shù)據(jù)后,觸發(fā)接收中斷,主程序暫停執(zhí)行。接收完數(shù)據(jù)后主程序回復(fù)執(zhí)行。當(dāng)接收到數(shù)據(jù)時(shí),就觸發(fā)中斷。
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2,USART_IT_RXNE)==SET) //RXNE 標(biāo)志位為1 表示可以接收數(shù)據(jù)
{
RX_Data=USART_ReceiveData(USART2);
Flag=1;
USART_ClearITPendingBit(USART2,USART_IT_RXNE); //清除RXNE標(biāo)志位
}
}
- 主程序測試
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 標(biāo)志位為1 表示可以接收數(shù)據(jù)
{
RX_Data=USART_ReceiveData(USART2);
Flag=1;
USART_ClearITPendingBit(USART2,USART_IT_RXNE); //清除RXNE標(biāo)志位
}
}
下圖為程序現(xiàn)象:可以看到,串口確實(shí)收到了數(shù)據(jù),只是我把接收到的數(shù)據(jù)0xFE放在了while循環(huán)里,這說明數(shù)據(jù)接收是成功的,使用中斷是可行的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
STM32
+關(guān)注
關(guān)注
2309文章
11162瀏覽量
373406 -
串口通信
+關(guān)注
關(guān)注
34文章
1662瀏覽量
57962 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4417瀏覽量
67499 -
中斷源
+關(guān)注
關(guān)注
0文章
16瀏覽量
8417
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
利用中斷實(shí)現(xiàn)串口不長接收數(shù)據(jù)
STM32CUBEME--2USART通過DMA方式接收不定長數(shù)據(jù)概述硬件準(zhǔn)備選擇芯片型號(hào)配置時(shí)鐘源配置時(shí)鐘樹
發(fā)表于 08-11 07:07
STM32 串口使用IDLE中斷+DMA接收(HAL庫函數(shù))
STM32 串口使用IDLE中斷+DMA接收(HAL庫函數(shù))一、開發(fā)環(huán)境單片機(jī)型號(hào):STM32H743IIT6工程配置環(huán)境:STM32CubeMX 6.3.0固件庫:STM32Cube
發(fā)表于 12-02 21:06
?42次下載
STM32使用CubeMAX配置的串口中斷接收方法
STM32使用CubeMAX配置的串口中斷接收方法目錄1.定位串口中斷發(fā)生的地方2.處理串口中斷接收
發(fā)表于 12-14 18:45
?30次下載
STM32 HAL CubeMX 串口IDLE接收空閑中斷+DMA
關(guān)于DMA原理部分講解,及CubeMx配置部分,請(qǐng)參考該文章【STM32】HAL庫 STM32CubeMX教程十一—DMA (串口DMA發(fā)送接收)本篇文章我們僅針對(duì)例程進(jìn)行詳解剖析本篇文章提供兩種
發(fā)表于 12-20 19:39
?31次下載
stm32 串口接收不定長度數(shù)據(jù)及黏包處理 + 串口DMA接收
都是通過單片機(jī)的中斷機(jī)制實(shí)現(xiàn)的,stm32單片機(jī)串口接收有一個(gè)空閑中斷機(jī)制,只要我們?cè)?b class='flag-5'>配置
發(fā)表于 12-23 19:09
?27次下載
STM32—無需中斷來實(shí)現(xiàn)使用DMA接收串口數(shù)據(jù)
本節(jié)目標(biāo):通過DMA,無需中斷,接收不定時(shí)長的串口數(shù)據(jù) 描述:當(dāng)在串口多數(shù)據(jù)傳輸下,CPU會(huì)產(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í)候防止其程序打擾串口數(shù)據(jù)的
發(fā)表于 12-28 19:15
?15次下載
HAL_UART_Transmit阻塞時(shí)會(huì)影響串口中斷接收嗎?
最近項(xiàng)目里使用了兩路串口透傳數(shù)據(jù),串口3中斷接收數(shù)據(jù),組包后通過串口1阻塞發(fā)送出去。
stm32串口接收中斷觸發(fā)原理
配置串口接收中斷使能:在初始化串口時(shí),需要設(shè)置相應(yīng)的控制寄存器來使能串口
發(fā)表于 01-17 15:42
?9391次閱讀
如何通過配置串口的接收作為中斷源
評(píng)論