<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x
    查看: 1420|回復: 0
    打印 上一主題 下一主題

    【遙控器開發基礎教程2】瘋殼·開源編隊無人機-中斷(按鍵檢測)

    [復制鏈接]
    跳轉到指定樓層
    樓主
    發表于 2022-7-25 10:45:03 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
    關鍵詞: 開源 , 編隊 , 無人機 , 中斷 , 按鍵檢測
    COCOFLY教程
    ——瘋殼·無人機·系列
    中斷(按鍵檢測)




    圖1


    一、輕觸按鍵

    1.1輕觸按鍵簡介
    輕觸按鍵是眾多按鍵中的一款產品,它其實相當于是一種電子開關,只要輕輕的按下按鍵就可以把開關接通,松開時把開關斷開。輕觸按鍵由于微動開關的特性以及體積小、質量輕的優勢在家用電器方面得到了廣泛的應用,應用場景有: 電視機按鍵、遙控器按鍵、電腦按鍵、鍵盤按鍵、顯示器按鍵、照明按鍵等,如下圖所示。


    圖2
    1.2輕觸按鍵原理
    以四腳輕觸按鍵示例,四腳輕觸開關的內部結構如下圖所示。


    圖3

    這種開關的工作原理,其實和普通按鈕開 關的工作原理差不多,由常開觸點、常閉觸點組合而成,在四腳輕觸開關中,常開觸點的作用,就是當壓力向常開觸點施壓時,這個電路就呈現接通狀態;當撤銷這種壓力的時候,就恢復到了原始的常閉觸點,也就是所謂的斷開。這個施壓的力,就是用我們的手去開按鈕、關按鈕的動作。
    二、中斷
    2.1中斷簡介
    由于發生了某種隨機的事件(外部或內部),引起單片機暫時中斷正在運行的程序,轉去執行一段特殊的服務程序(中斷服務子程序或中斷處理程序),以處理該事件,該事件處理完后又返回被中斷的程序繼續執行,這一過程就稱為中斷, 引發中斷地稱為中斷源。比如:看電視時突然門鈴響,那么門鈴響就相當于中斷源。有些中斷還能夠被其他高優先級的中斷所中斷,那么這種情況又叫做中斷的嵌套。由于單片機中中斷眾多,我們這里主要講外部中斷。
    STM32F103 的每個 GPIO 引腳都可以作為外部中斷的中斷輸入口,每個中斷都設有狀態位,每個中斷/事件都有獨立的觸發和屏蔽設置。STM32 的外部中斷線及其對應事件為:
    (1)Line0~15:對應外部 IO 口的輸入中斷;
    (2)Line16:連接到 PVD 輸出;
    (3)Line17:連接到 RTC 鬧鈴事件;
    (4)Line18:連接到 USB 喚醒事件;
    (5)Line19:連接到以太網喚醒事件。
    這里我們使用到 Line0~15 的 GPIO 輸入中斷,這里的 0~15 分別對應每組GPIO 引腳的 0~15。如下表所示為管腳所對應的中斷線以及對應的中斷服務函數名稱。



    表1
    2.2中斷優先級管理
    當配置了多個中斷后,如果同一時間多個中斷觸發怎么辦?誰先執行誰后執行?在 STM32 中有一套專門用于處理中斷優先級的問題的機制,叫中斷分組機制。分組配置在寄存器 SCB->AIRCR 中。如下表所示。


    表2
    組 0 就是 4 位都用來設置成響應優先級,2^4=16 位都是響應優先級;
    組 1 分為(2^1) 兩個搶占優先級,在這兩個搶占優先級里面還分別有(2^3) 八個響應優先級,(2^1) *  (2^3) =16;
    組 2 分為(2^2) 四個搶占優先級,在這四個搶占優先級里面還分別有(2^2) 四個響應優先級,(2^2) *  (2^2) =16;
    組 3 分為(2^3)八個搶占優先級,在這八個搶占優先級里面還分別有(2^1) 兩個響應優先級,(2^3)*(2^1) =16;
    組 4 分為(2^4)十六個都是搶占優先級 (2^4) =16;
    STM32 的中斷分組常常使用代碼“NVIC_PriorityGroupConfig”,如下示例:
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    該示例代碼設置 NVIC 中斷分組 2 即 2 位搶占優先級,2 位響應優先級,也就是說可以配置成四個搶占優先級,在這四個搶占優先級中還可以配置四個響應優先級。
    那么什么又叫做搶占優先級,什么叫做響應優先級呢?主要區別如下:
    (1)搶占優先級。搶占優先級高的中斷,可以打斷搶占優先級低的中斷;
    (2)響應優先級。搶占優先級相同的中斷,響應優先級高的可以優先執行。
    2.3外部中斷的觸發方式
    STM32 觸發外部中斷的方式主要有三種:


    圖4
    上升沿觸發,指的是電平從低電平(“0”)變為高電平(“1”)的過程,對應上圖中的上升時間部分。
    下降沿觸發,指的是電平從高電平(“1”)變為低電平(“0”)的過程,對應上圖中的下降時間部分。
    上升沿下降沿觸發,指的是(1)、(2)兩種情況都會觸發中斷。
    2.4外部中斷常用寄存器
    STM32 配置外部中斷的常用寄存器如下:
    (1)上升沿觸發選擇寄存器 (EXTI_RTSR),該寄存器用于配置中斷 x 線上的中斷是否允許上升沿觸發。


    圖5
    TRx:指的是中斷線 x 的上升沿觸發事件配置位,其中 0 為禁止輸入線上升沿觸發,1 為允許輸入線上升沿觸發。
    (2)下降沿觸發選擇寄存器 (EXTI_FTSR),該寄存器用于配置中斷 x 線上的中斷是否允許下降沿觸發。


    圖6
    TRx:指的是中斷線 x 的下降沿觸發事件配置位,其中 0 為禁止輸入線下降沿觸發,1 為允許輸入線下降沿觸發。

    2.5中斷實驗
    本節實驗的內容是使用遙控手柄上的左搖桿的按鍵對遙控上的指示燈進行控制,這里把左搖桿按鍵的 GPIO 配置外部中斷的下降沿觸發的方式,一旦觸發則把遙控器指示燈的狀態進行反轉,即原本為亮則滅,原本為滅則亮。
    遙控器的左搖桿按鍵如下圖所示。


    圖7

    查看原理圖,可知左搖桿的按鍵對應 PB9,如下圖所示。



    圖8
    LED 的配置可以參考遙控器開發基礎教程《GPIO》一節。整體的編寫代碼的思路如下表所示:
    代碼思路



    表3
    按照代碼思路,編寫代碼(通過調用官方庫),對搖桿左按鍵配置外部中斷的代碼如下圖所示:


    圖9
    中斷服務函數的邏輯處理如下圖所示。


    圖10

    保存、編譯、下載,連續按下左按鍵,就可以看到遙控手柄的四個 LED 指示燈執行熄滅與點亮,如下圖所示。


    圖11





    文件下載請點擊: 【2】中斷(按鍵檢測).pdf (794.33 KB)

    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規則

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷