スキップしてメイン コンテンツに移動

投稿

2月, 2021の投稿を表示しています

Keil-liteでBluePill用CMSIS-DAPをビルド

STM32f102/f103向けのCMSIS-DAPには公開されているものがいくつかあるのですが、ビルドサイズはSWD_REMAPを除き32kbyte以下なので、Keil-liteでビルドできないかと色々やっていると、 こちらのレポジトリ の内、CMSIS-DAP/Firmware/STM32/CMSIS_DAP_USB.uvprojというプロジェクトがあり、コンパイルできたのですが、動作確認はできませんでした。しかし、プロジェクトをよく見ると、以前Keil-liteでCMSIS-DAPをビルドしようとしたときにはあまり詳しくは追っていなかったのですが、USB_CM3.libというライブラリをビルドに含んでいるとエラーになっていたようでした。そこで、今一度ビルドの通った前述のプロジェクトを見ると、USB_CM3.libはビルドに含まれておらず、ソースファイルを直接ビルドするようになっていたので、これを参考にしたところ、Keil-liteでBluePill用の(追記:SWD_REMAPを除き)CMSIS-DAPのビルドができたので、備忘録として本稿をあげてみました。 以下、手順です。 1. keil-liteのインストール まず、keil-liteをインストールします。keil-liteの初期設定については本稿では失礼ながら割愛します。 2. cmsis-5.3.0のインストール keil-liteは2021/02現時点ではversion 5.33なのですがpack installerで cmsis-5.3.0をインストールしても、5.3.0へのパスが見つかりません。ですので、プロジェクトから明示的にパスを指定できるように、以下のようにしてcmsis 5.3.0を手動でインストールしてみました。 cd /mnt/c/Keil_5/ARM wget https://github.com/ARM-software/CMSIS_5/archive/5.3.0.zip unzip 5.3.0.zip 3. ソースコードの取得とusb関連のソースのコピー 例えば以下のようにして、ソースを取得し、usb関連のソースをコピーします。参考までにusb関連ソースはapacheライセンスの様です。 mkdir -p /mnt/c/Users/YourID/

Bluepill用のCMSIS-DAPでCPUIDをプローブのシリアル番号として利用

以前に紹介したBluePill用のファームウェアでは、シリアル番号は固定になっているため、複数のターゲットで作業している場合、一々接続をきりかえなければなりませんし、同時に接続しながら作業することもできません。そこで、CPUID(STM32F1x 24byte)をプローブのシリアル番号として個別に割当てることができないかとやってみたところ、とりあえず動いているようなので、本稿を上げてみました。 なお、参考にしたのは こちらの投稿 です。記載されている要領でほぼ動いていますので、大いに感謝しています。Thanks!! 早速以下に作業要点を記述します。作業環境はWindows10/WSL2 Debian10/Busterです。 まず、もとになるBluePill向けのCMSIS-DAPプルーブ化のプロジェクトをgit cloneします。 cd /mnt/c/Users/YourID/Documents git clone https://github.com/RadioOperator/STM32F103C8T6_CMSIS-DAP_SWO これにくわえて、CMSIS-5.3.0をKeil_5に追加しておきます。二段目のツールバーの右端に、pack installerがあるのでクリックします。 pack instllerが呼び出され、しばらくしてからcmsis 5.3.0 installをクリックしインストールします。 cmsis-5.3.0のインストールは以上です。 つづいてプロジェクトをひらき、(プロジェクトを右クリックして)Options for target 'STM32F103-BLUEPILL'を開き"C/C++"タブをクリックします。中ほどに"Include Paths"があるので"..."をクリックして、先ほどインストールしたCMSIS-5.3.0をインクルードするようにします。 C:\Keil_v5\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Include C:\Keil_v5\ARM\PACK\ARM\CMSIS\5.3.0\CMSIS\Driver\Include 次に、ファイルをリネームしつつコピーしします。 cd /mnt/

OpenOCD for Windows 64 bitをWSL2上でbashスクリプトを使いBuild

デバッグプルーブとして、stlink、cmsis-dapをつかっているのですが、ft232rもデバッグプルーブとして使いたいなと思ったところ、(windowsではlinux gpio bitbangだけはつかえませんが)Windows64ビット向けのOpenOCDのバイナリー配布で、すべてのプローブをサポートしているものがなかったので、WSL2/Debian 10 上でビルドしてみました。とりあえず動いてはいるようなので、ビルドスクリプトを、備忘録代わりにアップしてみました。 ちなみに、libusbは新しいバージョンではcmsis-dapが動かず、動いたバージョンは1.0.21でした。(ここがわからず苦労しました...) スクリプトの実行は、例えばスクリプトをbuild-ocd-for-win.shとした場合、 sh ではなくbashで実行してください。また、スクリプト実行するまえに、以下のようにしておいてください。(capstone disassembler(linux用にはlibgpiodも含む)をビルドするのに、debianのソースパッケージを使っているためです。) sudo apt-get build-dep capstone sudo apt-get build-dep libgpiod なお、クロスコンパイル環境は以下のコマンドです。 sudo apt-get install mingw-w64 これら以外のビルド環境を整える場合、以下のようにしました。(ぬけがあるかもしれません。) sudo apt-get install build-essential debhelper flex make cmake binutils gcc automake autoconf libtool unzip wget git ビルドスクリプトは、以下の通りです。 (追記2021/02/14:linux native buildに対応させました。) (追記2021/02/15:openocd for esp32 を別途ビルド・別Destinationへインストールするようにしました。) (追記2021/02/21:OpenOCDコンフィグ時の設定を一部修正しました。 #!/bin/bash HOST_TRIPLET=x86_64-w64-m

WSL2から起動したOpenOCDにてUSBシリアル/CMSIS-DAP VCOM経由でSWOをWSL1端末に出力

itmdumpをつかうと、usbシリアル経由で別端末のlinux機上では、SWOの出力を得ることができるのですが、Window環境だけで完結できないか検討したところ、WSL1ではシリアル出力を得ることができるので、WSL1をubuntu、WSL2をDebianとしてセットアップし、WSL1端末でitmdumpを使用したところ正常にSWO出力を得ることができたので備忘録として本稿をUPしてみました。 まず、前回の" OpenOCDにてSWOをUSBシリアル経由でlinux端末に出力 "のようにターゲットのプログラムをおこないます。続いて、SWOの出力を得るために、今回は、WindowsにてUSBシリアルまたはCMSIS-DAPのRXを接続します。今回はFT232RLとCMSIS-DAPのVCOMにて動作確認しました。接続は、FT232RLのRXまたはCMSIS-DAPのRX(PA3)をターゲットのPB3に、GNDをターゲットのGNDに接続します。 次にitmdumpですが、cargoではなく、openocdのソースコードに入っている itmdump.cを gccで以下の様にWSL2上で直接コンパイルします。 cd /usr/src/openocd gcc contrib/itmdump.c -o itmdump コンパイルはこれだけです。つづいて、wsl2でコンパイルしたitmdumpを/mnt/c/Temp以下にコピーします。コピーがすんだら、今度はwsl1の/usr/local/binにitmdumpをコピーします。 #wsl2にて cp /usr/src/openocd/itmdump /mnt/c/Temp #wsl1にて sudo cp /mnt/c/Temp/itmdump /usr/local/bin 次はwsl1にて、usbシリアル/VCOMの設定をおこないます。usbシリアル/VCOMがWindows上で例えばCOM8として認識されている場合、以下の様にします。(itmdumpはcargo install itmの物とはオプションが異なりますので、注意してください。) sudo chmod 666 /dev/ttyS8 stty -F /dev/ttyS8 2000000 cs8 -cstopb -parenb i