DIP で唯一実用になる(?) ARM Cortex-M0 マイコンです。SRAM が 4KB しかないのが心許ないですが、秋月で現在180円と、性能の割に激安です。
32bit ARM なので、32bit 演算が多少出てくるような場合は AVR より圧倒的に良い選択そうです。(FPU はありませんが)。また mbed は Arduino よりもライブラリデザインがマトモという印象があります。
platformio でコンパイルして、シリアルアダプタ経由で ISP 書きこみするというのを試しました。フレームワーク(ライブラリ)としては mbed を使っていますが、mbed の開発環境は使っていません。
platformio での開発
platformio.ini を以下にようにして
[env:lpc] platform = nxplpc framework = mbed board = lpc1114fn28 build_flags = -std=c++1y
main.cpp を以下にようにしました。
#include "mbed.h"
DigitalOut led(LED1);
int main() {
while(1) {
led = 1;
wait(0.5);
led = 0;
wait(0.5);
}
return 0;
}
この状態で platformio run をすると .pioenvs/lpc/firmware.bin にコンパイル済みバイナリができます。
platformio は mbed の開発環境を前提としているようで、upload では単に upload_port 先のディレクトリにコピーをしようとします。今回はシリアル経由で書きこむので、platformio 経由での upload は使いませんでした。
ピンアサイン
https://developer.mbed.org/platforms/LPC1114FN28/ このページを見るのが一番良いようです。
上記コード中で指定している LED1 は左下の dp14 になります。
書きこみ
書きこみツールは lpc21isp を使うのが一番簡単なようです。展開して make するだけで OS X でも普通に動きました。
https://sourceforge.net/projects/lpc21isp/files/lpc21isp/ からダウンロードできます。
以下にような感じで書きこめました。115200 は書きこみ時のボーレート、12000 はMCUの動作周波数をkHz単位で指定するようです。内蔵RCは12MHzなので12Mhzを指定しています。が、mbed 実行時は逓倍して48MHzで動いているようなので、どっちを指定するのかよくわかりません。
lpc21isp -control -bin .pioenvs/lpc/firmware.bin /dev/tty.usbserial-A50285BI 115200 12000
ここでは -control を指定しています
-control for controlling RS232 lines for easier booting (Reset = DTR, EnableBootLoader = RTS)
となっており、この通りにシリアル変換の DTR を nR (RESET) 、RTS を dp24 に接続することで、自動リセットしてISPモードへ移行して書きこめます。冒頭の写真の通りの配線です。
追記:シリアル通信を行う
上記の方法だと、普通にシリアル通信を行おうとするとRTS/DTRまわりの挙動によってリセットが発生してISPモードに入ってしまうことがあります。なので普通に screen などでシリアル出力を見ることができません。これは RESET の配線を切れば問題ないのですが面倒くさいところです。
実はこれもlpc21ispを使って以下にようにすると、配線を変えずにシリアルモニタができるようです。
lpc21isp -termonly -control /dev/tty.usbserial-A50285BI 115200 12000
コード例
#include "mbed.h"
Serial serial(USBTX, USBRX);
DigitalOut led(LED1);
int main() {
serial.baud(115200);
while(1) {
serial.printf("Hello, World!\n");
led = 1;
wait(0.5);
led = 0;
wait(0.5);
}
return 0;
}
ref.