mapleIDE
leaflabs:maple IDE にSTBee , STBeeMini , STM32VL-Discovery 基板を追加する。
maple IDEは、leaflabs発売ARM基板用のArduino風統合開発環境です。
- (1)xshigeさん直々に0.0.11対応版を作っていただきました。こちらです。
- 置き場はこちらです。
- (2)senshuさんが作成されたavrdude_fake(機能強化版)はこちらからDLしてください。
- (3) maple IDEを使用するかわりに maple IDEに含まれているlibmapleという便利なライブラリを使ってコマンドライン(Linux or Windows)上からビルド&ランすることも可能です。
- 以下のリンク先をお読みください。
- libmapleを使いこなせ!! --- libmaple に、CQ-STARM基板とSTM8S-Discovery基板も追加してみる。
古い記事
leaflabs: maple IDE 0.0.9 の改造
- maple基板に最も近そうな(?)cq-starmを追加してみるテスト。
改造の要点
- 好きな基板(今のところSTM32限定)を追加する。
- uploaderをdfu-util以外にして試してみる。
- javaのソースから見て、dfu-utilかavrdudeしか受け付けないようだ。(そりゃ、呼び出しコマンドラインの生成手順がハードコーディングだからしかたないね。)
- uploaderは仮想COMデバイスか、リアルRS232C COMデバイスを相手にuploadする仕組みにする。
- bootloaderもそれに準ずるようにする。
- そうしないとUSBを積んでないARM (LPC1114) に対応できないのと、
- とりあえずシリアルを生かしておけば、USB bootloaderを書き込む前のデバイス (例えば LPC2388のシリアルブートモードを利用してブートとか、STM32の緊急時シリアルブートでFirmを書き込むとか)に対応できるというメリットがある。
その1:基板名の追加
- <インストール先>/maple-ide-0.0.9/hardware/leaflabs/boards.txt の最後あたりに追記する。
############################################################## cqstarm.name=CQ-STARM to FLASH cqstarm.upload.file_type=bin cqstarm.upload.maximum_size=108000 cqstarm.upload.ram.maximum_size=17000 cqstarm.upload.flash.maximum_size=108000 cqstarm.upload.usbID=1EAF:0003 cqstarm.upload.altID=1 cqstarm.upload.uploader=avrdude cqstarm.upload.auto_reset=true cqstarm.upload.protocol=stk500 cqstarm.upload.speed=57600 cqstarm.build.board=cq-starm cqstarm.build.mcu=STM32F103RB cqstarm.build.family=cortex-m3 cqstarm.build.f_cpu=72000000L cqstarm.build.core=maple cqstarm.build.vect=VECT_TAB_FLASH cqstarm.build.linker=maple/flash.ld cqstarm.build.using=armcompiler
- RAM上にuploadする必要性ってあるのかな?
- H8じゃあるまいし(FLASH 100回でデバイスが寿命とか)
- RAM上にcodeを置くと、せっかくの(20k〜64K)SRAMがデータ領域として使えなくなるからARMを使う意味がない。
その2:PIN_MAPの追記
- <インストール先>/maple-ide-0.0.9/hardware/leaflabs/cores/maple/boards.h
- 385行目当たりの #else 手前に挿入する。
- 内容は、とりあえずmapleのまんま。
#elif defined(BOARD_cqstarm) #define CYCLES_PER_MICROSECOND 72 #define SYSTICK_RELOAD_VAL 71999 /* takes a cycle to reload */ #define BOARD_BUTTON_PIN 38 #define BOARD_LED_PIN 13 static __attribute__ ((unused)) PinMapping PIN_MAP[NR_GPIO_PINS] = { /* D0/PA3 */ {GPIOA_BASE, 3, ADC3, TIMER2_CH4_CCR, EXTI_CONFIG_PORTA, TIMER2, 4}, /* D1/PA2 */ {GPIOA_BASE, 2, ADC2, TIMER2_CH3_CCR, EXTI_CONFIG_PORTA, TIMER2, 3}, /* D2/PA0 */ {GPIOA_BASE, 0, ADC0, TIMER2_CH1_CCR, EXTI_CONFIG_PORTA, TIMER2, 1}, /* D3/PA1 */ {GPIOA_BASE, 1, ADC1, TIMER2_CH2_CCR, EXTI_CONFIG_PORTA, TIMER2, 2}, /* D4/PB5 */ {GPIOB_BASE, 5, ADC_INVALID, 0, EXTI_CONFIG_PORTB, TIMER_INVALID, TIMER_INVALID}, /* D5/PB6 */ {GPIOB_BASE, 6, ADC_INVALID, TIMER4_CH1_CCR, EXTI_CONFIG_PORTB, TIMER4, 1}, /* D6/PA8 */ {GPIOA_BASE, 8, ADC_INVALID, TIMER1_CH1_CCR, EXTI_CONFIG_PORTA, TIMER1, 1}, /* D7/PA9 */ {GPIOA_BASE, 9, ADC_INVALID, TIMER1_CH2_CCR, EXTI_CONFIG_PORTA, TIMER1, 2}, /* D8/PA10 */ {GPIOA_BASE, 10, ADC_INVALID, TIMER1_CH3_CCR, EXTI_CONFIG_PORTA, TIMER1, 3}, /* D9/PB7 */ {GPIOB_BASE, 7, ADC_INVALID, TIMER4_CH2_CCR, EXTI_CONFIG_PORTB, TIMER4, 2}, /* D10/PA4 */ {GPIOA_BASE, 4, ADC4, 0, EXTI_CONFIG_PORTA, TIMER_INVALID, TIMER_INVALID}, /* D11/PA7 */ {GPIOA_BASE, 7, ADC7, TIMER3_CH2_CCR, EXTI_CONFIG_PORTA, TIMER3, 2}, /* D12/PA6 */ {GPIOA_BASE, 6, ADC6, TIMER3_CH1_CCR, EXTI_CONFIG_PORTA, TIMER3, 1}, /* D13/PA5 */ {GPIOA_BASE, 5, ADC5, 0, EXTI_CONFIG_PORTA, TIMER_INVALID, TIMER_INVALID}, /* D14/PB8 */ {GPIOB_BASE, 8, ADC_INVALID, TIMER4_CH3_CCR, EXTI_CONFIG_PORTB, TIMER4, 3}, /* Little header */ /* D15/PC0 */ {GPIOC_BASE, 0, ADC10, 0, EXTI_CONFIG_PORTC, TIMER_INVALID, TIMER_INVALID}, /* D16/PC1 */ {GPIOC_BASE, 1, ADC11, 0, EXTI_CONFIG_PORTC, TIMER_INVALID, TIMER_INVALID}, /* D17/PC2 */ {GPIOC_BASE, 2, ADC12, 0, EXTI_CONFIG_PORTC, TIMER_INVALID, TIMER_INVALID}, /* D18/PC3 */ {GPIOC_BASE, 3, ADC13, 0, EXTI_CONFIG_PORTC, TIMER_INVALID, TIMER_INVALID}, /* D19/PC4 */ {GPIOC_BASE, 4, ADC14, 0, EXTI_CONFIG_PORTC, TIMER_INVALID, TIMER_INVALID}, /* D20/PC5 */ {GPIOC_BASE, 5, ADC15, 0, EXTI_CONFIG_PORTC, TIMER_INVALID, TIMER_INVALID}, /* External header */ /* D21/PC13 */ {GPIOC_BASE, 13, ADC_INVALID, 0, EXTI_CONFIG_PORTC, TIMER_INVALID, TIMER_INVALID}, /* D22/PC14 */ {GPIOC_BASE, 14, ADC_INVALID, 0, EXTI_CONFIG_PORTC, TIMER_INVALID, TIMER_INVALID}, /* D23/PC15 */ {GPIOC_BASE, 15, ADC_INVALID, 0, EXTI_CONFIG_PORTC, TIMER_INVALID, TIMER_INVALID}, /* D24/PB9 */ {GPIOB_BASE, 9, ADC_INVALID, TIMER4_CH4_CCR, EXTI_CONFIG_PORTB, TIMER_INVALID, TIMER_INVALID}, /* D25/PD2 */ {GPIOD_BASE, 2, ADC_INVALID, 0, EXTI_CONFIG_PORTD, TIMER_INVALID, TIMER_INVALID}, /* D26/PC10 */ {GPIOC_BASE, 10, ADC_INVALID, 0, EXTI_CONFIG_PORTC, TIMER_INVALID, TIMER_INVALID}, /* D27/PB0 */ {GPIOB_BASE, 0, ADC8, TIMER3_CH3_CCR, EXTI_CONFIG_PORTB, TIMER3, 3}, /* D28/PB1 */ {GPIOB_BASE, 1, ADC9, TIMER3_CH4_CCR, EXTI_CONFIG_PORTB, TIMER3, 4}, /* D29/PB10 */ {GPIOB_BASE, 10, ADC_INVALID, 0, EXTI_CONFIG_PORTB, TIMER_INVALID, TIMER_INVALID}, /* D30/PB11 */ {GPIOB_BASE, 11, ADC_INVALID, 0, EXTI_CONFIG_PORTB, TIMER_INVALID, TIMER_INVALID}, /* D31/PB12 */ {GPIOB_BASE, 12, ADC_INVALID, 0, EXTI_CONFIG_PORTB, TIMER_INVALID, TIMER_INVALID}, /* D32/PB13 */ {GPIOB_BASE, 13, ADC_INVALID, 0, EXTI_CONFIG_PORTB, TIMER_INVALID, TIMER_INVALID}, /* D33/PB14 */ {GPIOB_BASE, 14, ADC_INVALID, 0, EXTI_CONFIG_PORTB, TIMER_INVALID, TIMER_INVALID}, /* D34/PB15 */ {GPIOB_BASE, 15, ADC_INVALID, 0, EXTI_CONFIG_PORTB, TIMER_INVALID, TIMER_INVALID}, /* D35/PC6 */ {GPIOC_BASE, 6, ADC_INVALID, 0, EXTI_CONFIG_PORTC, TIMER_INVALID, TIMER_INVALID}, /* D36/PC7 */ {GPIOC_BASE, 7, ADC_INVALID, 0, EXTI_CONFIG_PORTC, TIMER_INVALID, TIMER_INVALID}, /* D37/PC8 */ {GPIOC_BASE, 8, ADC_INVALID, 0, EXTI_CONFIG_PORTC, TIMER_INVALID, TIMER_INVALID}, /* PC9 (BUT) */ {GPIOC_BASE, 9, ADC_INVALID, 0, EXTI_CONFIG_PORTC, TIMER_INVALID, TIMER_INVALID} }; #define BOARD_INIT do { \ } while(0)
その3:uploaderの追加
- <インストール先>/maple-ide-0.0.9/hardware/tools/avr/bin/
- というディレクトリを掘る。(何故avrなのかは突っ込まない)
- そこに自作の avrdude.exe を置く。
- 内容は、cq-starmにupload出来るなら、どんなプログラムでもおK。
- 現在は未実装なので、とりあえずこんなやつを・・・
#include <stdio.h> int main(int argc,char **argv) { int i; for(i=0;i<argc;i++) { printf("%2d:>%s<\n",i,argv[i]); } return 0; }
blinkのサンプルをuploadしてみる。
- 結果:
0:>D:\INSTALL\maple-ide-0.0.9\hardware\tools\avr\bin\avrdude< 1:>-CD:\INSTALL\maple-ide-0.0.9\hardware/tools/avr/etc/avrdude.conf< 2:>-q< 3:>-q< 4:>-pSTM32F103RB< 5:>-cstk500v1< 6:>-P\\.\COM1< 7:>-b57600< 8:>-D< 9:>-Uflash:w:C:\DOCUME~1\USERNAME\LOCALS~1\Temp\build6274997941406310107.tmp\Blink.cpp.hex:i<
- まあこんな感じでエアーmaple完了。
CQ-STARMのDFUをarmbootに置き換える
- まず、苺からdfuwをDLする。
- 次に、以下のCQ-STARM用のarmbootファームウェアを入手。
DOWNLOAD: cq-starm用ファーム
- ReadMe.txtに従って操作。
- 自己責任でお願いします。
- armbootやcqstarm用のファームウェアのソースはこちら
- 別の記事:ARMでArduino --- maple IDEでビルドしたLED Blinkを STM8S-Discovery上で実行してみた。