ArdSCSino Plus (STM32F4) の PlatformIO でのビルド

前提:ArdSCSino(STM32F1) がビルドできるていること。
 これは ネット情報など調べれば難しくないと思いますので省略。

1.PlatformIOのパッケージ(framework-arduinoststm32-maple)ソースを修正
(1)platformio-build-stm32f4.py
フォルダ:C:\Users\ユーザ名\.platformio\packages\framework-arduinoststm32-maple\tools
追加修正内容:
 py1
<貼り付け用テキスト>
"netduino2plus": "discovery_f407",
"genericSTM32F401CC": "blackpill_f401",
"genericSTM32F411CE": "disco_f411",

 py2
<貼り付け用テキスト>
                "build.arduino.error_led_pin", "PC13"))
#                "build.arduino.error_led_pin", "PD14"))

(2)blackpill_f401.h
フォルダ:C:\Users\ユーザ名\.platformio\packages\framework-arduinoststm32-maple\STM32F4\variants\blackpill_f401
追加修正内容:
 f401
<貼り付け用テキスト>
#define BOARD_SPI1A_NSS_PIN      PA15
#define BOARD_SPI1A_SCK_PIN      PB3
#define BOARD_SPI1A_MISO_PIN     PB4
#define BOARD_SPI1A_MOSI_PIN     PB5


#define BOARD_SPI3A_NSS_PIN      PA4
#define BOARD_SPI3A_SCK_PIN      PC10
#define BOARD_SPI3A_MISO_PIN     PC11
#define BOARD_SPI3A_MOSI_PIN     PC12

#define BOARD_SPI4_NSS_PIN      PB12
#define BOARD_SPI4_SCK_PIN      PB13
#define BOARD_SPI4_MISO_PIN     PA11
#define BOARD_SPI4_MOSI_PIN     PA1

#define BOARD_SPI5_NSS_PIN      PB1
#define BOARD_SPI5_SCK_PIN      PB0
#define BOARD_SPI5_MISO_PIN     PA12
#define BOARD_SPI5_MOSI_PIN     PA10
#define BOARD_SPI5A_MOSI_PIN    PB8

#define BOARD_SDIO_D0           PB4
#define BOARD_SDIO_D1           PA8
#define BOARD_SDIO_D2           PA9
#define BOARD_SDIO_D3           PB5
#define BOARD_SDIO_CLK          PB15
#define BOARD_SDIO_CMD          PA6

(3)disco_f411.h
フォルダ:C:\Users\ユーザ名\.platformio\packages\framework-arduinoststm32-maple\STM32F4\variants\disco_f411
追加修正内容:
 f411
<貼り付け用テキスト>
#define BOARD_SPI4_NSS_PIN      PB12
#define BOARD_SPI4_SCK_PIN      PB13
#define BOARD_SPI4_MISO_PIN     PA11
#define BOARD_SPI4_MOSI_PIN     PA1

#define BOARD_SPI5_NSS_PIN      PB1
#define BOARD_SPI5_SCK_PIN      PB0
#define BOARD_SPI5_MISO_PIN     PA12
#define BOARD_SPI5_MOSI_PIN     PA10
#define BOARD_SPI5A_MOSI_PIN    PB8


2.パッケージのバージョン?が違う場合
 “1.”の変更でエラーなくビルドできるのですが、手順を書こうと新環境でビルドしたものでは SDカードが認識されませんでした。

旧環境と比較すると、パッケージの framework-arduinoststm32-maple のバージョンが違う??
・新環境(通常手順で自動構築?)のソースの日付:2020年12月頃
・旧環境のソースの日付:2022年9月頃

実は、PlatformIOでF4(maple)をビルドするための情報が無く、正常にビルドができる環境を構築するのに 数週間は試行錯誤していたので どこの時点で新しいものに更新されたのか、元々だったのか、思い出せないというか、判りません。。
【追記】
元ソース、判りました。Arudino IDE の開発環境 構築で使用したファイル群をコピーして置き換えたものでした。どちらのパッケージが良いかは判りませんが参考までに。
androda/Arduino_STM32     https://github.com/androda/Arduino_STM32

もし、2020年12月頃のパッケージの場合、とりあえず以下のような修正をすれば良さそうです。
・SPI.cpp
フォルダ:C:\Users\ユーザ名\.platformio\packages\framework-arduinoststm32-maple\STM32F4\libraries\SPI\src
追加修正内容:
 spi
<貼り付け用テキスト>
if ( transmitBuf==NULL ) {
     if ( receiveBuf!=NULL ) {
         dmaTransfer(ff, receiveBuf, length, flags);
     }
     return;
} else {
     if ( receiveBuf==NULL ) {
         dmaSend(transmitBuf, length, flags);
         return;
     }
     PRINTF("<dTb-");
     dmaWaitCompletion();
     _currentSetting->dmaTxBuffer = transmitBuf;
     _currentSetting->dmaTrxLength = length;
     _currentSetting->dmaTrxAsync = (flags&DMA_ASYNC);
     dmaTransferSet(receiveBuf, (flags&(DMA_CIRC_MODE|DMA_TRNS_HALF)) | DMA_MINC_MODE);
     dmaTransferRepeat();
     PRINTF("-dTb>\n");
}

<貼り付け用テキスト>
if ( receiveBuf==NULL ) {
     dmaSend(tx_data, length, flags);
     return;
}



コメント