出力ポートを,オープンドレインまたはプッシュプルに設定するグローバル関数. このライブラリを登録した際のプログラム: Demo_SetOutputPortType. Global functions for setting the output port bit open-drain or push-pull.
Dependents: Demo_SetOutputPortType Mbed2_ConnectTestAll
Diff: SetOutputPortType.hpp
- Revision:
- 3:ff33bd585670
- Parent:
- 2:faa854cf5f0e
- Child:
- 4:0f2bef62434a
--- a/SetOutputPortType.hpp Fri Oct 21 07:54:41 2016 +0000 +++ b/SetOutputPortType.hpp Fri May 19 13:42:00 2017 +0000 @@ -1,66 +1,61 @@ //--------------------------------------------------------------------------------------- -// 出力ポートを,オープンドレインまたはプッシュプルに設定するグローバル関数 -// (Global functions for setting the output port bit open-drain or push-pull) +// 出力ポートを,オープンドレインまたはプッシュプルに設定するグローバル関数 +// (Global functions for setting the output port bit open-drain or push-pull) // SetOpenDrain() オープンドレインに設定 (Set open-drain) // SetPushPull() プッシュプルに設定 (Set push-pull) -// Nucleo 用(For Nucleo) +// Nucleo 用(For Nucleo) // -// "PA_0", "PB_0", "PC_0" などの定義は Nucleo-F401 の場合下記のヘッダ・ファイルを参照のこと -// "....TARGET_NUCLEO_F401RE/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F401RE/PinNames.h" +// "PA_0", "PB_0", "PC_0" などの定義:PinNames.h +// "PA_0", "PB_0", "PC_0", etc. are defined in PinNames.h. // -// PinName型変数の上位4ビット:ポート番号(0 = A, 1 = B, ・・・・・) -// PinName型変数の下位4ビット:ピン番号(0 ~ 15) +// この関数を使う前に,使用する GPIO ポートは使える状態に設定しておくこと +// (Before using this function, the GPIO port must be enabled.) // -// 2016/10/21, Copyright (c) 2016 MIKAMI, Naoki +// 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 pin) + // 出力ポートをオープンドレインに設定する + 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) { - 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}; + 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]); + uint32_t address = (STM_PORT(pins[n]) << 10) + GPIOA_BASE; + ((GPIO_TypeDef *)address)->OTYPER |= 1 << STM_PIN(pins[n]); } } - // 一つの出力ポートをプッシュプルに設定する - void SetPushPull(PinName pin) + // 出力ポートをプッシュプルに設定する + 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) { - 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}; + 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]); + uint32_t address = (STM_PORT(pins[n]) << 10) + GPIOA_BASE; + ((GPIO_TypeDef *)address)->OTYPER &= ~(1 << STM_PIN(pins[n])); } } }