AT32F403A を使ってみた その2
AT32F403A Lチカまでの道のり
PlatformIO on VSCode の設定
Artery tek の github にPlatformIO のライブラリが存在するので、案内に従って PlatformIO core CLI からインストールする。
pio pkg install -g -p https://github.com/ArteryTek/platform-arterytekat32/releases/download/v1.0.2/pio-at32-1.0.2.tar.gz
実はこのボードは出荷時に L チカするコードが書かれているので、書き換わったことがわかりやすいように三々七拍子 L チカコードを作る。 LED の場所はボードに書かれている通り PC13 である。(負論理)
ライブラリのインストールが出来たら、New Project で AT32F403ACGU7 の新規のプロジェクトを生成する。
空っぽのプロジェクトができる。 (テンプレートくらい入れてほしい…)
なにもわからないので、別途 AT32F403A の Firmware Libraryをダウンロードしておく。 この中の project の中に exlample があるので、gpio/io_toggle をコピーして書き換える。
最低でも以下のファイルが必要と思われる。
include/at32f403a_407_clock.h
include/at32f403a_407_conf.h
include/at32f403a_407_int.h
src/at32f403a_407_clock.c
src/at32f403a_407_int.c
src/main.c
このままだと delay_ms が使えないので、project の at32f403a_407_board 以下からファイルをコピーしてくる(開発ボード用の設定っぽい?) 余計な設定もたくさん入っているので、必要な部分だけ別ファイルにした方が良いかも?
include/at32f403a_407_board.h
src/at32f403a_407_board.c
ビルド時に include を見てくれないので、platform.ini の設定を以下のように書き換える。 (build_flgas 以下を追記) ついでに F403A の開発ボードの設定をオンにする。 (ないと at32f403a_407_board.c でエラーになります) この辺りは、PlatformIO ライブラリの example フォルダを参考にした。
[env:genericAT32F403ACGT7]
platform = arterytekat32
board = genericAT32F403ACGT7
framework = at32firmlib
build_flags = ${env.build_flags} ; reuse common env build flags
-Iinclude
-DAT_START_F403A_V1
この時点でプロジェクトのディレクトリ構成はこんな感じ。
環境の準備が出来たので、 main.c にコードを書く。 いつもの STM32 風なので、方言の違いがわかればそれほど難しくはないかも?
#include "at32f403a_407_board.h"
#include "at32f403a_407_clock.h"
#define BLINK_DELAY 250
void gpio_config(void)
{
gpio_init_type gpio_init_struct;
/* enable the gpioa clock */
crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE);
/* set default parameter */
gpio_default_para_init(&gpio_init_struct);
/* configure the gpio */
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
gpio_init_struct.gpio_pins = GPIO_PINS_13;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOC, &gpio_init_struct);
}
int main(void)
{
system_clock_config();
delay_init();
gpio_config();
while(1)
{
for(int i=0;i<3;i++) {
GPIOC->clr = GPIO_PINS_13;
delay_ms(BLINK_DELAY);
GPIOC->scr = GPIO_PINS_13;
delay_ms(BLINK_DELAY);
}
delay_ms(BLINK_DELAY*2);
for(int i=0;i<3;i++) {
GPIOC->clr = GPIO_PINS_13;
delay_ms(BLINK_DELAY);
GPIOC->scr = GPIO_PINS_13;
delay_ms(BLINK_DELAY);
}
delay_ms(BLINK_DELAY*2);
for(int i=0;i<7;i++) {
GPIOC->clr = GPIO_PINS_13;
delay_ms(BLINK_DELAY);
GPIOC->scr = GPIO_PINS_13;
delay_ms(BLINK_DELAY);
}
delay_ms(BLINK_DELAY*2);
}
}
この状態で Build すると .pio/build の下にバイナリが作られる。
あとはこれをマイコンに書き込む。 書き込みツールは Artery のサイトから ISPをダウンロードする。
展開すると、書き込みツールと DFU ドライバが入っているので、まずは DFU ドライバをインストールする。
マイコンを DFU モードにするには STM32 系のおやくそく通り、BOOT0 を押しながら NRST を押す。 この状態で書き込みツールを起動し、“USB DFU” にするとマイコンを見つけて次のような画面になる、
この画面で書き込むファームウェアを設定
Next を押すと「コードプロテクションが掛かっていないけどOKか?」みたいな注意書きが出るので OK すると書き込みが行われる。
書き込みが終わったら NRST を押すと、プログラムが動き出す。
お疲れ様でした~