出力ポートを,オープンドレインまたはプッシュプルに設定するグローバル関数. このライブラリを登録した際のプログラム: Demo_SetOutputPortType. Global functions for setting the output port bit open-drain or push-pull.
Dependents: Demo_SetOutputPortType Mbed2_ConnectTestAll
SetOutputPortType.hpp@2:faa854cf5f0e, 2016-10-21 (annotated)
- 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?
User | Revision | Line number | New 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 | } |