« EEPROM | トップページ | 伏線回収 »

2019年12月 8日 (日)

stm32f3(f4)のTips

何度か書いているけど、あまり話題に出ない割には
みんなハマってるっぽいところ。
定期的に書く。

------

・BOOT modeでFLASHに書けない
(書き込みモードに入らない)
・書けたり書けなかったりする
・リセット直後は書けるけど、しばらく(数秒)
 遅れるともう書けない


これは、F3ではあまり出ない。
F4の方がハマり率高いような。
ST-LINKとか使うと関係ないんだろうけど。
いまだシリアル書き込みの需要は高いからなあ。

答え(対処法)だけ書くと、
PC11とPB11は未使用ピンとして、
(まあ使ってもいいけど)プルアップしておく。
(必要に応じてPA10も)
これで、安定して書き込みできるはず。



理由は...ちゃんとある。
親切(設計自由度)のつもりなんだろうけど、
結果的に巧妙なトラップになってるよなあ。


------

・F303で、SPIのデータサイズが8bit長以下の
 設定で正常に通信できない
・同じく 9bit長以上の設定で正常に通信できない


F3のSPIは、通信するビット長をSPIx_CR2の
DSレジスタに設定するけれど、実はそれだけではダメで
8bit以下と、9bit超で、DRレジスタへのアクセスを
変えないとうまくいかない。(BまたはHW)

公式のサンプルコードも、SPI送信だけは、
2種類、別の関数用意されている。しれっと。

このコードを見るまで、気づかなかった。
まあ、エラッタじゃない..けどさ、
エラッタでもいいだろう?これ

まさかのTips、こんなん気づくかよ...


------

・USARTが受信できない


スタートビットの判定や、途中のビットの判定が
複数サンプリングのパターンマッチになっていて、
エラーチェックがかなり厳しい。
(特にスタートビット)

まあ、いいこともあるんだけど、ノイズ交じりの信号は
まずほとんど受信できない。

困ったことに、これ、何のエラーにもならなくて、
受信データが静かに破棄されるだけなので、
なんで受信動作が動かないか、気づくのに時間がかかる。


同じ信号分岐して繋いでいる低位のマイコンだと
動くのに、stm32は沈黙しているとか、
普通、ソフト疑うじゃん。

で、テスト環境だと完璧に動くんだけど、実機だと
パッタリとか、まあ訳が分からない。
せめて、どっかのエラーフラグでも立てばねえ...


UARTってさあ...別にエラーがあろうがなかろうが
関係なく、受信したいよな。俺だけか?
もともとペリフェラルに、エラー訂正とか、
フィルタリングなんて求めないべ?

I2CとかCAN使いたくないの、こういうとこやぞ?

考えすぎなんだよな...


------

・SPIの受信終了フラグは、正しく動かない。

SPIネタもう一つ。
どうも変なタイミングでフラグが立つようで、
SPI受信割込みで、データレジスタにアクセスすると
正しいデータを取り込めない。


回避策としては、受信終了フラグの代わりに、
送信終了フラグを使う。


まあ、SPIは送信受信同時、全二重なので
送信終了フラグで、受信データを
読みに行っても動きは同じだけどさ。
あとで、ソース読んだ人間が(本人含)
混乱すること必至だよな。

これも難易度高い。


------

まだあったよな...思い出したらまた書く。

| |

« EEPROM | トップページ | 伏線回収 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« EEPROM | トップページ | 伏線回収 »