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

Dependents:   Demo_SetOutputPortType Mbed2_ConnectTestAll

Committer:
MikamiUitOpen
Date:
Fri Oct 21 07:54:41 2016 +0000
Revision:
2:faa854cf5f0e
Parent:
1:670919fefe1c
Child:
3:ff33bd585670
3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:7b86a8a8aabd 1 //---------------------------------------------------------------------------------------
MikamiUitOpen 0:7b86a8a8aabd 2 // 出力ポートを,オープンドレインまたはプッシュプルに設定するグローバル関数
MikamiUitOpen 0:7b86a8a8aabd 3 // (Global functions for setting the output port bit open-drain or push-pull)
MikamiUitOpen 0:7b86a8a8aabd 4 // SetOpenDrain() オープンドレインに設定 (Set open-drain)
MikamiUitOpen 0:7b86a8a8aabd 5 // SetPushPull() プッシュプルに設定 (Set push-pull)
MikamiUitOpen 1:670919fefe1c 6 // Nucleo 用(For Nucleo)
MikamiUitOpen 0:7b86a8a8aabd 7 //
MikamiUitOpen 2:faa854cf5f0e 8 // "PA_0", "PB_0", "PC_0" などの定義は Nucleo-F401 の場合下記のヘッダ・ファイルを参照のこと
MikamiUitOpen 0:7b86a8a8aabd 9 // "....TARGET_NUCLEO_F401RE/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F401RE/PinNames.h"
MikamiUitOpen 0:7b86a8a8aabd 10 //
MikamiUitOpen 2:faa854cf5f0e 11 // PinName型変数の上位4ビット:ポート番号(0 = A, 1 = B, ・・・・・)
MikamiUitOpen 0:7b86a8a8aabd 12 // PinName型変数の下位4ビット:ピン番号(0 ~ 15)
MikamiUitOpen 0:7b86a8a8aabd 13 //
MikamiUitOpen 2:faa854cf5f0e 14 // 2016/10/21, Copyright (c) 2016 MIKAMI, Naoki
MikamiUitOpen 0:7b86a8a8aabd 15 //---------------------------------------------------------------------------------------
MikamiUitOpen 0:7b86a8a8aabd 16
MikamiUitOpen 0:7b86a8a8aabd 17 #include "mbed.h"
MikamiUitOpen 0:7b86a8a8aabd 18
MikamiUitOpen 0:7b86a8a8aabd 19 namespace Mikami
MikamiUitOpen 0:7b86a8a8aabd 20 {
MikamiUitOpen 0:7b86a8a8aabd 21 // 一つの出力ポートをオープンドレインに設定する
MikamiUitOpen 0:7b86a8a8aabd 22 void SetOpenDrain(PinName pin)
MikamiUitOpen 0:7b86a8a8aabd 23 {
MikamiUitOpen 2:faa854cf5f0e 24 uint32_t address = (STM_PORT(pin) << 10) + GPIOA_BASE;
MikamiUitOpen 2:faa854cf5f0e 25 ((GPIO_TypeDef *)address)->OTYPER |= 1 << STM_PIN(pin);
MikamiUitOpen 0:7b86a8a8aabd 26 }
MikamiUitOpen 2:faa854cf5f0e 27
MikamiUitOpen 0:7b86a8a8aabd 28 // 複数の出力ポートをオープンドレインに設定する
MikamiUitOpen 0:7b86a8a8aabd 29 void SetOpenDrain(PinName p0, PinName p1, PinName p2 = NC, PinName p3 = NC,
MikamiUitOpen 0:7b86a8a8aabd 30 PinName p4 = NC, PinName p5 = NC, PinName p6 = NC, PinName p7 = NC,
MikamiUitOpen 0:7b86a8a8aabd 31 PinName p8 = NC, PinName p9 = NC, PinName p10 = NC, PinName p11 = NC,
MikamiUitOpen 0:7b86a8a8aabd 32 PinName p12 = NC, PinName p13 = NC, PinName p14 = NC, PinName p15 = NC)
MikamiUitOpen 0:7b86a8a8aabd 33 {
MikamiUitOpen 2:faa854cf5f0e 34 PinName pins[16] = {p0, p1, p2, p3, p4, p5, p6, p7,
MikamiUitOpen 2:faa854cf5f0e 35 p8, p9, p10, p11, p12, p13, p14, p15};
MikamiUitOpen 2:faa854cf5f0e 36
MikamiUitOpen 0:7b86a8a8aabd 37 for (int n=0; n<16; n++)
MikamiUitOpen 0:7b86a8a8aabd 38 {
MikamiUitOpen 0:7b86a8a8aabd 39 if (pins[n] == NC) break;
MikamiUitOpen 0:7b86a8a8aabd 40 SetOpenDrain(pins[n]);
MikamiUitOpen 0:7b86a8a8aabd 41 }
MikamiUitOpen 0:7b86a8a8aabd 42 }
MikamiUitOpen 0:7b86a8a8aabd 43
MikamiUitOpen 0:7b86a8a8aabd 44 // 一つの出力ポートをプッシュプルに設定する
MikamiUitOpen 0:7b86a8a8aabd 45 void SetPushPull(PinName pin)
MikamiUitOpen 0:7b86a8a8aabd 46 {
MikamiUitOpen 2:faa854cf5f0e 47 uint32_t address = (STM_PORT(pin) << 10) + GPIOA_BASE;
MikamiUitOpen 2:faa854cf5f0e 48 ((GPIO_TypeDef *)address)->OTYPER &= ~(1 << STM_PIN(pin));
MikamiUitOpen 0:7b86a8a8aabd 49 }
MikamiUitOpen 0:7b86a8a8aabd 50
MikamiUitOpen 0:7b86a8a8aabd 51 // 複数の出力ポートをプッシュプルに設定する
MikamiUitOpen 0:7b86a8a8aabd 52 void SetPushPull(PinName p0, PinName p1, PinName p2 = NC, PinName p3 = NC,
MikamiUitOpen 0:7b86a8a8aabd 53 PinName p4 = NC, PinName p5 = NC, PinName p6 = NC, PinName p7 = NC,
MikamiUitOpen 0:7b86a8a8aabd 54 PinName p8 = NC, PinName p9 = NC, PinName p10 = NC, PinName p11 = NC,
MikamiUitOpen 0:7b86a8a8aabd 55 PinName p12 = NC, PinName p13 = NC, PinName p14 = NC, PinName p15 = NC)
MikamiUitOpen 0:7b86a8a8aabd 56 {
MikamiUitOpen 2:faa854cf5f0e 57 PinName pins[16] = {p0, p1, p2, p3, p4, p5, p6, p7,
MikamiUitOpen 2:faa854cf5f0e 58 p8, p9, p10, p11, p12, p13, p14, p15};
MikamiUitOpen 2:faa854cf5f0e 59
MikamiUitOpen 0:7b86a8a8aabd 60 for (int n=0; n<16; n++)
MikamiUitOpen 0:7b86a8a8aabd 61 {
MikamiUitOpen 0:7b86a8a8aabd 62 if (pins[n] == NC) break;
MikamiUitOpen 0:7b86a8a8aabd 63 SetPushPull(pins[n]);
MikamiUitOpen 0:7b86a8a8aabd 64 }
MikamiUitOpen 0:7b86a8a8aabd 65 }
MikamiUitOpen 0:7b86a8a8aabd 66 }