CubeIDEのデバッガーは、デフォルト設定ではmain.cの最初の行で止まるような設定になってるけど、いちいち止まんなくて良いよね、どう変更するの?
Run -> Debug ConfigulationsでSet break point at: のチェックを外せば良い、mainを変えればおそらく他のコードの先頭で止まるようになるんだろうね
単純だけど有用な設定だと思う
admin

la vie libre
LCD表示もDMA転送で表示させるようなライブラリがあるので、それ使ってデモプログラムを動かしてみた
https://github.com/AlexKaut/ST7789-STM32-DMA/tree/master/ST7789_STM32F103C8_Demo
<GPIOのピンの使い方>
実はCSは常時Lowにしてるから使ってないけど、
<CubeMXでのピン名称指定>
st7789.hでは以下のように定義されてるけど、最後の部分は落としてCubeMXで名称設定するのが正しいようです
<表示させてみた>
main.cにst7789関連のコードをデモプログラム参考に追加
はいこの状態では240*240設定なので、残りエリアはノイズが表示されます
<240*320対応の変更>
st7789.hファイルを変更します
<変更後の表示>
全面表示されるようになりました、LCDの種類によってはオフセット調整が必要な場合もあるらしい
<配線>
SPIのclock線(今SPI clockは21MHzに設定してます)はできるだけ短く、かつGND線とツイストしてインピーダンス下げた
実はDMA使うケースはそんなに多くないから、動作確認の比重が高いと思う、実際にはほぼプログラムモードでの制御になるから、データ準備でMCU介在するから
admin
前回の記事、
この記事に関連して、PWMの周波数が1/2**nだと綺麗にADCからの値取れるけど、任意の周波数入れると値がミックスしてグタグタ状態、なんでかなと色々調べると結局ADC変換のDMAがデバッガーで止めても動き続けるからどんどん同じ領域に上書きされるせい、たまたま1/2**nだと少なくとも位相はずれないから問題ないように見えるだけという結論
この検証のために、
① 正弦波入力してみたけどデータが綺麗に昇順降順にはならなかったから気づいた
10KΩ抵抗でGND – VCCを分割してcap(1.5μF)でカップリング、つまり電源電圧の中点をオフセット電圧にして、周波数5KHz、電圧は2V p-p(USBオシロの信号発生器を使う)、ADCのサンプリング周波数は100KHz
データレディのタイミングでDMA停止させて、ブレークポイントの先で再起動するように変更
概ね、20サンプルで1サイクルの値(単調増加と単調減少)が確認できた、数字的にも1.65 V ± 1Vぐらいの雰囲気
② PWMで5KHzを入力
こちらも概ね20サンプルで周回が確認できた、複数回停止しているので前回と値が変わったところは黄色になってる、上書きされると4095付近と0付近が混合されたメチャクチャな値になってた
<学び>
STM32のペリフェラルはCPUの状態関係なく動作するから、デバッグ時には考慮が必要
P.S. あとCubeMXの設定変更後に一度buildしてもdebuggerモード起動すると再度buildが必要になるのはMacのCubeIDEによくある問題らしい、二回buildすればいいだけではあるけども、debugger起動時にbuild結果の整合性チェックが通らないらしい
admin
PWMでdutyを設定するときに、
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 250);
のようなやり方と、
CubeMXの設定で設定は等価であると、
<環境>
・M4 MacBook ProでCubeIDE ver1.19.0
・STM32F401RE
・クロック系:ST-linkの水晶発振器を使ってFCLKは84MHz
<設定方法>
設定の場合にはPWM Generation *****のPulseでdutyを設定、この場合にはduty 50%になります
設定した結果の出力(84Mhz/(84*200) = 5KHz)、クロックソースが水晶なのでRC発信器と違って正確
この波形を、サンプリング周波数10KHzのADC(DMA転送)の入力に突っ込んでやると、
のように、High/Lowがサンプリングできています、同じクロックで同期しているので周期が狂うことはない
admin
以前の記事でNVMeのSSDにした記事掲載しましたが、どうも安定して動作しないので結局SDカードに戻してましたが、今回USBのSATA SSDのケース買ってそこにイメージ写してシステムデスク(128GB SATA SSD)を変更してみた
<SDカードをUSB SSD化する>
SD Card Copierで丸ごとコピー(New Partition UUIDsにチェック忘れずに)
再起動で、
・boot orderの確認
pi@rasp5:~ $ sudo rpi-eeprom-config
[all]
BOOT_UART=1
POWER_OFF_ON_HALT=0
BOOT_ORDER=0xf146 #NVMe / USB / SDカードのオーダー
PCIE_PROBE=1
Sdカードよりも優先順位は高くなっているけど最優先にする
$ sudo rpi-eeprom-config --edit
で変更してrebootで、
$ sudo rpi-eeprom-config
[all]
BOOT_UART=1
POWER_OFF_ON_HALT=0
BOOT_ORDER=0xf164
PCIE_PROBE=1SDカードは抜いてないから見えてるけど、USB SSDに切り替わった、loopxはsnapで仮想的にインストールされたモジュールが割り当てされるドライブネームなのでmountpointsは/snapから始まっている
ついでに性能測定、
Category Test Result
HDParm Disk Read 361.17 MB/sec
HDParm Cached Disk Read 327.60 MB/sec
DD Disk Write 292 MB/s
FIO 4k random read 29510 IOPS (118040 KB/s)
FIO 4k random write 24323 IOPS (97292 KB/s)
IOZone 4k read 44614 KB/s
IOZone 4k write 42302 KB/s
IOZone 4k random read 22563 KB/s
IOZone 4k random write 44361 KB/s
Score: 12810 sdカードに比較して書き込みは一桁上、MVNEe SSDのPCIe接続に比較すると1/3~1/4ぐらい、そんなものかな(以下のリンクは過去記事)
実装はこんな感じ、chatbotのエンビパイプの中に収めてる、
ケースは、
https://www.amazon.co.jp/dp/B0C2D1ZZGW?ref=ppx_yo2ov_dt_b_fed_asin_title
admin
Wi-Fi内でローカルで使うためのLuantiサーバー、色々やってみたけど結局行き着いたのはラズパイ5
① wsl2:一見筋が良さそうだけど、Windowsのセキュリティを乗り越えられない、つまりportが通らない
② USB SSDでLinux:これだとWindows関係なくなるから筋は良さそうなのだけど、HP NoteBookのUEFIのガードが固くてUSB SSDのbootができない、bootableと認識していないということ
③ MacのVMware FusionのUbuntuで立ち上げる:これはMacBookのローカルからだと仲間と認識してもらえるけど、外部からは同様の問題がある、Fusion Proだと同じネットワーク内のアドレス取得されるから良さそうだけど、結局***.localは使えないよね
④ ラズパイ5:これがおそらく一番素直、つまり仮想マシン配下に構築すると必ずネットワークが通すための工夫が必要だけど、専用機なら何ら問題ないしmDNSも使えるから固定I Pである必要もない
<ラズパイ5でのインスト手順>
ここでsnapが出てくる、aptではLunatiが結構古いバージョンだったりするらしくて、最新版を取得するならばsnapを使う、ソースコンパイルという手段もあるけど結構手間ではある
$ sudo apt update
$ sudo apt install snapd
snapとはLinuxにおける新たなパッケージ管理ツール(アプリ単位の隔離で依存関係を全部まとめることでosから切り離されるからaptでインストールできないアプリもインストールできる)、サイズと起動時間がネックかなFlatpakがデスクトップアプリでsnapはサーバーサイドアプリという棲み分けかな、起動時間とか問題なること少ないし
https://www.choge-blog.com/programming/ubuntu-snap/
$ sudo reboot
snapdの最新版をsnapでインストールする
$ sudo snap install snapd
$ sudo snap install luanti
snapのラズパイ用のLuantiはクライアントとサーバーが兼用らしい
$ luantiで起動して作成ずみのworldをDLしてデフォルトに設定する
$ cat ~/snap/luanti/common/.minetest/minetest.conf
server_announce = false
maintab_LAST = online
enable_damage = true
creative_mode = false
mainmenu_last_selected_world = 1
default_game = minetest
$ mkdir -p ~/snap/luanti/common/.minetest/games/
$ cd ~/snap/luanti/common/.minetest/games/
$ git clone https://github.com/luanti-org/minetest_game.git minetest
起動
$ luanti --server --worldname test --gameid minetest --port 30000
2025-12-24 19:33:28: WARNING[Main]: system-wide share not found at "/usr/share/luanti"
2025-12-24 19:33:28: WARNING[Main]: system-wide share found at "/snap/luanti/11/usr/bin/../share/luanti"
2025-12-24 19:33:28: [Main]: Using world specified by --worldname on the command line
2025-12-24 19:33:28: [Main]: Using game specified by --gameid on the command line
_ _ _
| |_ _ __ _ _ __ | |_(_)
| | | | |/ _` | '_ \| __| |
| | |_| | (_| | | | | |_| |
|_|\__,_|\__,_|_| |_|\__|_| ___ 5.14.0
2025-12-24 19:33:28: ACTION[Main]: World at [/home/pi/snap/luanti/common/.minetest/worlds/test]
2025-12-24 19:33:28: ACTION[Main]: Server for gameid="minetest" listening on [::]:30000.クライアントの画面
snapは起動時間が長くなるというけど、サーバーなら起動しちまえば終わりだから問題にはならない、sdカード使ってるけど特にレスポンスが遅いとも感じない
あとサイズが大きくなる件は、これは媒体次第だけど今時それほどクリティカルな話ではない
admin
すぐにやり方忘れるので、過去記事に見当たらないので作成
<環境>
MacBook Pro M4/Tahoe
SDカード:ラズパイ5で使っている64GBのSDカード
<手順>
・Macに差し込んでdisk番号の確認
% diskutil list
/dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *1.0 TB disk0
1: Apple_APFS_ISC Container disk1 524.3 MB disk0s1
2: Apple_APFS Container disk3 994.7 GB disk0s2
3: Apple_APFS_Recovery Container disk2 5.4 GB disk0s3
/dev/disk3 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +994.7 GB disk3
Physical Store disk0s2
1: APFS Volume Macintosh HD 12.2 GB disk3s1
2: APFS Snapshot com.apple.os.update-... 12.2 GB disk3s1s1
3: APFS Volume Preboot 8.1 GB disk3s2
4: APFS Volume Recovery 1.2 GB disk3s3
5: APFS Volume Data 455.7 GB disk3s5
6: APFS Volume VM 5.4 GB disk3s6
/dev/disk4 (disk image):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme +17.3 GB disk4
1: Apple_APFS Container disk5 17.3 GB disk4s1
/dev/disk5 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +17.3 GB disk5
Physical Store disk4s1
1: APFS Volume iOS 17.4 21E213 Simu... 16.8 GB disk5s1
/dev/disk6 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *1.0 TB disk6
1: Apple_APFS Container disk7 1.0 TB disk6s1
/dev/disk7 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +1.0 TB disk7
Physical Store disk6s1
1: APFS Volume Extreme SSD 370.5 GB disk7s2
/dev/disk8 (disk image):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme +17.6 GB disk8
1: Apple_APFS Container disk9 17.6 GB disk8s1
/dev/disk9 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +17.6 GB disk9
Physical Store disk8s1
1: APFS Volume iOS 17.5 21F79 Simul... 17.0 GB disk9s1
/dev/disk11 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *61.9 GB disk11
1: Windows_FAT_32 bootfs 536.9 MB disk11s1
2: Linux 61.4 GB disk11s2最後の/dev/disk11が該当
・該当diskをunmountする
mountしたままではMacOSの配下にあって、キャッシュとかでまともにバックアップが取れないと
% diskutil unmountDisk /dev/disk11
でunmountする
・ddコマンドでバックアップイメージの作成
% sudo dd if=/dev/disk11 of=rasp5_chatbot.img bs=1m
でbackupが時間はかかる(おそらく30分近くかな)けど作成される
59024+0 records in
59024+0 records out
61891149824 bytes transferred in 1211.657719 secs (51079731 bytes/sec)<復元>
復元時も同様にdisk番号取得してsdカードに書き込み(x)には取得したsdカードのdisk番号を入れる
% sudo dd if=rasp5_cahtbot.img of=/dev/disk(x) bs=1m
admin
HPのWindowsマシンで複数アカウント作って、複数アカウントがログイン状態で、強制電源断を何回かやってたら、ネットワーク関連の設定ファイル壊れて手動での復旧ができなくなった
サーバー管理者などは必ずログオフ確認して電源断するようですが、民生のパソコンでそんな簡単に壊れるとはつゆ知らず
しかしクリーンインストールもなかなか一筋ではいかなかった
クリーンインストールの留意点(USBメモリはminmum 8GBにWindows11のマルチエディション版をMedia Creation Toolで書き込み)
・BIOS設定でSecure Bootはdiableにする(そうしないとUFEIはUSB bootは大概はじく)
・NTFS形式ではHPのUEFIは受け付けない(Rufusだとそれしか選べないから次のMedia Creation Toolの出番)
・Media Creation ToolでFAT32形式で作ると認識してくれた
・ただしM2 SSDのbootはdiableしないと例えUSB bootを最上位にしてもUSBから起動しないでWindows立ち上がる、対策はM2 SSDのbootをdisableする
・USBからのインストール完了後のリブートでM2 SSDのbootをenableする手操作必要(これやらないとUSBメモリからインストールが繰り返してセットアップが起動しないから永久ループする)
以上でようやく再インストールできた、試行錯誤で所要時間10時間近く、他に正常に使えるWindowsマシンがないと復旧できなかった
<教訓>
『クライアントPCでもマルチユーザ作って運用しても、同時ログオンはせずに必ず一人ログオンで運用しろ』
admin
昨日の記事のパソコン(2021年モデル)、2台ともセットアップ時にCMOSバックアップ電池Lowアラーム出てたから交換した
ELITEBOOKの電池交換は簡単にできるけど、電池の手配間違った、現物見るとCR1620、手配品は信頼のPanasonic CR2032、当然ノートパソコンの狭いスペースには収まりませんから、回避策必要でした
① 事前準備
SSDが暗号化されていると復元できない可能性あるとのことで、シャットオフ前に暗号化無効にしておく、一台はメニューが見えない、結果として暗号化されてない模様
② 電池へのアクセス
裏蓋の5箇所のネジ外して、クリップで止まっているのを軽く抉ると外れてくる
電池パックのコネクタ外して、ねじ止め4箇所を外して、持ち上げる(反対側はクリップされてる)と簡単に外れる
この時点で電池小さくない?と思う、確かに小さいからこのスペースには厚みも横幅も収まらない
③ 対策を考える
よく見ると、DIMMスロットは一個しか使ってなくて、一個空いてますね、ここにおけばいいんじゃない、元々コネクタとケーブルは流用のつもりだったしね
で電池からケーブル根元で切って、新しい電池に半田付けとシュリンクチューブで絶縁
取り外した電池の電圧は1.56/1.26Vだったから、放電の最終状態だから程なく終わりを迎える状態、新品だと3.3V近くあります
④ 元に戻す
電池はテープで絶縁して、両面テープで貼り付ける
最初の電源投入ではCMOSバッテリーエラ〜になるけどリブートで問題なく立ち上がり、SSD暗号化を有効にしている間にNTPで時計は正常に戻ってる
容量はCR2032が二倍以上あるから、もう交換する可能性は限りなくないね、しかし4年で終了というのは感覚的に短すぎのように思うよ
admin