FreeRTOSを動かしてみる

STM32CubeIDEのRTOSはFreeRTOSと系列は共通でもCMSISでラップされているので、APIは違いがあるようですが、RTOS使うのもCube32MXで設定できるので使う上ではそれほどの違いはない

https://embeddedthere.com/getting-started-with-freertos-in-stm32-example-code-included/

が分かりやすいのでこれを参考にした、ただしRTOSといってもタスクを起動とかはしてなくて最初に二つのタスクを起動したら永久に動き続けるだけ

<動作環境>

・M4 MacBook:CubeIDEの1系ならちゃんと動くから

・CubeIDE:1.19.0

・STM32F401re

<手順>

解説中では言及されてませんが、ビルドする時に設定が必要でした、

ビルドするとポップアップで確認メッセージが出てくるので、USE_NEWLIB_REENTRANT(thread safeにするためらしい、その分多少のメモリ増加はするけど、シングルタスク以外はenableにすべきなんだろう)をEnabledにしました

また目で見て簡単にわかるように、PB5側はPA5(つまりオンボードLED)にしています、ソースコードは以下に修正しています

待ちでosDelayを使う理由は、他のタスクへの実行権限以上をできるようにするため、HAL_Delayは単なるアイドリング状態、つまりMCUは動き続ける、だから無駄にリソース消費する

オシロでPB4とPA5の波形を見ると、ほぼ設定した時間でトグルされているのが分かります、普通はタスクが独立してフリーに動作することはほぼないので、次はタスクを待ち状態から起動させてみます

 

admin

STM32Nucleoのデフォルト発信器はRC発振なのか

STM32でPWM発信をさせた時に、計算上は1KHzでも実際の発振周波数は1015Hzぐらいでジッターも1μsぐらいはある

https://moons.link/post-632/

なぜ水晶発振なのにそんな振れるのかと思ったけど、実は内部ではRC発信器が動いているということ

無論水晶振動子を追加して、そちらを選択もできるようになってます、発信の立ち上がり時間はかかりますが、アプリケーションによってはこの程度の精度でも問題なくて値段が重要という時には水晶使わないケースもあるということだろう

Morphoコネクタに大概の信号は出力されているので、そこからプローブ可能

 

admin

 

 

 

 

Sesameでリモコンがスマホから見えない

セサミの不具合(その1)

ファームのアップデートかなり頻繁にあり、内容までは記載されてないようですが、先進機能取り込みの影響なのか結構Buggyでもあります、感覚的には二ヶ月に一回ぐらいは何らかの対処必要な感じ

Sesameのファームアップデート後にクローズセンサーと連携しなくなったので触ってる間にリモコンがスマホから見えなくなった

サポートの回答はスマホとのリンクが切れてる?とか言ってログインしてリセットしろとか言ってたけど、余計状況が悪化しそうなので、とりあえず使える間は使おうと思う

今までゲストでデバイス登録してたけど、スマホ移行すると登録情報消えるからログインしてクラウド保存が正統らしい、今はゲスト状態からログインしてスマホはsesameデバイス見えない状態だけど、スマホとsesameデバイスとのBLE接続情報は残ってるぽい(スマホのPASMOオープン使えるから)無論sesameデバイス間でも連携ができている状況でしょう、そのうち長時間動作でメモリリークなどで問題も起きるだろうけど、その時の対処は起きてから考える

とりあえずデフォルトのYKKのスマートキーはある訳だから、多少不便(オープンセンサーと生体認証他が使えない)でもそちらの機能使えばいいし、外出の時にsesameだけに頼るのは危険だから必ずYKKの物理キーも持って出るようにしている、スマートキーの実運用では電子的な手段に全部を頼るのは危険だから

 

admin

CubeMXで周辺デバイスの自動初期化

CubeIDEはCubeMXと統合されてますが、元々は別れてたらしい、CubeIDEの特徴とも言える機能で周辺デバイスの設定だけで.iocファイルを作成して、buildで対応するコードを生成してコード側にはロジックの記述だけという役割分担のようです

<環境>

・Intel MacBook Ventura

・CubeIDE 1.10.0

参考は、

https://moons.link/post-50/

からTimerの初期設定と、Timerを使ったLチカを実行してみました、そのまんまですが、全体の流れと手順は、

Categories(TIM1) -> ModeのClock SourceをInternal Clock -> Parameter Setting(タイマーの動作設定) -> NVIC Setting(TIM1 update・・をEnableにチェック) -> main.cにTIM1の動作起動コードの追加 -> Core > Startup中のstartup_stm32f401retx.s(割り込みベクタ記述のアセンブラコード)中の割り込みベクターに対応する割り込み処理を記述(LED表示のトグル処理、stm32f4xx_it.c中に記述)

このLチカはタイマー割り込み使わずに普通に時間待ちしてもできる訳だけど、敢えて割り込み使った処理にしているだけです

※NVIC(Nested Vectored Interrupt Controller)、普通に割り込み優先順ごとに処理するハードウェア機能

以上完了後にBuildすれば実行可能ということ

参考ページの記述にはClock SourceをInternal Clockにすれば設定画面が開くとありましたが、リロード(?)しないと見えてこなかった

CubeMXの初期設定で作成された結果は、main.cの中にちゃんと見えて(184行目以降)きてますね

このディレクトリ構成はタイマー機能をMXで指定後に自動作成されるファイルを含んでいます、stm32f4xx — .cが該当します、stm32f4xx_hal_msp.c(mspはMCU Support Package)は周辺デバイス追加してもその中で複数の該当周辺デバイスの初期化コードを呼び出すので一個のままで、stm32f4x_it.cは周辺デバイスごとに追加されていくと思う

MXの設定で最初Prescallerを39999(10倍の値)にしてたので、1秒間隔じゃなく10秒間隔でブリンクしてましたが、Buildエラーさえでなけりゃ指定したままちゃんと動くということ

一度ST-LINKを経由した書き込まれたコードはFlash上への書き込みなので、ラズピコなどと同じく、電源切っても再度電源投入すればそのまま動き出します

動作時の動画、

 

admin

STM32Nucleoの開発環境想定以上に難航した

一言で言えば、CubeIDEのMac OSのサポートレベル結構低いということに尽きますが

① Apple Silicon Mac Tahoe:なんかコマンドラインで起動しないといけないよ、今時そんなのないよね、挙動も不審だし –> 割とあっさりあきらめ

② ①でVMware上のUbuntuならいいの?:これもArm版Linuxのバイナリとかないよ

③ Apple Silicon諦めてIntel Mac(Ventura)で事例の多い1.x系でやってみる、しかし最新の1.19だとプロジェクトの新規作成で固まる

④ それではということで、③の環境で1.10まで落としたらプロジェクトが作成できてデバッガも動いた、ただしST-LINK server(バイナリのダウンロードとデバッガ機能実現)は追加でインスト必要

最初のプロジェクトは大体Lチカですが、

https://moons.link/post-25/

のサンプルコードを埋め込んで実行すると、デバッガーも動きました

デバッグ時の画面は、

arm-none-eabi-gdb(これはデバッガー本体)、ST-LINK serverが見えてます

ビルドしたSTM32用のバイナリのサイズはBuil Analizerで以下のように見えます、まだコンパクトなサイズですね

Nucleo本体の緑のLED(STM32の写真では真横2cm付近)の点滅が確認できます

ようやくスタートラインでしょう、

 

admin

 

 

STM32の開発環境について

STM32CubeIDE(以下CubeIDE)のインストをしている中での気づきですが、Mac OS特にTahoeになってしまうとCubeIDEがまともに動かない、結局Mac OSの特にセキュリティ強化対応にCubeIDEが全く追い付いていないらしい

特にアプリ起動がCLIから起動しないとST-LINKツールが動かないのは結構致命的、それ以外もこの先いろいろありそうだからVMware上のUbuntu、実はこれも24系列だと32ビットの必要なドライバがインストできないから、結局22系列を別にインストしてこれから構築するところ

でUbuntuの領域拡張、滅多にやらないと忘れるけど記録を残しとく、前回の記録はこちら

VMware上のUbuntu24.04のファイル領域拡張

① VM停止状態で仮想マシン – 設定からSSD領域拡張

② sudo gpartedで物理領域拡張する(実際の設定はGUI)

③ LVMに認識させるために、物理ボリューム確認後にpvrisize実行する

$ sudo pvdisplay
--- Physical volume ---
PV Name /dev/nvme0n1p3
VG Name ubuntu-vg
PV Size <47.32 GiB / not usable 1.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 12113
Free PE 0
Allocated PE 12113
PV UUID mEG8kz-Asbe-u3j6-Y8fM-qbbC-vkgs-x7EIjC

chat@ubuntu:~$ sudo pvresize /dev/nvme0n1p3
Physical volume "/dev/nvme0n1p3" changed

④ LV拡張のためにLVを確認する

$ sudo lvdisplay
  --- Logical volume ---
  LV Path                /dev/ubuntu-vg/ubuntu-lv
  LV Name                ubuntu-lv
  VG Name                ubuntu-vg
  LV UUID                jZdlBx-ScuT-uXjS-HQhE-gGla-B9UU-c6UUu4
  LV Write Access        read/write
  LV Creation host, time ubuntu-server, 2025-11-21 04:40:56 +0000
  LV Status              available
  # open                 1
  LV Size                <47.32 GiB
  Current LE             12113
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

⑤ LV領域拡張

$ sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv

⑥ ext4領域拡張

$ sudo resize2fs /dev/ubuntu-vg/ubuntu-lv

こんな風に拡張されました、デフォルトのインストールは20GBしかないからほぼほぼ足りなくなる、ディスク拡張してもその時点でVMwareに割り当てはされず、実際に使われなければMacからは未使用領域は使用可能(LVMの効用だろうけど)だから大きめにとっておくのが良さそうである

$ df
Filesystem                        1K-blocks    Used Available Use% Mounted on
tmpfs                                400508    1672    398836   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv  48716684 6726048  39866328  15% /
tmpfs                               2002528       0   2002528   0% /dev/shm
tmpfs                                  5120       4      5116   1% /run/lock
/dev/nvme0n1p2                      1768056  131812   1528112   8% /boot
/dev/nvme0n1p1                       973952    6468    967484   1% /boot/efi
tmpfs                                400504     100    400404   1% /run/user/1000

まだ先は結構長そうだ、

P.S. 2025/11/22

なんだCubeIDEにarm版Linuxのバイナリ存在しないよ、無為な作業であった、さて古いIntel Mac、当然OSも古い、にインストしてみるか

 

admin

MacのTahoeではNAS(Q-NAP TS-230)のtimemachineがコケる

世の中でも同じ問題は出ているんだろうけど、M4 MacBook-ProをTahoeにアップデートしてtimemachine実行すると失敗する

原因は生成A.Iの回答によるとSMBまわりがTahoeでかなり変更が入っているようで、低消費電力型のNAS(TS-230)では通信が失敗するらしい

—————————————–

P.S. 2025/11/22

本件は以下のリンクの記述がまとまっていると思う

https://hireido.blogspot.com/2025/11/timemachine-macos-tahoe-261.html

—————————————–

バックアップ取れない(復旧もできない)のは怖すぎだから、急遽USB SSD(SunDiskの1TB)を購入依頼した、Mac OS側のパッチ出るまではそれで凌ぐ

手持ちは2.5インチタイプかM.2で容量も少ないから、汎用でポータブルタイプ用途にもちょうど良いタイミングかもしれない

アプリはともかく、データ領域でバックアップできるところはM.2 SSDにバックアップを取っておいた

P.S. 2025/11/19

SSD入手できたのでバックアップ取ってみた、SSD使用領域450GB超えてるぐらいだけどおよそ30分でバックアップ完了、ディスクを複数記述しておけば交互にバックアップ取るらしいから、いずれそういう使いかでも良いかもしれない

気持ちもう少し短めのケーブルでも良さそうに思う

 

admin

PlateauのデータをUnityにインポートしてみる(ヘビー級)

国交省の進めているプロジェクトにPlateauという、都市データを三次元データ化して例えば防災などに役立てようというものがありますが、三次元データは色んなアプリにインポートできるというのでやってみた

メジャーどころはBlenderとUnityかと思うけどUnityでやってみた、ただしSDKがUnity6は扱えないから、それ以前のバージョンで

手順は(https://scrapbox.io/lecture-nakayasu/PLATEAU_SDK_for_UnityによるCityGMLからOBJ変換を参照)、

① Plateau SDKをUnityにインストールする

https://github.com/Project-PLATEAU/PLATEAU-SDK-for-Unity/releases

② 三次元データをインポート

https://www.geospatial.jp/ckan/dataset/plateau-14212-atsugi-shi-2023/resource/fb7ea888-8d6a-43d5-a3c3-1557007bfce9

近隣で厚木市のデータをインポートしましたが、データサイズが巨大で狭い区画指定じゃないと、Unityがハングしてしまいます

こんな感じで相模川の中洲が見えているところになります、遠方にはビルが見えるから厚木駅方向ですかね

但しこの程度でも、

モデルの精度が高いとメモリは大量に消費するから、相当範囲を限定しないと使えなさそう

 

admin

STM32を使ってみる

表示含めて基本のロジックは組み込み(ラズピコスペアナ)

でラズピコ2使ったオーディオ帯域のスペアナとオシロスコープ作ってみたけど、ラズピコではいくつかの制限あって、中でも大きなのはDMAがちゃんと使えない、ADCの実効精度が出ないなど、イマイチなのでペリフェラルの制御機能に優れたSTM32シリーズを使ってみようと思う

部品は以下を秋月に発注したけど、F4シリーズならオーディオ帯域のFFTには能力的にかなり余裕ありそうだ

・Nucleo

https://akizukidenshi.com/catalog/g/g107723/

・BNCコネクタ

https://akizukidenshi.com/catalog/g/g105362/

・オペアンプ

https://akizukidenshi.com/catalog/g/g100069/

・ユニバーサル基板(95*72)

https://akizukidenshi.com/catalog/g/g103232/

・パスコン(0.1μ, 2.2μ, 10μ)

https://akizukidenshi.com/catalog/c/ccapacitr/

・三端子レギュレーター

https://akizukidenshi.com/catalog/g/g111299/

 

開発環境は最初はCubeIDE使うんだろうね、その後はVScodeの拡張機能かな、ラズピコの環境構築に似てはいる、但し言語は基本的にはCになるね、組み込み向けのアプリケーション考えれば当然と言えば当然だけど

CubeIDEだけインストしてみたけど、利用実績多いだろうから洗練された見かけと、サンプルコードも非常に多い

 

admin

ソーラー充電のログ取ってみた結果

ソーラーシステムの電圧ログを取ってみる

この記事のフォローになります

8日間程度のデータですが、

 

こんな感じです、ソーラー電圧は日中の光を受けて電力発生している時間帯にはピークが見えます、この先継続しても12.4V程度は下回りそうにないので十分に効果はあると言えそうです、発電量が一番低下するのは太陽の高度から冬至の頃だからその頃に再度ログ取ってみようかと思う

但し真夏の太陽と違って、晴れてもバッテリーを満充電にするようなパワーはない模様

 

admin