いろいろなテクニック.Nucleo と DISCO-F746 用.

Dependencies:   Array_Matrix mbed

Committer:
MikamiUitOpen
Date:
Wed Apr 10 06:32:33 2019 +0000
Revision:
1:bbb9f0c3e523
Parent:
0:bb939e0bc6e2
2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:bb939e0bc6e2 1 //-----------------------------------------------------------------
MikamiUitOpen 0:bb939e0bc6e2 2 // mbed で定義されているピンの名前に対応するペリフェラルのアドレスを取得
MikamiUitOpen 0:bb939e0bc6e2 3 // SPI, TIM, GPIO, ADC の場合
MikamiUitOpen 0:bb939e0bc6e2 4 //
MikamiUitOpen 1:bbb9f0c3e523 5 // 2017/10/14 修正:mbed rev.153 用に修正
MikamiUitOpen 1:bbb9f0c3e523 6 // 2019/04/10 Mbed rev.172 でも問題ないことを確認
MikamiUitOpen 0:bb939e0bc6e2 7 //
MikamiUitOpen 1:bbb9f0c3e523 8 // 2019/04/10, Copyright (c) 2019 MIKAMI, Naoki
MikamiUitOpen 0:bb939e0bc6e2 9 //-----------------------------------------------------------------
MikamiUitOpen 0:bb939e0bc6e2 10 // デバイスは PeripheralPins.h の中で以下のように定義されている
MikamiUitOpen 0:bb939e0bc6e2 11 /*
MikamiUitOpen 0:bb939e0bc6e2 12 #ifndef MBED_PERIPHERALPINS_H
MikamiUitOpen 0:bb939e0bc6e2 13 #define MBED_PERIPHERALPINS_H
MikamiUitOpen 0:bb939e0bc6e2 14
MikamiUitOpen 0:bb939e0bc6e2 15 #include "pinmap.h"
MikamiUitOpen 0:bb939e0bc6e2 16 #include "PeripheralNames.h"
MikamiUitOpen 0:bb939e0bc6e2 17
MikamiUitOpen 0:bb939e0bc6e2 18 // ADC
MikamiUitOpen 0:bb939e0bc6e2 19 extern const PinMap PinMap_ADC[];
MikamiUitOpen 0:bb939e0bc6e2 20
MikamiUitOpen 0:bb939e0bc6e2 21 // DAC
MikamiUitOpen 0:bb939e0bc6e2 22 extern const PinMap PinMap_DAC[];
MikamiUitOpen 0:bb939e0bc6e2 23
MikamiUitOpen 0:bb939e0bc6e2 24 // I2C
MikamiUitOpen 0:bb939e0bc6e2 25 extern const PinMap PinMap_I2C_SDA[];
MikamiUitOpen 0:bb939e0bc6e2 26 extern const PinMap PinMap_I2C_SCL[];
MikamiUitOpen 0:bb939e0bc6e2 27
MikamiUitOpen 0:bb939e0bc6e2 28 // PWM
MikamiUitOpen 0:bb939e0bc6e2 29 extern const PinMap PinMap_PWM[];
MikamiUitOpen 0:bb939e0bc6e2 30
MikamiUitOpen 0:bb939e0bc6e2 31 // SERIAL
MikamiUitOpen 0:bb939e0bc6e2 32 extern const PinMap PinMap_UART_TX[];
MikamiUitOpen 0:bb939e0bc6e2 33 extern const PinMap PinMap_UART_RX[];
MikamiUitOpen 0:bb939e0bc6e2 34 extern const PinMap PinMap_UART_RTS[];
MikamiUitOpen 0:bb939e0bc6e2 35 extern const PinMap PinMap_UART_CTS[];
MikamiUitOpen 0:bb939e0bc6e2 36
MikamiUitOpen 0:bb939e0bc6e2 37 // SPI
MikamiUitOpen 0:bb939e0bc6e2 38 extern const PinMap PinMap_SPI_MOSI[];
MikamiUitOpen 0:bb939e0bc6e2 39 extern const PinMap PinMap_SPI_MISO[];
MikamiUitOpen 0:bb939e0bc6e2 40 extern const PinMap PinMap_SPI_SCLK[];
MikamiUitOpen 0:bb939e0bc6e2 41 extern const PinMap PinMap_SPI_SSEL[];
MikamiUitOpen 0:bb939e0bc6e2 42
MikamiUitOpen 0:bb939e0bc6e2 43 // CAN
MikamiUitOpen 0:bb939e0bc6e2 44 extern const PinMap PinMap_CAN_RD[];
MikamiUitOpen 0:bb939e0bc6e2 45 extern const PinMap PinMap_CAN_TD[];
MikamiUitOpen 0:bb939e0bc6e2 46 */
MikamiUitOpen 0:bb939e0bc6e2 47
MikamiUitOpen 0:bb939e0bc6e2 48 // 関数 pinmap_peripheral() は "bitmap.h" の中で定義されている
MikamiUitOpen 0:bb939e0bc6e2 49 //------------------------------------------------------------------
MikamiUitOpen 0:bb939e0bc6e2 50
MikamiUitOpen 0:bb939e0bc6e2 51 #include "mbed.h"
MikamiUitOpen 0:bb939e0bc6e2 52 #include "PeripheralPins.h" // pinmap_peripheral() を使う場合に必要
MikamiUitOpen 0:bb939e0bc6e2 53 /*
MikamiUitOpen 0:bb939e0bc6e2 54 // この方法は mbed ライブラリの リビジョン 129 からは使えない
MikamiUitOpen 0:bb939e0bc6e2 55 class AddressSPI : public SPI
MikamiUitOpen 0:bb939e0bc6e2 56 {
MikamiUitOpen 0:bb939e0bc6e2 57 public:
MikamiUitOpen 0:bb939e0bc6e2 58 AddressSPI(PinName mosi, PinName miso = NC, PinName sclk = NC)
MikamiUitOpen 0:bb939e0bc6e2 59 : SPI(mosi, miso, sclk) {}
MikamiUitOpen 0:bb939e0bc6e2 60 uint32_t GetAddress() { return _spi.spi; }
MikamiUitOpen 0:bb939e0bc6e2 61 };
MikamiUitOpen 0:bb939e0bc6e2 62 */
MikamiUitOpen 0:bb939e0bc6e2 63 class AddressSPI
MikamiUitOpen 0:bb939e0bc6e2 64 {
MikamiUitOpen 0:bb939e0bc6e2 65 public:
MikamiUitOpen 0:bb939e0bc6e2 66 AddressSPI(PinName mosi, PinName miso = NC, PinName sclk = NC)
MikamiUitOpen 0:bb939e0bc6e2 67 : address_(pinmap_peripheral(mosi, PinMap_SPI_MOSI)) {}
MikamiUitOpen 0:bb939e0bc6e2 68 uint32_t GetAddress() { return address_; }
MikamiUitOpen 0:bb939e0bc6e2 69 private:
MikamiUitOpen 0:bb939e0bc6e2 70 uint32_t address_;
MikamiUitOpen 0:bb939e0bc6e2 71 };
MikamiUitOpen 0:bb939e0bc6e2 72
MikamiUitOpen 0:bb939e0bc6e2 73
MikamiUitOpen 0:bb939e0bc6e2 74 class AddressTIM : public PwmOut
MikamiUitOpen 0:bb939e0bc6e2 75 {
MikamiUitOpen 0:bb939e0bc6e2 76 public:
MikamiUitOpen 0:bb939e0bc6e2 77 AddressTIM(PinName pin) : PwmOut(pin) {}
MikamiUitOpen 0:bb939e0bc6e2 78 uint32_t GetAddress() { return _pwm.pwm; }
MikamiUitOpen 0:bb939e0bc6e2 79 };
MikamiUitOpen 0:bb939e0bc6e2 80
MikamiUitOpen 0:bb939e0bc6e2 81 class AddressDigitalOut : public DigitalOut
MikamiUitOpen 0:bb939e0bc6e2 82 {
MikamiUitOpen 0:bb939e0bc6e2 83 public:
MikamiUitOpen 0:bb939e0bc6e2 84 AddressDigitalOut(PinName pin) : DigitalOut(pin) {}
MikamiUitOpen 0:bb939e0bc6e2 85 // 以下は mbed のリビジョン 129 までは問題なかった
MikamiUitOpen 0:bb939e0bc6e2 86 // uint32_t GetAddress() { return (uint32_t)gpio.reg_set_clr & 0xFFFFFF00; }
MikamiUitOpen 0:bb939e0bc6e2 87 // mbed のリビジョン 153 で修正,gpio.reg_set_clr ⇒ gpio.reg_set
MikamiUitOpen 0:bb939e0bc6e2 88 uint32_t GetAddress() { return (uint32_t)gpio.reg_set & 0xFFFFFF00; }
MikamiUitOpen 0:bb939e0bc6e2 89 };
MikamiUitOpen 0:bb939e0bc6e2 90
MikamiUitOpen 0:bb939e0bc6e2 91 void PeripheralAddress()
MikamiUitOpen 0:bb939e0bc6e2 92 {
MikamiUitOpen 0:bb939e0bc6e2 93 #if defined(STM32F4)
MikamiUitOpen 0:bb939e0bc6e2 94 AddressSPI x1(D4, NC);
MikamiUitOpen 1:bbb9f0c3e523 95 printf("SPI1/3, D4: 0x%08X\r\n", x1.GetAddress());
MikamiUitOpen 1:bbb9f0c3e523 96 printf("上の表示されるアドレスは SPI1 のもの\r\n");
MikamiUitOpen 1:bbb9f0c3e523 97 printf("SPI, D4: 0x%08X\r\n", pinmap_peripheral(D4, PinMap_SPI_MOSI));
MikamiUitOpen 1:bbb9f0c3e523 98
MikamiUitOpen 1:bbb9f0c3e523 99 // 次の printf() 文のように機能がピン名と異なる場合(D4 は MISO ではない),実行時エラーが
MikamiUitOpen 1:bbb9f0c3e523 100 // ターミナルに表示され,プログラムが終了する
MikamiUitOpen 1:bbb9f0c3e523 101 //printf("SPI3, D4: 0x%08X\r\n", pinmap_peripheral(D4, PinMap_SPI_MISO));
MikamiUitOpen 1:bbb9f0c3e523 102 SPI mySpi(D4, NC, D3);
MikamiUitOpen 1:bbb9f0c3e523 103 printf(" GPIOB->AFR[0]: 0x%08X\r\n", GPIOB->AFR[0]);
MikamiUitOpen 0:bb939e0bc6e2 104 #endif // STM32F4
MikamiUitOpen 0:bb939e0bc6e2 105
MikamiUitOpen 0:bb939e0bc6e2 106 //#ifdef __STM32F746xx_H
MikamiUitOpen 0:bb939e0bc6e2 107 #ifdef STM32F7
MikamiUitOpen 0:bb939e0bc6e2 108 // PE_6 は DISCO-F746 では使われていない
MikamiUitOpen 0:bb939e0bc6e2 109 // AddressSPI x11(PE_6, NC);
MikamiUitOpen 0:bb939e0bc6e2 110 // printf("SPI, PE_6: 0x%08X\r\n", x11.GetAddress());
MikamiUitOpen 0:bb939e0bc6e2 111 AddressSPI x11(D7, NC);
MikamiUitOpen 0:bb939e0bc6e2 112 printf("SPI, D3: 0x%08X\r\n", x11.GetAddress());
MikamiUitOpen 0:bb939e0bc6e2 113 #endif // STM32F7
MikamiUitOpen 0:bb939e0bc6e2 114
MikamiUitOpen 0:bb939e0bc6e2 115 AddressTIM x2(D12);
MikamiUitOpen 1:bbb9f0c3e523 116 printf("PWM3, D12: 0x%08X\r\n", x2.GetAddress());
MikamiUitOpen 1:bbb9f0c3e523 117 printf("PWM1, D8: 0x%08X\r\n", pinmap_peripheral(D8, PinMap_PWM));
MikamiUitOpen 0:bb939e0bc6e2 118
MikamiUitOpen 0:bb939e0bc6e2 119 AddressDigitalOut x3(D6);
MikamiUitOpen 1:bbb9f0c3e523 120 printf("GPIOB, D6: 0x%08X\r\n", x3.GetAddress());
MikamiUitOpen 0:bb939e0bc6e2 121
MikamiUitOpen 0:bb939e0bc6e2 122 PinName adc = A0;
MikamiUitOpen 0:bb939e0bc6e2 123 ADCName addresAdc = (ADCName)pinmap_peripheral(adc, PinMap_ADC);
MikamiUitOpen 1:bbb9f0c3e523 124 printf("ADC, A0: 0x%08X\r\n", addresAdc);
MikamiUitOpen 1:bbb9f0c3e523 125 printf("ADC, A1: 0x%08X\r\n", pinmap_peripheral(A1, PinMap_ADC));
MikamiUitOpen 1:bbb9f0c3e523 126 printf("ADC, A2: 0x%08X\r\n", pinmap_peripheral(A2, PinMap_ADC));
MikamiUitOpen 0:bb939e0bc6e2 127 }