teruノート

ROSでロボットとか。Ubuntuで困ったこととか。

中華STM32ボードをmbedオフライン環境で開発する

中華STMボード、Blue Pill、STM32duino…などと様々な呼び名があるようですが、とにかく安いSTM32ボードです。

Amazonで2個で1000円くらいです。Aliexpressなら1個$2を切ります。

https://wiki.stm32duino.com/images/thumb/1/19/STM32_Blue_Pill_top.jpg/700px-STM32_Blue_Pill_top.jpg

STM32マイコンは人気なので開発環境は多岐にわたります。紹介しきれないので割愛します…

個人的なオススメは、
mbedでプロジェクト作ってSW4STM32にエクスポートしてオフライン開発
です。

mbedライブラリを使うことですっきり書けます。ただオンラインIDEはたまにサーバーが死んでるのとデバッガ使えないので、SW4STM32を使うわけです。
mbedのアカウント作成やSW4STM32のインストールなどはほかに任せたいと思います。

中華STM32ボードをmbedオフライン環境で開発する 手順
1. mbedのオンラインコンパイラでプログラムをつくる
プラットフォームはNUCLEO-F103RBで、プログラム新規作成です。
2. SW4STM32にエクスポート
プログラムを右クリックでエクスポート、SW4STM32を指定します。
3. SW4STM32にインポート
File→ImportでExisting Projects into Workspaceを選びます。
f:id:ub2_memo:20190114003725p:plain
次の画面でSelect archive fileのところでエクスポートしたzipファイルを選択、下のFinishボタンでインポートできます。
f:id:ub2_memo:20190114004343p:plain
4. ビルドしてみてエラーが出たら修正
mbedのエクスポート機能は割と当てにならないので、ビルドしたらエラーだらけとかよくあります。 今回はこんな感じでリンカがエラー吐いてます。

undefined reference to `__wrap__free_r'  
...  
recipe for target 'BluePill_test-debug.elf' failed

Project→Properties→C/C++ Build→Settings→MCU G++ Linker→MiscellaneousにLinker flagsの設定があります。
-Wl,--wrap=main -Wl,--wrap=malloc_r -Wl,--wrap=free_r -Wl,--wrap=realloc_r -Wl,--wrap=calloc_r
こいつらが悪さしているので、こいつらだけ消します。 f:id:ub2_memo:20190114005151p:plain
5. 書き込み設定
書き込みにSTLinkV2つかうなら、Run configuration→Debugger→Generator options→Reset modeをSoftware system resetに変更しておきます。
シリアルブートローダーというか、ISPモードで書き込む場合はほかを参照してください。

以上で快適な中華STMボードの開発環境が整いました!

ROS Kineticインストール

Ubuntu 16.04にROS Kinetic Kameをインストールします。

ja/kinetic/Installation/Ubuntu - ROS Wiki
以下は公式Wikiの抜粋です。

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo apt-get update
sudo apt-get install ros-kinetic-desktop-full
sudo rosdep init
rosdep update
sudo apt-get install python-rosinstall

次にcatkin_wsを作成します。

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
source /opt/ros/kinetic/setup.bash
catkin_init_workspace
cd ..
catkin_make

~/.bashrcを編集します。

gedit ~/.bashrc

以下を追記します。

# ROS Kinetic
source /opt/ros/kinetic/setup.bash
source ~/catkin_ws/devel/setup.bash
alias cw='cd ~/catkin_ws'
alias cs='cd ~/catkin_ws/src'
alias cm='cd ~/catkin_ws && catkin_make'

Ubuntuセットアップ時にやること

Ubuntuセットアップ時にいつもやることをメモしておきます。
環境はUbuntu 16.04LTSです。

home以下のフォルダ名を英語にする

LANG=C xdg-user-dirs-gtk-update

必須パッケージのインストール

システム負荷インジケータ

sudo apt-get install indicator-multiload

ノートPCなら省電力パッケージTLP

sudo add-apt-repository ppa:linrunner/tlp
sudo apt-get update
sudo apt-get install tlp tlp-rdw

他にもterminatorなど必須パッケージをインストールします。