マイコン

マイコンでTensorFlow!? (4)

今回はいよいよTensorFlow Liteのサンプルコードをビルドしてボードに書き込んでみます。 サンプルコードの内容 SparkFun Edgeボードの2つのマイクに入力される音声から「Yes」と「No」という単語を検出します。これには畳み込みニューラルネットワークによ…

マイコンでTensorFlow!? (3)

今回はサンプルコードのビルドとボードへの書き込みをやってみます。以下の2つを試します。 Edge Test:GPIO、UART、ADC、I2Cなどのハードウェア機能のデモ。 Makefile Project Template : 自分でプロジェクトを作るためのテンプレート。 (1) Edge Test 4つ…

マイコンでTensorFlow!? (2)

今回は開発環境をセットアップしていきます。前回説明した通り、SparkFun EdgeボードはまだGUIなIDEが用意されていないので、コマンドラインベースの開発環境を構築する必要があります。 (1) Bash コマンドラインツール、いわゆるシェルです。MacやLinuxを使…

マイコンでTensorFlow!? (1)

ワンチップマイコンでTensorFlowが動くという驚きのTensorFlow Lite対応ボードを入手しました。人柱レポートしていきます。 TensorFlow Liteとは ごぞんじGoogleが世に出した機械学習フレームワークTensorFlowの軽量版です。強力なクラウドサーバやPCではな…

Arduinoのハードウェアシリアルのボーレート誤差

AVR 5V(16MHz)系 (Uno, Mega, Leonardo, Micro, Pro Mini 5V など) ボーレート設定 実際のボーレート 誤差[%] 9600 9615.4 0.16 19200 19230.8 0.16 38400 38461.5 0.16 57600 58823.5 2.12 115200 117647.1 2.12 230400 222222.2 3.55 基本的には倍速動作で…

STM32のRTCの落とし穴

STM32のRTCを使ってみてハマった落とし穴などについて書く。 環境は、STM32F767ZI (Nucleo-F767ZI) + HALドライバ + CubeMX + IAR EWARM 以下では単にSTM32と書くが、STM32F767ZIでしか試していない。 やや不可解な内容も含むので誤りがあればご指摘ください…

独断と偏見で選ぶ五大Arduino系ボード

いろいろ種類が増えすぎたArduino系マイコンボード。僕がよく使うものを中心にチョイス。(かなり偏ったチョイスです。) Arduino UNO : 最初の1台に。リファレンス用に。 GR-SAKURA : 実戦むき。UNOサイズの高性能ボード。 Arduino Pro Mini : ちっちゃいも…

mbedのプロジェクトにmbed-srcをインポートする

mbedのwebコンパイラでプロジェクトを作成すると、mbedライブラリ(歯車のアイコン)はドキュメントのみでソースが含まれない。 ソースをインポートするには以下のようにする。 mbed-srcから import into Compiler をクリックし、Target Pathでインポート先の…

GR-CITRUS + WA-MIKANをC++で使う

Rubyなにそれおいしいのシリーズ(笑) GR-CITRUS+WA-MIKANは、Rubyの環境(Rubic)ではGR-CITRUSからWA-MIKANのWiFi機能を使うクラスが用意されていますが、ArduinoライクなC++環境であるIDE for GRではクラスが用意されていません。かたくなにC++でGR-CITRUS+W…

STM32のリセットフラグ

ウォッチドッグによってリセットしたことは下記のコードでチェックできる。 // ウォッチドッグによってリセットしたか? if(READ_BIT(RCC->CSR, RCC_CSR_IWDGRSTF)) { // フラグのクリア CLEAR_BIT(RCC->CSR, RCC_CSR_IWDGRSTF); } 同様に下記のようなフラグ…

Arduino UNO のタイマ資源

毎度気になるArduino系やmbed系マイコンボードでのタイマ資源の問題。 Arduino UNOでは、下記のようになっているらしい。競合に要注意。 Timer0 8bit delay(), millis(), micros()などの時間管理5,6番ピンのPWM Timer1 16bit ServoライブラリTimer1ライブラ…

STM32のバックアップレジスタ

バックアップレジスタとは? STM32マイコンには主電源(Vdd)を落としてもバックアップ電源(Vbat)で値が保持されるバックアップレジスタがある。 一種の不揮発性メモリとして利用できる。 ただし容量は、マイコンの型番によるが20〜128バイト程度しかない。(ST…

IAR EWARMのMAPファイルの見方

項目 内容 先頭 実行したコマンドライン等の情報 RUNTIME MODEL ATTRIBUTES よくわからん HEAP SELECTION よくわからん PLACEMENT SUMMARY ・各セクションの先頭アドレス・各オブジェクトの配置(よくわからん) INIT TABLE 変数の初期化テーブル MODULE SUMMA…

マイコンでtan(355/226)の計算

tan(355/226)の計算は関数電卓の正確さを試すベンチマークによく使われるらしいです。というのも、355/226はπ/2に極めて近い有理数であり、π/2近傍でtanは無限大に発散するからです。 下表のように両者は10進数で7桁まで一致しています。 π/2 1.570796326794…

STM32のブラウンアウトリセット

STM32マイコンにはブラウンアウトリセット(BOR)の機能がある。ブラウンアウトリセットとは、ざっくり言うと電源電圧が(パワーダウンするほどでもないが)ちょっと下がったときにリセットをかけることである。この機能はデフォルトではOFFになっており、オプ…

CubeMXでIWDGを有効にしたときの小技

CubeMXでIWDG(ウォッチドッグタイマ)を有効にした場合、自動生成される初期化コードでIWDGがスタートしてしまうため、デバッガで実行を止めるとIWDGによってリセットがかかってしまう。これを回避するためには、デバッグ時には下記のようなマクロをmain.cの …

CubeMX環境でLLドライバのフル機能を使う

CubeMXを使ったSTM32マイコンの開発環境(ここではIAR EWARMを想定)でLLドライバの全APIを利用するための設定について簡単にメモ。(すこし事情がややこしいです。間違ってたらご指摘ください。) CubeMXでは、抽象度の高いHALドライバまたは低水準のLLドライ…

CubeMX/HALのSystick割り込みについて

STM32マイコンのCubeMX/HAL環境では、HALライブラリ内でSystick割り込みを利用してHAL_Delay関数や通信のタイムアウト処理等の時間を管理している。(Tickカウンタの変数名はuwTickである。) Systick割り込みより優先しなければならない他の割り込みがある場…

STM32のTips (Flash関係)

開発環境はIARのEWARMです。 binファイルの生成 デフォルトではプロジェクトをビルドするとoutファイルが生成されます。outファイルからbinファイル(バイナリイメージ)を生成するには、プロジェクトの[オプション]の[出力コンバータ]にて、[追加出力ファイル…

CubeMXのコードを流用して音声再生

この記事はMbed Advent Calendar 2017の23日目の記事です。 STM32のCubeMXの吐いたコードをmbedにコピペしても、ふつうにコンパイルできます。HALライブラリのAPIもふつうに使えます。そこで、Nucleo-F767ZIをmbedで使用しつつ、CubeMXで生成したコードをコ…

Nucleo/mbedのタイマリソースの調査

この記事はMbed Advent Calendar 2017の19日目の記事です。 目的 mbedベースでお手軽に開発しつつ、痒い所だけ本気出して底からコード書くようなスタイルが好みです。ただしそのとき問題になるのが、mbedライブラリがどういうリソースの使い方をしているかと…

nRF52ミニ基板「斑鳩」の試作

この記事はMbed Advent Calendar 2017の8日目の記事です。 BLEマイコンnRF52搭載のミニ基板「斑鳩」の試作について書きます。「斑鳩」はオープンソースハードウェアです。今はまだ試作段階ですが、そのうちイベント等で頒布するかも。12/16(土)・17(日)開催…

IARコンパイラのWarning抑制

IAR C/C++コンパイラで、使われていない関数や変数についての警告を抑制するおまじない。 (あくまでデバッグ用。最終的にはそんなものは残さない。) #pragma diag_suppress=Pe177 // never referenced function #pragma diag_suppress=Pe550 // never used…

CubeMX環境でprintfを使う

UART出力 STM32マイコンのCubeMX環境(HAL Driver使用)でprintfを使ってUARTに文字列を出力したい場合、下記のようなputchar関数を実装すればよい。この例では標準出力をUART2に出力している。もちろん、あらかじめCubeMXで対応するUARTの設定をおこなって初…

IARのプロジェクトのバージョン管理メモ

IAR Embedded Workbenchのプロジェクトでバージョン管理から除外するファイルは、以下の通り。(たぶん) 除外すべきファイル EWARM/プロジェクト.dep EWARM/settings/ EWARM/プロジェクト/Obj/ 除外するかどうかはお好みで(最終生成物) EWARM/プロジェクト/…

Arduino互換ボードの条件コンパイル

がじぇっとるねさすコミュニティの記事よりメモメモ。 元記事 GR-SAKURA、GR-KURUMI、Arduino 等でのプログラムの共用 要点 ソースは .ino ではなく、ふつうに .cpp/.c と .h で 機種ごとにヘッダのインクルードを条件コンパイル ここで分かりやすい機種分け…

PSoC CreatorのCコンパイラ

PSoC Creatorで使われるCコンパイラは、PSoC3(コア:8051)はKeilのPK51ですが、PSoC4/5(コア:ARM Cortex-M)はGCCです。PSoC3のコンパイラに関しては、KeilがPSoC Creator用に無償でライセンスしてくれているようです。(CypressがKeilにライセンス料払ってる…

STM32マイコンの開発環境について(雑談)

STM32マイコンの開発環境はいろいろあるいけど、ぶっちゃけ言って次の3パターンに絞られると思う。 (※個人の感想です。) 金があるなら IAR(EWARM) か Keil(uVision/MDK-ARM) 金がないなら SW4STM32 お手軽志向なら mbed IARやKeil(カイルと読む)は、ン十万円…

Cortex-M4FのFPUを使う

ARM Cortex-M4は、M3にDSP(SIMD,MAC)命令を追加したものだが、Cortex-M4Fと呼ばれるものは、さらに単精度のFPU(浮動小数点ユニット)を持っている。どれくらい効果があるものか、三角関数の計算で速さを比較してみた。 方法 Cortex-M4Fをコアに持つLPC4370を…

LPC4370のRAM上実行について

LPC4370は、282kBのRAMを内蔵するかわりFlashを内蔵しておらず、RAM上で実行することを前提としている。204MHzという高速な動作クロックのため、内蔵Flash上の動作では読み出しアクセスがボトルネックになるためである。(回路の特性上、SRAMはFlashより高速…