投稿

ラベル(STM32)が付いた投稿を表示しています

Linux(Ubuntu) Eclipse STM32 開発環境

イメージ
Linux(Ubuntu) Eclipse STM32 開発環境 久しぶりに、STM32の開発環境について書きます。 開発環境は、おなじみの? Eclipse + SW4STM32 ですが、 開発プラットフォームは、Ubuntu 18.0.4 LTS 64bit です。 前回記事「 EclipseによるSTM32統合開発環境構築 」で紹介した、WindowsのEclipse+SW4STM32と(ほぼ)同様の環境をLinux(Ubuntu 18.0.4 LTS)上に構築する方法について解説します。 ほぼ、と書いたのは後ほど。。。 基本的なソフトウェア構成についてもWindowsとほぼ同じですが、Windowsでは使用するEclipseとしてPleiadesを使っているところをUbuntuでは snap で Eclipseパッケージを直接インストールしたり、ST-LinkがWindowsでは本家STMicroのモノであるのに対してオープンソースを使ったりと、いくつか異なるソフトウェアもあります。 その関係で? Eclipseは英語のままで日本語化していません。 ソース上のコメント表記とかは日本語入力できるし、特に日本語にするメリットも感じられないのでこの記事では英語のママです。 ご容赦を。 また、Windows上での操作と同様の箇所についての詳細は、Windowsでの解説を確認ください。(手抜き!) 使ったOS:  Ubuntu18.0.4 LTS 64bit インストールするソフトウェアの一覧:  STM32 CubeMX  Eclipse  STM32 CubeMX Eclipseプラグイン  SW4STM32 Eclipseプラグイン  CDT Eclipseプラグイン  stlink-tools  その他、説明文中で apt install   (すでにapt install場合は不要) まずは、念の為 $ sudo apt update とかやっておいいてください。 CubeMXもEclipseもJavaで動作するので、まずはJavaの実行環境をインストールします。 $ sudo apt install default-jre STM32 CubeMX...

STM32F3 Discovery、タイマーと割り込みのキホン

イメージ
STM32F3 Discovery、タイマーと割り込みのキホン 今回のSTM32F3 Discovery企画では、基本的なタイマー動作についての設定と、そのタイマーを割り込みで使うための基本について解説したいと思います。 写真ではわかりづらいですが、タイマーでPWM制御しています。 STM32F303は、タイマーとしてTIM1, TIM2, TIM3, TIM4, TIM6, TIM7, TIM8, TIM15, TIM16, TIM17 と10個のタイマーを持っています。(なぜ番号が飛んでいるのかは不明) この中で、TIM1と8は高機能なタイマーとして実装されていますが、今回の記事ではTIM1を使ったプログラミングを行いたいと思います。 また、タイマーとともに割り込みでの処理を行いたいので、割り込み設定についても解説していきます。 なお、このサンプルではタイマー設定などについて、直接レジスタ設定で実現しています。 レジスタ、割り込みの定義は、stm32f303xc.hで行われています。他のSTM32を利用する場合、それぞれのMPUに適したヘッダファイルが存在していますので、そちらのヘッダーファイルを参照してください。 stm32f303xc.h 中で、TIM1に関するレジスタのベースアドレスや各操作レジスタが定義されていて、  TIM1->PSC = 4800;  → TIM1タイマーのプリスケーラーレジスタに4800を設定する の、ような記述が可能になります。 一般的にMCUのタイマーは、タイマーモジュールに供給されているクロックをカウントすることで、ある時点からどのくらい時間が経過したかを測るものです。 このため、使用するタイマーモジュールに供給されるクロック数を確認しないと正確なタイマー設定を行うことができません。 タイマー1(TIM1)は、STM32F303xB STM32F303xCデーターシート(DS9118.pdf)のブロックダイアグラム(13/149)を確認すると、APB2/72MHzに接続されています。しかし、実際に供給されているクロック設定をCubeMXで確認すると、48MHzとなっています。Eclipse CubeMXのパースペクティブのClockConfigurationを確認して...

STM32F3 Discovery、電子水平器の作成

イメージ
STM32F3 Discovery、電子水平器の作成 前回、STM32F3 Discovery のLSM303DLHC磁気センサーを使って電子コンパスを作成しましたが、このICにはもう一つ、加速度センサーが搭載されています。 今回は、この加速度センサーを使って水平器を作成してみたいと思います。 そして、今回も外部回路は無しで、表示は8つのLEDだけで実現してみたいと思います。 LSM303DLHCの加速度センサーの使い方 LSM303DLHCの加速度センサーは、XYZの3軸に対する加速度を検出します。 各軸の加速度は、各軸の加速度を検出しています。 ボードの表側を上にして水平な状態で静止できたとするならば、Z軸が鉛直方向となり1Gが検出され、XY軸は0Gとなります。 傾いた状態、鉛直方向からの角度θで得られるCos()を1Gに掛けたものとなります。 つまり、軸が鉛直方向の場合θは0度となりCos(0)=1で9.8G、軸が45度の場合はCos(45)=0.707...となり6.9、90度の場合はCos(90)=0となり0、逆さまにするとCos(180)=-1で-9.8となります。 検出されるデーターについて 得られるデーターが割と曲者です。 データーシートには書いてありませんが、データーを取得すると下位4ビットは必ず0なので、実は得られるデーターは12bit、下4ビットを無視する必要があります。 データーシートによると、得られる数値はFSビットによって設定されるとあります。 CTRL_REG4_A(23h)のFS[0:1]でスケールを設定します。デフォルトは00で ±2G のレンジとなり、取得できるデータは、1 mg/LSB となります。 この、1 mg/LSB はLSB1ビットあたりの単位を示しています。 仮にある軸のデータが 0x001 となった場合の加速度を求めると、 = 1mg = 0.001G = 0.00980665m/s2 となり、 1000の値を取得できたときは、 1000 * 0.00980665m/s2 = 9.80665m/s2 と、なります。 スケールを ±4G とした場合は、2mg/LSBとなるので、 0x001 = 0.002G = 0.019601...

STM32F3 Discoveryで電子コンパスを作ってみよう。

イメージ
STM32 Eclipse開発環境で実際にマイコン・プログラミングをしてみましょう。 今回は、STM32F3 Discovery を使った電子コンパスを作成します。 STM32F3 Discovery には、STマイクロ製のLSM303DLHCというセンサーが搭載されています。 この、LSM303DLHCはSTM32F3とI2Cで接続されており、3軸の地磁気と加速度を検出することができます。 また、基板上には方角を示すような8つのLEDも搭載されています。 今回は、LSM303DLHCの地磁気センサーとLEDを使って簡単な電子コンパスを作成してみようと思います。 LSM303DLHCの地磁気センサーの使い方 LSM303DLHCの地磁気センサーは、3軸に対する地磁気を検出します。 この磁気センサーは各軸と地磁気の磁束密度を検出するようにできています。 このため、各軸が北を向いたときに最大値となり、逆(南)を向いた時はマイナスの最大値となります。 3つの軸から北を知るには、XYZの3軸で検出された磁束密度の強さをベクトル合成したものが北となります。 STM32F3 Discoveryボード上のLSM303DLHCをよく見ると、1番ピンが下向きにマウントされています。 このため、ボードの上側(USB給電/デバッグポート側)を北に向けたときに、X軸がマイナス値の最大となります。 今回の実装仕様 実装を簡単にするため、XとYだけを使うこととします。 つまり、ボードを水平にした状態での北向き検出します。 この状態で”北”と判断した方角のLEDを点灯し、他は消灯します。 計算方法 LEDは8つしかありません。 従って、LED間の角度は45です。 磁気センサーは、軸が南方向を向くと取得値がマイナスとなるので、数値の正負だけで4方向が特定できます。 このため、数値の正負で4方向を特定し、取得値の絶対値でベクトルを算出してCOS値から詳細な角度を出せばよいのですが、1方向のLEDは0度と45度と90度の3つしかないので、3つのLEDの間、22.5度(0.9238795325...)と67.5度(0.3826834323...)だけ判定できればよいことになります。 I2C通信方法...

EclipseによるSTM32統合開発環境構築~トラブルシューティング

イメージ
トラブルシューティング(既知の問題) 使っている中で、いくつかの問題も発生していますのでこの場を借りてシェアしたいと思います。 ・起動時にエラーが出ることがある。 上記のように、main()の先頭でデバッグ停止すれば問題無くデバッグが可能。  ただし、デバッグ停止せずプログラム停止する場合は別の問題 ・OpenOCDが接続できない、デバッグ起動できない  ・OpenOCDが起動したままになっている可能性がある。   一度、Eclipseを終了   tasklistコマンドでOpenOcd.exeのプロセスを見つける   taskkillコマンドで/F指定で強制終了させる  ・それでも接続できない   ドライバとOpenOCDの状態に不整合が生じている可能性   一度、Eclipseを終了   ST-LinkのUSBを抜き差ししてみる  ・それでも接続できない   PCを再起動する 問題が発生しやすい作業 ・プロジェクトを切り替える  STM32CubeMXでプロジェクト作成は簡単にできます。  しかし、プロジェクト・パースペクティブで切り替えると、  やはりデバッグ接続できなくなったりします。  そんなときは一度、Eclipseを再起動してみてください。 ・ボードの種類を変更する  STM32は多くの評価ボードがあります。  DiscoveryやNucleo、MPUもF0~F7など多くの種類があり、  OpenOCDのボード設定で変更できますが、   同じワークスペースで切り替えると上手くいかない ことがあります。  ボードの種類を変更する時は、ワークスペースごと切り替えたほうが安全です。 アップデート対応 Eclipseは自動的にアップデートを検出して、インストールを求めてきます。 このときは、OpenOCD関連のアップデートでしたが、外部ツールとして起動するOpenOCDをアップデート後のOpenOCDを起動するように設定を自分で変更しなければなりません。 具体的にはストリング置き換えで指定しているディレクトリを変更します。 これまで、 fr.ac6.mcu.externaltools.openocd.win32_1.21.0.201811131241 ...

EclipseによるSTM32統合開発環境構築~目次

イメージ
EclipseによるSTM32統合開発環境構築 目次: ・ EclipseによるSTM32統合開発環境構築~その1 STM32開発環境の紹介、必要となるソフトウェア ・ EclipseによるSTM32統合開発環境構築~その2 STM32 CubeMX のインストール ・ EclipseによるSTM32統合開発環境構築~その3 Eclipseのインストール ・ EclipseによるSTM32統合開発環境構築~その4 STM32 CubeMX プラグインのインストール ・ EclipseによるSTM32統合開発環境構築~その5 SW4STM32のインストール ・ EclipseによるSTM32統合開発環境構築~その6 ST-Linkドライバ、ST-Link Utilityのインストール ・ EclipseによるSTM32統合開発環境構築~その7 実際の開発手順と必要な設定 ・ EclipseによるSTM32統合開発環境構築~トラブルシューティング 既知の問題など Lightning Brains