[nRF 52832]周辺編|実験一LEDランプ及びBUTTONボタン

6693 ワード

SDK:nRF5_SDK_12.2.0

1.概要


実験一nRF 52832 SDK v 12の説明に用いる.2.0 LEDランプ及びBUTTONボタンのボードレベルサポート関数及び使用方法について.ボードレベルサポート関数により、ハードウェアにLEDランプをセットアップする有効状態(ハイレベルかローレベルか)を制御でき、ソフトウェアにLEDをセットアップするピンと数でLEDの状態を読みやすく設定でき、迅速な開発の目的を達成でき、BUTTONボタンはLEDランプの実装原理と類似している.

1.1工事目録

  • 公式SDK外付け工事目録のblinkyルーチンに入り、このルーチンはLED点滅のテンプレートを提供する.RF5_SDK_12.2.0_f012efa\examples\peripheral\blinky\
  • pca 10040ボード、s 132バージョンプロトコルスタック、arm 5(MDK 5)開発環境ディレクトリに順次入り、Keilエンジニアリングファイルを開きます.\blinky\pca10040\s132\arm5_no_pack\blinky_pca10040_s132.uvprojx

  • 1.2工程説明


    公式ルーチンコード入口MDK 5 Project:Applicationmain.cでは、以下のコードに示すように、メイン関数main()でbsp_を呼び出すboard_leds_Init()関数はLEDデバイスを初期化し、whileサイクルタスクでは500 msごとにすべてのLEDランプ(共LEDS_NUMBER個のLEDランプ)の消灯を反転する.
    int main(void)
    {
        /* Configure board. */
        bsp_board_leds_init();
    
        /* Toggle LEDs. */
        while (true)
        {
            for (int i = 0; i < LEDS_NUMBER; i++)
            {
                bsp_board_led_invert(i);
                nrf_delay_ms(500);
            }
        }
    }

    2.定義と宣言


    前述のルーチンのbspプレフィックス関数はMDK 5 Project:Board Definitionboardsにある.cファイルには、LED、BUTTONなどのボードレベルのサポート関数を格納するためのファイルであり、ヘッダファイルはboardsである.h.

    2.1マクロ定義


    boardでcとboard.hファイルには、pca 10040に定義するLED接頭辞のマクロ定義がいくつか参照されている.h(どのプレートがどのプレートレベルのプロファイルであるかを選択)では、以下のようになります.
    // LEDs definitions for PCA10040
    #define LEDS_NUMBER    4                            /*!<   LED   */
    #define LED_START      17                           /*!<   LED   */
    #define LED_1          17                           /*!<   LED_1   */
    #define LED_2          18                           /*!<   LED_2   */
    #define LED_3          19                           /*!<   LED_3   */
    #define LED_4          20                           /*!<   LED_4   */
    #define LED_STOP       20                           /*!<   LED   */
    
    #define LEDS_ACTIVE_STATE 0                         /*!<   LED  :0- ,1-  */
    
    #define LEDS_LIST { LED_1, LED_2, LED_3, LED_4 }    /*!< LED  ,  LED   */
    

    2.1 LED配列バッファ


    boardでc静的定数グローバル配列m_を宣言するboard_led_List、LEDリストを格納するために使用され、空間サイズはLEDS_である.NUMBER、内容は上文マクロ定義中のLEDS_LIST、これによりled_idx=0の場合、m_board_led_List[led_idx]はLED_1,その他のLEDは順次類推する.
    static const uint8_t m_board_led_list[LEDS_NUMBER] = LEDS_LIST;

    3.関数インタフェース


    ● void bsp_board_leds_init(void)
    用途:すべてのLEDランプ設備パラメータを初期化する:戻りなし:なし
    ● bool bsp_board_led_state_get(uint32_t led_idx)
    用途:led_を取得するidxのLEDの現在の状態パラメータ:-led_idx:LEDリスト番号、最大LEDS_NUMBER-1戻り:-true(1):LED点灯-flase(0):LED消灯
    ここで注目すべきは、ハードウェア上のボードレベルLEDで同じ有効状態、すなわちLEDS_を統一的に使用することである.ACTIVE_STATEはハイレベル点灯(有効)またはローレベル点灯(有効)を構成し、デフォルトは0-ローレベル点灯(有効)であり、この関数を呼び出してハイレベル点灯と互換性があり、ユーザーはソフトウェア上trueとflaseに注目するだけでよい.● void bsp_board_led_on(uint32_t led_idx)
    用途:led_を設定するidxのLED点灯パラメータ:-led_idx:LEDリスト番号、最大LEDS_NUMBER-1戻り:なし
    ● void bsp_board_led_off(uint32_t led_idx)
    用途:led_を設定するidxのLED消灯パラメータ:-led_idx:LEDリスト番号、最大LEDS_NUMBER-1戻り:なし
    ● void bsp_board_led_invert(uint32_t led_idx)
    用途:led_を反転idxのLED状態パラメータ:-led_idx:LEDリスト番号、最大LEDS_NUMBER-1戻り:なし
    ● void bsp_board_leds_off(void)
    用途:すべてのLEDランプパラメータをオフにする:戻りなし:なし
    ● void bsp_board_leds_on(void)
    用途:すべてのLEDランプパラメータを点灯する:戻りなし:なし
    ● uint32_t bsp_board_pin_to_led_idx(uint32_t pin_number)
    用途:LEDのピン番号をLEDのランプ番号パラメータに変換する:-pin_number:GPIOピン番号戻り:-0 xFFFFFFFFFF無効ピン番号-その他値:LEDのランプ番号
    ● uint32_t bsp_board_led_idx_to_pin(uint32_t led_idx)
    用途:LEDのランプ番号をLEDのピン番号パラメータに変換する:-led_idx:LEDリスト番号、最大LEDS_NUMBER-1は、-GPIOピン番号を返します.
    具体的な関数の実現方式はboardである.c、比较的简単で、自分でコードを読むことで学ぶことができて、このファイルはBUTTONの板级の支持関数を含んで、原理はLEDに似ていて、ここではもう说明しません.

    3.実験


    次に、上記の関数を実験的に実証し、LED_0 1 s点滅1回、LED_1状態追従LED_0,LED 2状態とLED_0は反対です.
    int main(void)
    {
        /*   LED   */
        bsp_board_leds_init();
        while(true)
        {
            /*   LED_0   */
            bsp_board_led_invert(0);                    
            /*   LED_0   */
            if(true == bsp_board_led_state_get(0))      
            {
                /*   LED_0  ,  LED_1,   LED_2 */
                bsp_board_led_on(1);
                bsp_board_led_off(2);
            }
            else
            {
                /*   LED_0  ,  LED_1,   LED_2 */
                bsp_board_led_off(1);
                bsp_board_led_on(2);
            }
            /*  1s */
            nrf_delay_ms(1000);
        }
    }

    4.開拓


    公式SDK外付け工事カタログの下にはFreeRTOSベースのblinky_freertosルーチンは学習に使用できます.さらに上記nrf_delay_ms()ミリ秒級遅延関数はソフトウェアマシンサイクル遅延を利用しており、外付けエンジニアリングディレクトリの下にblinky_がある.systickルーチンは、滴下タイマを用いて正確に遅延する(nRF 52832では、デフォルトではsystickは使用されず、消費電力を節約するために使用されるようですか?)