STM32勉強日記(2021/7/3)
こんにちは
ユキです。
先週の続きで、とりあえず、mbedのプログラム確認から行う。
これで、基板とmbedの接続及び動作が確認出来たので、STM32のプログラムを再度開始する。
問題なく動いた。 これでやっとSTM32のプログラムに入れるわけだ。
先週使用できないピンが分かったので、STM32のプログラムの方も変更していく。
ただ、設定部分は忘れてしまったので、再度STM32の教材を参照して、設定した。
NVIC Setting:割り込み設定をONにし、1に設定する。
これは、数値が小さいほど、割り込み順位が高い。
Baud Rate:ボーレートを9600に変更する。
今回は、ボーレートはDFplayerのデフォルト値である9600に設定する。
ボーレートは通信速度を早くしたい場合は、高く設定するが、
その分波形が崩れてしまうため、通信の安定性が悪くなってしまう。
今回はそこまでの速度を必要としないので、デフォルト設定で使っていく。
CPU(HCLK)のクロック周波数設定をする。
前は、いわれた通りに設定したけど。さて、これは高い方がいいのか、低くてもいいのだろうか・・
クロック周波数の意味を調べてみる。
なんとなくだが、クロック周波数が高いほど、処理速度が早くなる。 つまり、ボタンを押したときとかの反応速度に差が出てくるという事だろう。
だから、GPIOの演習では、84MHzにしていて、UART通信の演習では16MHzのままだったのかな。
クロック周波数が高いほど消費電力が大きくなるらしいし、
とりあえず、16MHzで設定しておいて、ボタンを押したときなどに押しても反応しないなどの駄目な部分があれば、後で変えることにした。
PC_13のGPIO modeを資料通り、、Extemal interrupt Mode with Falling edge trigger detectionに変更する。
これは、ボタンが押されたとき、割り込みを発生させるということだろう。
これが、Fallingじゃなくて、Raisingにすると、ボタンが押して、離したときに割り込みを発生させるという事になるんだと思う。
一通り設定が終わったら、コードを出力して、プログラミングに入った。
問題は、ここからだ。
mbedでは、人のライブラリを使って出来たが、STM32では、UARTでコマンドを送って制御する予定だ。
とりあえず、確認するべき事としては
DFplayerにどのコマンドを送ればいいのか。
STM32でどうやって、DFplayerにコマンドを送るのかだ。
調べてみたけど、色々あってようわからん。
前と同じ感じだ・・・
まずは、DFplayerのデータを読み込んで、送る必要のあるコマンドを調べる所から始めよう。
データシートは英語なので、英語弱者の私はgoogle先生にお願いして、日本語に直してもらう。
ただ、このPDFコピペが出来ないので、辛い・・・
と思って、日本語訳が無いか探したところ、素晴らしいものが。
ここに、KT403AというDFplayerminiの互換品のデータシートを分かりやすく日本語化してくださったものがありました。
シリアル通信部分は、ほぼほぼDFplayerと変わらないので、これがそのまま見て使えそうです。
送るコマンドの目途はついたので、次はUARTでデータを送る方法について、調べていきます。
とりあえず、前行った復習もかねて、上の設定で、Teratermに出力するだけのプログラムを作った。
簡単だろって思ったのに、できない・・・・・
何故だぁああああって色々やって分かったのが、
前回 huart2はPC用と接続する用になっているため、外部とのやりとりには使えないと分かりましたが。
今度は、huart1は、外部と接続するポートになっているから、PCと通信は出来ないわけですね・・・
まあ、考えてみればあたりまえですが、めっちゃ時間使った・・・
とりあえず、ようやく、Teratermに文字を出力するプログラムが完成した。
ここまでで既に5時間たってるぞ・・・
上の設定を、デバック用にTeratermで出力して見たいから、huart1とhuart2両方出来るようにCubeMxで変更した。
無事に、huart2で、テラタームで出力することが出来た。
次は、DFplayerでは、複数のコードを送らないと行けない。
そのまま全部用意するのは非常に面倒かつ、やってみたが、出来なかった・・
STM32と外部機器とのUART通信について調べてみたが、全然検索にひっかからない。
どうするんじゃい・・・
UARTの送信について調べた結果:
HAL_StatusTypeDef HAL_UART_Transmit (UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size,uint32_t Timeout)
HAL_UART_Transmit(&huart2,data2,strlen((char*)data2,100);
第一引数:UARTハンドラ
第二引数:送信するために格納されたバッファ
(pData: Pointer to data buffer (u8 or u16 data elements))
第三引数:送信byte数
第四引数:タイムアウト時間
色々調べたけど、うーーん、分からん。
ちょっと中途半端になってしまいましたが、今日はこれで終わりです。
明日また続きをやります。