出力ポートを,オープンドレインまたはプッシュプルに設定するグローバル関数. このライブラリを登録した際のプログラム: 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:
2017-05-19
Revision:
3:ff33bd585670
Parent:
2:faa854cf5f0e
Child:
4:0f2bef62434a

File content as of revision 3:ff33bd585670:

//---------------------------------------------------------------------------------------
//  出力ポートを,オープンドレインまたはプッシュプルに設定するグローバル関数
//  (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" などの定義:PinNames.h
//  "PA_0", "PB_0", "PC_0", etc. are defined in PinNames.h.
//
//  この関数を使う前に,使用する GPIO ポートは使える状態に設定しておくこと
//  (Before using this function, the GPIO port must be enabled.)
//
//      PinName 型変数の 4 ~ 7 ビット:ポート番号(0 = A, 1 = B, ・・・・・)
//      PinName 型変数の 0 ~ 3 ビット:ピン番号(0 ~ 15)
//
//  2017/05/19, Copyright (c) 2017 MIKAMI, Naoki
//---------------------------------------------------------------------------------------

#include "mbed.h"

namespace Mikami
{
    // 出力ポートをオープンドレインに設定する
    void SetOpenDrain(PinName p0,       PinName p1  = NC, 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;
            uint32_t address = (STM_PORT(pins[n]) << 10) + GPIOA_BASE;
            ((GPIO_TypeDef *)address)->OTYPER |= 1 << STM_PIN(pins[n]);
        }
    }

    // 出力ポートをプッシュプルに設定する
    void SetPushPull(PinName p0,       PinName p1  = NC, 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;
            uint32_t address = (STM_PORT(pins[n]) << 10) + GPIOA_BASE;
            ((GPIO_TypeDef *)address)->OTYPER &= ~(1 << STM_PIN(pins[n]));
        }
    }
}