出力ポートを,オープンドレインまたはプッシュプルに設定するグローバル関数. このライブラリを登録した際のプログラム: Demo_SetOutputPortType. Global functions for setting the output port bit open-drain or push-pull.

Dependents:   Demo_SetOutputPortType Mbed2_ConnectTestAll

SetOutputPortType.hpp

Committer:
MikamiUitOpen
Date:
2016-10-21
Revision:
2:faa854cf5f0e
Parent:
1:670919fefe1c
Child:
3:ff33bd585670

File content as of revision 2:faa854cf5f0e:

//---------------------------------------------------------------------------------------
// 出力ポートを,オープンドレインまたはプッシュプルに設定するグローバル関数
// (Global functions for setting the output port bit open-drain or push-pull)
//      SetOpenDrain()      オープンドレインに設定 (Set open-drain)
//      SetPushPull()       プッシュプルに設定 (Set push-pull)
// Nucleo 用(For Nucleo)
//
// "PA_0", "PB_0", "PC_0" などの定義は Nucleo-F401 の場合下記のヘッダ・ファイルを参照のこと
// "....TARGET_NUCLEO_F401RE/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F401RE/PinNames.h"
//
//      PinName型変数の上位4ビット:ポート番号(0 = A, 1 = B, ・・・・・)
//      PinName型変数の下位4ビット:ピン番号(0 ~ 15)
//
// 2016/10/21, Copyright (c) 2016 MIKAMI, Naoki
//---------------------------------------------------------------------------------------

#include "mbed.h"

namespace Mikami
{
    // 一つの出力ポートをオープンドレインに設定する
    void SetOpenDrain(PinName pin)
    {
        uint32_t address = (STM_PORT(pin) << 10) + GPIOA_BASE;
        ((GPIO_TypeDef *)address)->OTYPER |= 1 << STM_PIN(pin);
    }

    // 複数の出力ポートをオープンドレインに設定する
    void SetOpenDrain(PinName p0, PinName p1, PinName p2 = NC, PinName p3 = NC,
                      PinName p4 = NC, PinName p5 = NC, PinName p6 = NC, PinName p7 = NC,
                      PinName p8 = NC, PinName p9 = NC, PinName p10 = NC, PinName p11 = NC,
                      PinName p12 = NC, PinName p13 = NC, PinName p14 = NC, PinName p15 = NC)
    {
        PinName pins[16] = {p0, p1, p2, p3, p4, p5, p6, p7,
                            p8, p9, p10, p11, p12, p13, p14, p15};

        for (int n=0; n<16; n++)
        {
            if (pins[n] == NC) break;
            SetOpenDrain(pins[n]);
        }
    }

    // 一つの出力ポートをプッシュプルに設定する
    void SetPushPull(PinName pin)
    {
        uint32_t address = (STM_PORT(pin) << 10) + GPIOA_BASE;
        ((GPIO_TypeDef *)address)->OTYPER &= ~(1 << STM_PIN(pin));
    }

    // 複数の出力ポートをプッシュプルに設定する
    void SetPushPull(PinName p0, PinName p1, PinName p2 = NC, PinName p3 = NC,
                     PinName p4 = NC, PinName p5 = NC, PinName p6 = NC, PinName p7 = NC,
                     PinName p8 = NC, PinName p9 = NC, PinName p10 = NC, PinName p11 = NC,
                     PinName p12 = NC, PinName p13 = NC, PinName p14 = NC, PinName p15 = NC)
    {
        PinName pins[16] = {p0, p1, p2, p3, p4, p5, p6, p7,
                            p8, p9, p10, p11, p12, p13, p14, p15};

        for (int n=0; n<16; n++)
        {
            if (pins[n] == NC) break;
            SetPushPull(pins[n]);
        }
    }
}