吴忠躺衫网络科技有限公司

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

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

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

STM32 LL庫中斷配置引腳外部中斷的方式

冬至子 ? 來源:ITRelief ? 作者:Sachefgh Xu ? 2023-07-24 14:24 ? 次閱讀

中斷原理圖

圖片

圖片

圖片

圖片

很多情況可以產(chǎn)生中斷,開發(fā)者可以在CubeMx中NVIC選單、通訊模塊選單處配置。請(qǐng)自行探索;部分中斷有關(guān)的內(nèi)容在模塊講解時(shí)·將會(huì)提到。

※啟用中斷后,注意在System Core->NVIC->Code Generation中勾選生成IRQ Handler和 Select for init Sequence Ordering。

※生成的中斷函數(shù)定義在stm32fxxx_it.h和stm32fxxx_it.c中,向函數(shù)中填要執(zhí)行的代碼即可。

對(duì)于外部中斷的事件分配,多個(gè)引腳將被分配到中斷事件(具體可以參考文檔),若需要區(qū)分則須在中斷程序內(nèi)寫判斷。判斷方式之后給到

配置引腳外部中斷的方式:

①在引腳圖上選中需要配置的引腳,選擇中斷功能(如圖)

圖片

②在NVIC選單中使能中斷

圖片

③在NVIC->Code Generation中勾選生成IRQ Handler和 Select for init Sequence

圖片

勾選Select for init Sequence是個(gè)人習(xí)慣,這樣可以在main.c中生成獨(dú)立初始化函數(shù)

④在GPIO->GPIO配置中斷模式(如圖)

圖片

可以配置上/下拉電阻(上拉、下拉、浮空)和中斷觸發(fā)模式。

⑤生成代碼。(stm32fxxx_it.c中,配置為Interrupt Mode)

void EXTI15_10_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI15_10_IRQn 0 */

  /* USER CODE END EXTI15_10_IRQn 0 */
  /* USER CODE BEGIN EXTI15_10_IRQn 1 */

  /* USER CODE END EXTI15_10_IRQn 1 */
}

外部觸發(fā)類型與中斷處理:

一、觸發(fā)類型

上升沿觸發(fā)、下降沿觸發(fā)、上升/下降沿觸發(fā)(電平變化觸發(fā))

二、中斷處理※

分為中斷模式(Interrupt Mode)事件模式(Event Mode) 兩種

中斷模式即為普通中斷,其概念不多解釋。配置成中斷模式時(shí),stm32fxxx_it庫中會(huì)自動(dòng)生成中斷句柄函數(shù)。

事件模式 。(很少用)

參考本文最前面提供的中斷原理圖。在配置為事件模式時(shí),中斷信號(hào)將傳輸給圖中的Pulse Generator而非中斷控制器

雖然中斷和事件的硬件信號(hào)產(chǎn)生源相同,但是配置為事件時(shí)將不會(huì)發(fā)生掛起,也就是說事件過程不需CPU的參與,可以與主程序并行: 事件機(jī)制提供了一個(gè)完全由硬件自動(dòng)完成的觸發(fā)到產(chǎn)生結(jié)果的通道,不要軟件的參與,降低了CPU的負(fù)荷,節(jié)省了中斷資源,提高了響應(yīng)速度(硬件總快于軟件)。

※事件模式雖然有優(yōu)勢,但在實(shí)際工程中幾乎不會(huì)有人使用。不講了。之后的代碼默認(rèn)使用中斷模式配置。

配置外部中斷需要三步: 1.配置GPIO與中斷線(Input Line)連接 2.中斷線配置 3.中斷向量配置

結(jié)合代碼:

Pin:PC13
Mode:Interrupt; Rising edge Trigger detection
Pull: Floating

在gpio.c :

/*連接引腳與中斷線(EXTICRn)*/
  LL_GPIO_AF_SetEXTISource(LL_GPIO_AF_EXTI_PORTC, LL_GPIO_AF_EXTI_LINE13);

  /*配置中斷線*/
  EXTI_InitStruct.Line_0_31 = LL_EXTI_LINE_13;  //配置觸發(fā)源的連接
  EXTI_InitStruct.LineCommand = ENABLE;
  EXTI_InitStruct.Mode = LL_EXTI_MODE_IT;
  EXTI_InitStruct.Trigger = LL_EXTI_TRIGGER_RISING;
  LL_EXTI_Init(&EXTI_InitStruct);

  /*引腳GPIO設(shè)置*/
  LL_GPIO_SetPinMode(GPIOC, LL_GPIO_PIN_13, LL_GPIO_MODE_FLOATING);
  
  /* EXTI interrupt init*/
  NVIC_SetPriority(EXTI15_10_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
  NVIC_EnableIRQ(EXTI15_10_IRQn);

※關(guān)于LL_EXTI_LINE_x:

x代表的是中斷線;中斷線(LINEx) 是中斷信號(hào)的輸入硬件。

圖片

Line連接GPIO,例如LINE13可接PA13、PB13、PC13....。可以將引腳與中斷線理解為短接。中斷線同時(shí)只能連接一個(gè)引腳(LINEx只能連接PAx,PBx,PCx,PDx...其一)。 來自Input Line的信號(hào)輸入觸發(fā)中斷程序的調(diào)用

※中斷程序結(jié)束時(shí)別忘清除中斷位掛起位

LL API分析:

Input Line引腳輸入配置

stm32fxxx_ll_gpio.h中:

/**/
__STATIC_INLINE void LL_GPIO_AF_SetEXTISource(uint32_t Port, uint32_t Line);/*
使能中斷引腳 Pnx;通過此函數(shù)將使引腳連接相應(yīng)的EXTI_LINE_x。
@param Port =LL_GPIO_AF_EXTI_PORTn
@param Line =LL_GPIO_AF_EXTI_LINEx
※每次只能配置一個(gè)引腳 Pnx; Pnx 將連接EXTI_LINE_x
*/
__STATIC_INLINE uint32_t LL_GPIO_AF_GetEXTISource(uint32_t Line);/*
  返回連接在EXTI_LINEx上的引腳信息(端口號(hào))。
  @param Line =LL_GPIO_AF_GPIO_LINEx
  @retval:
  LL_GPIO_AF_GPIO_PORTn
*/

EXTI_LINE配置結(jié)構(gòu)體LL_EXTI_InitTypeDef

typedef struct
{
  uint32_t Line_0_31;/*
  EXTI_LINE選擇; Line_0_31= LL_EXTI_LINE_x
  */        
  FunctionalState LineCommand; /*
 使能位。LineCommand= ENABLE
  */
  uint8_t Mode;/*
 模式選擇; Mode= LL_EXTI_MODE_IT           中斷模式
               LL_EXTI_MODE_EVENT        事件模式
               LL_EXTI_MODE_IT_EVENT     中斷&事件模式 
  */
  uint8_t Trigger;/*
  觸發(fā)模式選擇; Trigger = LL_EXTI_TRIGGER_NONE           無觸發(fā)
                        LL_EXTI_TRIGGER_RISING         上升沿觸發(fā)
                        LL_EXTI_TRIGGER_FALLING        下降沿觸發(fā)
                        LL_EXTI_TRIGGER_RISING_FALLING 上升/下降均觸發(fā)
  */
} LL_EXTI_InitTypeDef;

初始化函數(shù)LL_EXTI_Init()

ErrorStatus LL_EXTI_Init(LL_EXTI_InitTypeDef *EXTI_InitStruct)/*
  初始化并啟用中斷EXTI_LINEx。操作成功返回SUCCESS
*/

重設(shè)中斷結(jié)構(gòu)體

void LL_EXTI_StructInit(LL_EXTI_InitTypeDef *EXTI_InitStruct)
{
  EXTI_InitStruct- >Line_0_31      = LL_EXTI_LINE_NONE;
  EXTI_InitStruct- >LineCommand    = DISABLE;
  EXTI_InitStruct- >Mode           = LL_EXTI_MODE_IT;
  EXTI_InitStruct- >Trigger        = LL_EXTI_TRIGGER_FALLING;
}

?

軟件中斷觸發(fā)函數(shù)(模擬外部觸發(fā))

__STATIC_INLINE void LL_EXTI_GenerateSWI_0_31(uint32_t ExtiLine)
{//ExtiLine = LL_EXTI_LINE_x;觸發(fā)Line_x對(duì)應(yīng)的中斷處理函數(shù);效果與外部觸發(fā)相同
  SET_BIT(EXTI- >SWIER, ExtiLine);
}//軟件觸發(fā)寄存器SWIER改變可以通過清零掛起位PR清除

中斷線判斷函數(shù):

__STATIC_INLINE uint32_t LL_EXTI_IsActiveFlag_0_31(uint32_t ExtiLine);/*
@param ExtiLine =LL_EXTI_LINE_x
當(dāng)ExtiLine是引發(fā)中斷函數(shù)的中斷線時(shí),返回值為!RESET ;反之返回值RESET (=0)*/

掛起位清除函數(shù):

清除函數(shù)掛起位,使能下一次中斷喚起

__STATIC_INLINE void LL_EXTI_ClearFlag_0_31(uint32_t ExtiLine);/*
@param ExtiLine =LL_EXTI_LINE_x
清除中斷掛起位;若中斷是由軟件模擬外部觸發(fā)實(shí)現(xiàn)的,清除時(shí)一并將SWIER位清除
*/

使用案例

void EXTI15_10_IRQHandler(void)
{

 LL_mDelay(10);//按鍵消抖,防止多次觸發(fā)(一置位PR即可能再次觸發(fā))
 if (LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_13) != RESET)//當(dāng)中斷由EXTI_LINE_13引起
 {
  /* USER CODE BEGIN LL_EXTI_LINE_13 */
    LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_13); //清除標(biāo)志位
    
    LL_GPIO_TogglePin(GPIOA, LL_GPIO_PIN_15); //翻轉(zhuǎn)LED
    /* USER CODE END LL_EXTI_LINE_13 */
 }
 if (LL_EXTI_IsActiveFlag_0_31(LL_EXTI_LINE_15) != RESET)//當(dāng)中斷由EXTI_LINE_15引起
 {
  LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_15);  //清除標(biāo)志位
 }
}
聲明:本文內(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)投訴
  • 下拉電阻
    +關(guān)注

    關(guān)注

    4

    文章

    147

    瀏覽量

    20594
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1216

    瀏覽量

    52377
  • 中斷控制器
    +關(guān)注

    關(guān)注

    0

    文章

    59

    瀏覽量

    9489
  • 串口中斷
    +關(guān)注

    關(guān)注

    0

    文章

    67

    瀏覽量

    14007
  • stm32f1
    +關(guān)注

    關(guān)注

    1

    文章

    57

    瀏覽量

    12249
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32 GPIO的外部中斷設(shè)計(jì)

    輸入引腳,還可以通過另外一種叫做外部中斷方式來對(duì)引腳的輸入信號(hào)進(jìn)行檢測,本篇首先介紹下EXTI的結(jié)構(gòu),接著介紹
    發(fā)表于 04-14 10:51 ?2214次閱讀
    <b class='flag-5'>STM32</b> GPIO的<b class='flag-5'>外部</b><b class='flag-5'>中斷</b>設(shè)計(jì)

    STM32F407 外部中斷配置步驟

    介紹STM32F407外部中斷配置步驟,以按鍵為例,實(shí)現(xiàn)外部中斷
    的頭像 發(fā)表于 07-06 14:31 ?2077次閱讀
    <b class='flag-5'>STM32</b>F407 <b class='flag-5'>外部</b><b class='flag-5'>中斷</b><b class='flag-5'>配置</b>步驟

    STM32基于標(biāo)準(zhǔn)外設(shè)外部中斷配置

    本文介紹了STM32基于標(biāo)準(zhǔn)外設(shè)外部中斷配置,以及基于參考手冊(cè)如何更加寄存器配置
    的頭像 發(fā)表于 11-02 14:13 ?2108次閱讀
    <b class='flag-5'>STM32</b>基于標(biāo)準(zhǔn)外設(shè)<b class='flag-5'>庫</b>的<b class='flag-5'>外部</b><b class='flag-5'>中斷</b><b class='flag-5'>配置</b>

    STM32單片機(jī)外部中斷配置講解

    STM32單片機(jī)外部中斷配置講解01單片機(jī)外部中斷簡介所謂
    發(fā)表于 11-22 12:36 ?14次下載
    <b class='flag-5'>STM32</b>單片機(jī)<b class='flag-5'>外部</b><b class='flag-5'>中斷</b><b class='flag-5'>配置</b>講解

    Mini STM32 外部中斷實(shí)驗(yàn)

    到RTC鬧鐘事件。線18:連接到USB喚醒事件。每個(gè)外部中斷線可以獨(dú)立的配置觸發(fā)方式(上升沿,下降沿或者雙邊沿觸發(fā)),觸發(fā)/屏蔽,專用的狀態(tài)位。從上面可以看出,
    發(fā)表于 11-22 15:06 ?10次下載
    Mini <b class='flag-5'>STM32</b> <b class='flag-5'>外部</b><b class='flag-5'>中斷</b>實(shí)驗(yàn)

    STM32f10x 外部中斷中斷分組

    利用外部中斷來實(shí)現(xiàn)按鍵控制LED燈的亮滅。實(shí)驗(yàn)工具:MDK5,STM32F103ZET6開發(fā)板使用固件編程LED燈引腳PD13,按鍵PE0
    發(fā)表于 11-23 18:06 ?4次下載
    <b class='flag-5'>STM32</b>f10x <b class='flag-5'>外部</b><b class='flag-5'>中斷</b>及<b class='flag-5'>中斷</b>分組

    STM32 外部中斷詳解(原理+配置代碼)

    本文介紹了STM32基于標(biāo)準(zhǔn)外設(shè)外部中斷配置,以及基于參考手冊(cè)如何更加寄存器配置
    發(fā)表于 11-24 17:36 ?3次下載
    <b class='flag-5'>STM32</b> <b class='flag-5'>外部</b><b class='flag-5'>中斷</b>詳解(原理+<b class='flag-5'>配置</b>代碼)

    STM32F0x HAL學(xué)習(xí)筆記(8)外部中斷配置

    Package for STM32F0 Series)本文內(nèi)容:STM32CubeMx 配置外部中斷
    發(fā)表于 12-06 11:36 ?14次下載
    <b class='flag-5'>STM32</b>F0x HAL<b class='flag-5'>庫</b>學(xué)習(xí)筆記(8)<b class='flag-5'>外部</b><b class='flag-5'>中斷</b>的<b class='flag-5'>配置</b>

    STM32f429外部中斷配置解析基于HAL

    STM32f429外部中斷配置解析基于HAL
    發(fā)表于 12-16 16:58 ?10次下載
    <b class='flag-5'>STM32</b>f429<b class='flag-5'>外部</b><b class='flag-5'>中斷</b><b class='flag-5'>配置</b>解析基于HAL<b class='flag-5'>庫</b>

    使用LL開發(fā)STM32:GPIO口與外部中斷

    文章目錄目的輸出與控制輸入與端口值讀取外部中斷總結(jié)目的GPIO口使用是單片機(jī)開發(fā)中最簡單的一塊,STM32的GPIO口無論是使用HAL還是LL
    發(fā)表于 01-13 16:13 ?13次下載
    使用<b class='flag-5'>LL</b><b class='flag-5'>庫</b>開發(fā)<b class='flag-5'>STM32</b>:GPIO口與<b class='flag-5'>外部</b><b class='flag-5'>中斷</b>

    STM32外部中斷

    事件(上升沿或下降沿或雙邊沿)并能夠單獨(dú)地屏蔽:有一個(gè)掛起寄存器維持所有中斷請(qǐng)求的狀態(tài)。EXTI可以檢測到脈沖寬度小于內(nèi)部APB2的時(shí)鐘周期。多達(dá)80個(gè)通用IO口連接到16個(gè)外部中斷線。STM
    發(fā)表于 01-14 15:14 ?2次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>外部</b><b class='flag-5'>中斷</b>

    STM32LL系列教程(四)——外部中斷

    本文介紹通過LL,讀取按鍵外部中斷,改變LED亮滅
    發(fā)表于 01-14 15:47 ?10次下載
    <b class='flag-5'>STM32LL</b><b class='flag-5'>庫</b>系列教程(四)——<b class='flag-5'>外部</b><b class='flag-5'>中斷</b>

    STM32的IO外部中斷EXTI的使用

    方式訪問輸入引腳,還可以通過另外一種叫做外部中斷方式來對(duì)引腳的輸入信號(hào)進(jìn)行檢測,本篇首先介紹
    的頭像 發(fā)表于 06-22 10:21 ?2207次閱讀
    <b class='flag-5'>STM32</b>的IO<b class='flag-5'>外部</b><b class='flag-5'>中斷</b>EXTI的使用

    STM32單片機(jī)外部中斷簡介 STM32單片機(jī)外部中斷配置過程

    STM32 單片機(jī)是一款高性能、低功耗的 32 位微控制器,具有強(qiáng)大的計(jì)算能力、靈活的外設(shè)模塊以及優(yōu)秀的擴(kuò)展性,開發(fā)周期短、成本低。在單片機(jī)應(yīng)用中,外部中斷是一種重要的硬件觸發(fā)方式,本
    發(fā)表于 08-15 18:21 ?3201次閱讀

    STM32如何配置外部中斷STM32外部中斷配置步驟

    STM32如何配置外部中斷STM32外部中斷
    的頭像 發(fā)表于 10-26 17:47 ?3849次閱讀
    永城市| 百家乐赌博机有鬼吗| 六合彩图库大全| 做生意忌讳什么颜色| 皇城娱乐| 澳门百家乐海星王娱乐城| 百家乐官网怎么才赢| 网上百家乐真坑人| 百家乐官网投注软件有用吗| 大发888娱乐城加盟| 百家乐官网平游戏| 宁强县| 百家乐博娱乐平台| 百家乐官网和| 新葡京娱乐城官方网址| 百家乐是片人的吗| 百家乐官网怎么压对子| 黄金城百家乐免费下载| 怎么赢百家乐官网的玩法技巧和规则| 东方太阳城| 百家乐网上投注系统| 百家乐官网最好的投注方法| 大发888常见断续| 百家乐庄家的胜率| 百家乐官网代打是真的吗| 全讯网a3322.com| 杨筠松 24山 土| 百家乐官网真人荷官| 威尼斯人娱乐城送宝马| 免费百家乐官网计划软件| 网上百家乐官网新利| 全讯网新2代理| 百家乐官网是个什么样的游戏 | 百家乐赌博机假在哪里| 百家乐官网赌博软件下载| 太阳城娱乐城怎么样| 网络百家乐网站| 百家乐官网试玩1000元| 德化县| 大发888登陆网页游戏| 真人百家乐攻略|