2018年
1月
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

setup diary

2007|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|06|08|11|
2015|01|02|03|04|05|06|07|08|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|

2018-01-09 AVRからstm32へ

_ Linuxのarduinoでstm32

マイコンとしては,AVRの90s2313から始めて, tiny2313, tiny261, tiny861, mega8といくつかのAVRを使った後,半田付けが面倒になってarduino UNOやnanoの互換機を主に使うようになった.arduinoだと,AVRの性能のすべてを引き出すのが難しいが,いろいろなlibraryがあるので,短く手軽に書けるのは良いことだと思う.また,LANと通信したいときには,wifiを簡単に使えるESP8266を使うようになった.

今後はどのマイコンを使っていこうかと考えていたのだが,stm32の人気が出てきたので,私も少し使ってみた.stm32は,安価であるにも関わらず,32bitでsramやflashも比較的大きく,今後もより発展していく可能性を持っている.

今回,STM32F103C8T6を搭載したBlue Pillと呼ばれるボードを使ってみた.このボードは安いのだが,R10のチップ抵抗に誤った抵抗値の部品が使われており,これを訂正する必要がある.本来は1.5kであるべきところに,10kが載っていたので,2.2kを並列に追加して,1.8kにしておいた.

arduino UNOとかarduino nanoは,USBをserialに変換してからマイコンに接続されている.一方,stm32は,直接USBと接続されており,そのままではUSBを認識しないので,まずはbootloaderをインストールする必要がある.

bootloaderは,https://github.com/rogerclarkmelbourne/STM32duino-bootloader/tree/master/binariesからdownloadするが,今回のボードはLEDがPC13につながっているので,generic_boot20_pc13.binを選択する.また,書き込みするためのツールなどは,https://github.com/rogerclarkmelbourne/Arduino_STM32に含まれているので,一括でdownloadしておく. ここでは,手持ちのUSB-serialを使ってbootloaderをインストールすることにした.まず,ボード上のjumperを,上側を1,下側を0にする.そして,serialのGNDと3.3Vを接続し,RXDはA9と,TXDはA10と接続する.tools/linux/stm32flashにあるstm32flashを使って,

./stm32flash -w generic_boot20_pc13.bin -v /dev/ttyUSB0

として,書き込む.書き込み終わったら,jumperを両方共に0に戻しておく.それから,udevの設定をするために,tools/linuxの中のinstall.shを実行する.これで,PCからUSBを通して認識出来るようになった.

次にarduinoの設定だが,1.6.9以降を使って,board managerからarduino Dueを探して,インストールする.そして、hardwareの下にArduino_STM32 というフォルダを作って,先程downloadしたファイルをすべて置く.boardとしては,STM32F103C8を選べば良い.これで,arduinoからstm32が使えるようになるはずなのだが,resetがうまく働かないことが分かった.そこで,書き込む時には,3.3VとPC14を繋いでからresetしてperpetual bootloader modeしてから書き込むか,うまいタイミングでresetを押す必要がある.少し面倒だったが,stm32が使えるようになった.