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上で実行してみた。




