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は送信受信同時、全二重なので
送信終了フラグで、受信データを
読みに行っても動きは同じだけどさ。
あとで、ソース読んだ人間が(本人含)
混乱すること必至だよな。
これも難易度高い。
------
まだあったよな...思い出したらまた書く。
| 固定リンク | 0
コメント