2016年11月09日

DSP処理の前設定

今回はSTM32でのDSP処理の前設定について紹介します。

環境はこれまで同様、
・STM32F303K8
 +SW4STM32(System Workbench for STM32)
 +STM32CubeMX(F3_1.6.0)
です。


STMのサイトからSTM32Cube_FW_F3_V1.6.0をダウンロードすると
いくつかサンプルコードが入っています。

その中にM4コア内臓のDSP処理を使用したFFTのサンプルがあります。
STM32Cube_FW_F3_V1.6.0\Drivers\CMSIS\DSP_Lib\Examples\arm_fft_bin_example\ARM


・FFT処理するためのサンプルデータ
 arm_fft_bin_data.c
・FFT処理のサンプルコード
 arm_fft_bin_example_f32.c


上記のコードをそのままCubeMXで生成したコード群に
そのまま組込んでもコンパイルが通らないため、
対処方法をご紹介します。

@
#include "stm32f3xx_hal.h"の次に
#define ARM_MATH_CM4
を追加。
F3のM4コアの使用を定義。
この定義を忘れるとコアの種類が分からない旨のコンパイルエラーが出る。
#error "Define according the used Cortex core ARM_MATH_CM7,
ARM_MATH_CM4, ARM_MATH_CM3, ARM_MATH_CM0PLUS or ARM_MATH_CM0"

A
#include "arm_math.h"
#include "arm_const_structs.h"
をインクルード。
コアの定義の後に上記のインクルードをする。


B
STM32Cube_FW_F3_V1.6.0\Drivers\CMSIS\Lib\ARM
内の
arm_cortexM4lf_math.lib
STM32Cube_FW_F3_V1.6.0\Drivers\CMSIS\Lib\GCC
内の
libarm_cortexM4lf_math.a
をプロジェクトフォルダ直下へ配置する。

 arm_cortexM4b_math.lib
 arm_cortexM4bf_math.lib
 arm_cortexM4l_math.lib
 arm_cortexM4lf_math.lib
から必要に応じて選択。
little endian, fpu, m4の場合で
arm_cortexM4lf_math.lib


C
プロジェクトのプロパティーで「C/C++Build」の設定内の
Linker、LibrariesでDSP処理のライブラリを追加する。

Librariesに下記を追加。
arm_cortexM4lf_math
m

Library search pathにワークスペース下のプロジェクトフォルダを選択。
自動的に下記になる。
"${workspace_loc:/${ProjName}}"

この設定を忘れると
undefined reference to `arm_cfft_f32'
cannot find -larm_cortexM4lf_math.lib
なエラーが出る

dsp.png


以上でコンパイルが通りました。

DSP処理のFFT関数の使い方などは後ほどご紹介します。
ラベル:HAL STM32 実験 部品
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | ナレッジ | このブログの読者になる | 更新情報をチェックする

2015年09月22日

dsPIC メモリ配置に関して

今回はdsPICマイコンでコンパイルする際に
遭遇したエラーの回避方法についてご紹介します。


dsPICマイコンで使用するコンパイラでC30やXC16などありますが、
大量の変数や連続した変数を使用する場合に下記のようなエラーがでることがあります。


Link Error: Could not allocate section~
Link Error: Could not allocate data memory

メモリは余裕があるはずなのになぜコンパイルできない?
ということがたまにあります。


このような場合に大量の変数や連続した変数に
下記のようなおまじないを入れるとうまくコンパイルできます。

__attribute__((far))



たとえば、
struct path p[205]__attribute__((far));
int a[200]__attribute__((far));
という感じです。



勝手にコンパイラがいいように配置してくれれば良いだけと思ってしまいます。
大量の変数を扱う際にはぜひこのおまじないを使ってみてください。




posted by Crescent at 00:00| Comment(0) | TrackBack(0) | ナレッジ | このブログの読者になる | 更新情報をチェックする

2015年09月14日

Tera termのちょっとした裏技

プロジェクションボールのクラウドファンディングに向けた準備をちょこちょこ進めています。

今回は組込のデバッグ等で欠かせない
Tera termのちょっとした裏技をご紹介します。


こちらのサイトでも紹介されていますが、
Tera termの表示を16進表示へ切り換える方法です。

Tera termのteraterm.iniファイルを下記のように書き換えます。

; Display all characters (debug mode)
Debug=on

この状態でTera termを起動させて、
画面上で「shift」+「Esc」を3回押すと16進数表示に切り替わります。
何度か繰り返し押すと順繰りにモードが切り替わります。


startdevice.png
上の写真はWiced smartでpuartプログラムを
koshianに書き込んであるBLEデバイスと会話させている最中の
koshianからの返答を表示させた例です。

デバイス間のやり取りのコマンドを確認する際に16進表示が非常に役に立ちます。

Tera termをご使用の方はぜひ、お試しを!


posted by Crescent at 00:00| Comment(0) | TrackBack(0) | ナレッジ | このブログの読者になる | 更新情報をチェックする

2015年06月11日

ネジ穴加工必須アイテム

今回はあると便利な道具をご紹介します。


最近はFablabやワークスペース等でレーザーカッターや
3Dプリンタに触れる機会が多くなったと思います。


レーザーカッターや3Dプリンタから作られたものを連結したり、
別の部品とつなげたりする際にネジ穴を作成してネジ止めというのが
よくあると思います。


その際に役立つのが「タップ」です。


tap1.jpg
簡単に言えばネジ穴を作成する道具です。


M3のネジの場合、下穴として2.5mmくらいの穴を作成します。

その後、手でM3用タップを使ってネジ穴を作成します。

tap2.jpg

工作レベルだとタップを使わずに、
ネジを無理に入れてネジ穴を作ってしまうということもあると思いますが、
タップを使ってネジ穴を作成するとネジ頭をバカにせずに
簡単に綺麗なネジ穴ができます。


1000円位でホームセンターで入手できますので、
レーザーカッターや3Dプリンタでネジ穴を作成する機会が多い方は
ぜひ道具箱に!


次世代なモノづくりでもタップは十分に活躍する道具です笑


ラベル:常備必須部品
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | ナレッジ | このブログの読者になる | 更新情報をチェックする

2015年04月25日

LogicoolのUnifyingについて

今回はMakersにとって便利なデバイスをご紹介します。


みなさんはキーボードやマウスはどのメーカをご使用でしょうか?


もし、Windowsだけでなく、rasberryPI、Linuxなども使うって方にお勧めなのが
LogicoolのUnifying対応のキーボードとマウスです。



Unifyingに対応したキーボードやマウスを使用すると、
小型のUSBレシーバー1個でマウスやキーボード、
テンキーなど最大6つのワイヤレス機器を接続できます。


これだけなら、bluetoothと同じと思われるかもしれませんが、
Unifyingの何がすごいって、
WindowsのUnifyingの登録ソフトでワイヤレス機器を一度、登録すると、
その設定がWindowsに限らず、rasberryPIやLinuxなどでも
引き継がれるということです。


Windows上で一度、設定すれば、UnifyingのUSBモジュールを
WindowsマシンからLinuxマシンに差し替えるだけで
そのまま同じキーボードとマウスを使用可能です。


特にLinuxマシンではUnifyingのUSBモジュールが
標準USBマウスやUSBキーボードとして認識されるため、
ワイヤレスデバイスということを意識せずにドライバを自動検出して
使用可能となります。




これが実現できているのは、
WindowsのUnifyingの登録ソフトで
UnifyingのUSBモジュール内に登録デバイスを
ROMデータとして登録し保持しているからだと思われます。




bluetoothではデバイス認証が面倒だったり、
接続が不安定だったり、
レスポンスが悪い、
ドライバが見つからないといった問題が生じますが、
LogicoolのUnifying対応デバイスならそんな問題生じません。





なかなか画期的だと思いました。
ぜひ、マルチOSユーザーの方は使ってみてください。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | ナレッジ | このブログの読者になる | 更新情報をチェックする