0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何通過配置串口的接收作為中斷源

麥辣雞腿堡 ? 來源:CSDN博客 ? 作者:藕粉- ? 2023-11-10 16:33 ? 次閱讀

使用中斷

  • 通過配置串口的接收作為中斷源,開啟中斷輸出控制,配置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ù)時,就觸發(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ù)據(jù),只是我把接收到的數(shù)據(jù)0xFE放在了while循環(huán)里,這說明數(shù)據(jù)接收是成功的,使用中斷是可行的。

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32
    +關(guān)注

    關(guān)注

    2264

    文章

    10854

    瀏覽量

    354299
  • 串口通信
    +關(guān)注

    關(guān)注

    34

    文章

    1607

    瀏覽量

    55381
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4277

    瀏覽量

    62323
  • 中斷源
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    7977
收藏 人收藏

    評論

    相關(guān)推薦

    利用中斷實現(xiàn)串口不長接收數(shù)據(jù)

    STM32CUBEME--2USART通過DMA方式接收不定長數(shù)據(jù)概述硬件準(zhǔn)備選擇芯片型號配置時鐘配置時鐘樹
    發(fā)表于 08-11 07:07

    STM32串口中斷 DMA接收的幾點注意地方

    STM32串口中斷、DMA接收的幾點注意地方
    的頭像 發(fā)表于 03-04 13:57 ?2.1w次閱讀

    STM32 串口使用IDLE中斷+DMA接收(HAL庫函數(shù))

    STM32 串口使用IDLE中斷+DMA接收(HAL庫函數(shù))一、開發(fā)環(huán)境單片機(jī)型號:STM32H743IIT6工程配置環(huán)境:STM32CubeMX 6.3.0固件庫:STM32Cube
    發(fā)表于 12-02 21:06 ?40次下載
    STM32 <b class='flag-5'>串口</b>使用IDLE<b class='flag-5'>中斷</b>+DMA<b class='flag-5'>接收</b>(HAL庫函數(shù))

    STM32使用CubeMAX配置串口中斷接收方法

    STM32使用CubeMAX配置串口中斷接收方法目錄1.定位串口中斷發(fā)生的地方2.處理串口中斷接收
    發(fā)表于 12-14 18:45 ?28次下載
    STM32使用CubeMAX<b class='flag-5'>配置</b>的<b class='flag-5'>串口中斷</b><b class='flag-5'>接收</b>方法

    STM32 HAL CubeMX 串口IDLE接收空閑中斷+DMA

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

    stm32 串口接收不定長度數(shù)據(jù)及黏包處理 + 串口DMA接收

    都是通過單片機(jī)的中斷機(jī)制實現(xiàn)的,stm32單片機(jī)串口接收有一個空閑中斷機(jī)制,只要我們在配置
    發(fā)表于 12-23 19:09 ?27次下載
    stm32 <b class='flag-5'>串口</b><b class='flag-5'>接收</b>不定長度數(shù)據(jù)及黏包處理 + <b class='flag-5'>串口</b>DMA<b class='flag-5'>接收</b>

    STM32—無需中斷來實現(xiàn)使用DMA接收串口數(shù)據(jù)

    本節(jié)目標(biāo):通過DMA,無需中斷,接收不定時長的串口數(shù)據(jù) 描述:當(dāng)在串口多數(shù)據(jù)傳輸下,CPU會產(chǎn)生多次
    發(fā)表于 12-24 19:01 ?8次下載
    STM32—無需<b class='flag-5'>中斷</b>來實現(xiàn)使用DMA<b class='flag-5'>接收</b><b class='flag-5'>串口</b>數(shù)據(jù)

    STM32CubeMx配置DMA+串口空閑中斷+FreeRTOS,完美處理串口數(shù)據(jù)。

    作為STM32最常用的外設(shè)之一,可以說串口用的好不好可以看出使用者有沒有深入掌握STM32的使用。常見的串口輪訓(xùn)發(fā)送+接收中斷雖然能夠應(yīng)付一
    發(fā)表于 12-24 19:11 ?50次下載
    STM32CubeMx<b class='flag-5'>配置</b>DMA+<b class='flag-5'>串口</b>空閑<b class='flag-5'>中斷</b>+FreeRTOS,完美處理<b class='flag-5'>串口</b>數(shù)據(jù)。

    串口接收中斷--并不是說不使能串口接受中斷就無法接收數(shù)據(jù)

    并不是說不使能串口接受中斷就無法接收數(shù)據(jù),只是為了在串口接收數(shù)據(jù)的時候防止其程序打擾串口數(shù)據(jù)的
    發(fā)表于 12-28 19:15 ?15次下載
    <b class='flag-5'>串口</b><b class='flag-5'>接收</b><b class='flag-5'>中斷</b>--并不是說不使能<b class='flag-5'>串口</b>接受<b class='flag-5'>中斷</b>就無法<b class='flag-5'>接收</b>數(shù)據(jù)

    STM32串口中斷應(yīng)用實例

    本文將介紹如何使用STM32F4的串口接收中斷通過串口助手模擬上位機(jī)發(fā)送指令、STM32F4串口中斷
    的頭像 發(fā)表于 04-20 11:45 ?2245次閱讀
    STM32<b class='flag-5'>串口中斷</b>應(yīng)用實例

    LPC5500_SDK例程:串口DMA發(fā)送+中斷接收

    LPC5500_SDK例程:串口DMA發(fā)送+中斷接收
    的頭像 發(fā)表于 10-30 16:59 ?1011次閱讀
    LPC5500_SDK例程:<b class='flag-5'>串口</b>DMA發(fā)送+<b class='flag-5'>中斷</b><b class='flag-5'>接收</b>

    STM32串口中斷及DMA接收常見的幾個問題

    STM32串口中斷及DMA接收常見的幾個問題
    的頭像 發(fā)表于 10-26 16:41 ?3335次閱讀
    STM32<b class='flag-5'>串口中斷</b>及DMA<b class='flag-5'>接收</b>常見的幾個問題

    HAL_UART_Transmit阻塞時會影響串口中斷接收嗎?

    最近項目里使用了兩路串口透傳數(shù)據(jù),串口3中斷接收數(shù)據(jù),組包后通過串口1阻塞發(fā)送出去。
    的頭像 發(fā)表于 10-26 14:24 ?1753次閱讀
    HAL_UART_Transmit阻塞時會影響<b class='flag-5'>串口中斷</b><b class='flag-5'>接收</b>嗎?

    串口接收數(shù)據(jù)的兩種方式是什么

    上方是發(fā)送數(shù)據(jù)的例子,那么串口接收又該如何配置,又要在串口發(fā)送的例子上做哪些更改呢? 這里我們可以通過查詢或者
    的頭像 發(fā)表于 11-10 16:20 ?2186次閱讀
    <b class='flag-5'>串口</b><b class='flag-5'>接收</b>數(shù)據(jù)的兩種方式是什么

    stm32串口接收中斷觸發(fā)原理

    配置串口接收中斷使能:在初始化串口時,需要設(shè)置相應(yīng)的控制寄存器來使能串口
    發(fā)表于 01-17 15:42 ?7662次閱讀
    stm32<b class='flag-5'>串口</b><b class='flag-5'>接收</b><b class='flag-5'>中斷</b>觸發(fā)原理