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