秋月LPC11U35ボードを動かす(2) プログラムを作成

投稿者: | 2021年06月04日

mbed-cliインストールまでの準備が完了した状態から、mbed OS 2用のプログラムを作成しています。

mbed new mbed-classic-program --mbedlib

mbed os 2のzipファイルダウンロードが試行されますが、困ったことに、かなり高確率で失敗します。失敗する場合は、コマンドを何度か試みてください。

最新版のzipファイル.rev-65be27845400.zipがダウンロードされてmbed os 2のコンパイル済の.oファイルに展開されれば成功です。しかし、またしても困ったことにこのままではコンパイルには失敗します。
https://os.mbed.com/users/mbed_official/code/mbed/から、以下のファイルをダウンロードして、mbed-classic-program/mbed/65be27845400/に配置してください。

  • mbed.h
  • drivers
  • hal
  • platform

さらに、mbed-classic-programの階層で以下のコマンドを使用して、mbed tool を取得します。

mbed deploy

すると、mbed-classic-program/.tempの中にpythonで書かれたmbedツールがダウンロードされます。

次に、mbed_settings.pyをテキストエディタで開いて

# GCC_ARM_PATH = (略)

となっている箇所を以下のようにして、GCCコンパイラのパスを入れます。

GCC_ARM_PATH = "C:/Program Files (x86)/GNU Tools ARM Embedded/9 2019-q4-major/bin"

(ディレクトリの区切り記号はバックスラッシュ”\”を使うと、動作に失敗するので、スラッシュ”/”を使う必要があります。)

mbed-classic-program/の階層で以下のコマンドを入力します。

mbed target LPC11U35_501
mbed toolchain GCC_ARM

これで、mbed-classic-program/.mbedの中にテキストで以下の内容が生成されます。

TOOLCHAIN=GCC_ARM
ROOT=.
TARGET=LPC11U35_501

ようやく、プログラムを書く準備が整いました。
これで、基本的な、所謂「Lチカ」のプログラムを書いてみます。
mbed-classic-program/の階層にテキストファイルmain.cppを作成し、以下のソースコードを書き込みます。

#include "mbed.h"

DigitalOut led(P0_7); // 秋月LPC11U35ボードに搭載されているLEDに対応した出力ポートを設定

int main(void)
{

    for(;;){ // 無限ループ
        led = 0; // 300msLEDを消灯
        wait_ms(300);
        led = 1; // 300msLEDを点灯
        wait_ms(100);
    }
    return 0;
}

mbed-classic-program/の階層でpowershell等を開いて以下のコマンドを入力します。

mbed compile

コンパイルが成功すると、mbed-classic-program/BUILD/LPC11U35_501/GCC_ARM/の中にbinファイルが生成されます。これを秋月LPC11U35ボードに書き込んで、LEDが点滅すれば成功です。

なお、出力ピンの設定をレジスタ直打ちしたい場合は、以下のようにします。

#include "mbed.h"

int main(void)
{
    // port0_7の初期設定
    LPC_IOCON->PIO0_7 = 0; // port0_7をGPIOに設定
    LPC_GPIO->DIR[0] |= (1<<7); // port0_7をGPIOの出力に設定

    for(;;){ // 無限ループ
        LPC_GPIO->W0[7] = 0; // port0_7をLowレベル
        wait_ms(300);
        LPC_GPIO->W0[7] = 1; // port0_7をhighレベル
        wait_ms(100);
    }
    return 0;
}

この設定で、port0_7はプッシュプル型の出力回路になりますので、そのままhigh, lowを切り替えてやればLEDが点灯・消灯できます。

状態確認・デバッグ等にUSBシリアルを使用すると便利なので、その機能を足してみます。

mbed-cliのガイダンスに従うと、以下のコマンドでUSBシリアルに対応したライブラリが取得できるはずですが、現在ではうまく機能していないのか、対応したUSBシリアルの名称が間違っているのか、ダウンロードできませんでした。

mbed add (ライブラリ名)

なお、筆者が作成した、USBライブラリ付のファイル一式は以下にアップしております。

https://github.com/dkfukuyama/Weight_strain_gauge/releases/tag/aki_lpc11u35_02

main.cppの例として以下のように入力します。

#include "mbed.h"

#include "USBSerial.h"

USBSerial  usb(0x1f00, 0x2012, 0x0001, false);

int main(void)
{

    LPC_IOCON->PIO0_7 = 0;
    LPC_GPIO->DIR[0] |= (1<<7);

    while(!usb.connected()); // USBにてPCと接続できるまで待つ
    
    // 適当に文字を出力
    usb.printf("-------------------------------------\r\n");
    usb.printf("SYSTEM START\r\n");
    usb.printf("-------------------------------------\r\n");

    // LED点滅ループ
    for(;;){
        LPC_GPIO->W0[7] = 0;
        wait_ms(300);
        LPC_GPIO->W0[7] = 1;
        wait_ms(100);
    }
    return 0;
}

これでコンパイルを行い、秋月LPC11U35ボードに書き込みます。

Teraterm等でUSBシリアルの出力を表示しながら、プログラムを動かすと、秋月LPC11U35ボードからのテキスト出力とともに、LED点滅が始まることが確認できます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA