ArmマイコンにTRY6 I2Cを使ってみる。
写真はNECLEO STM32F446RE評価ボードで、プログラム作成にTRYの様子。
2024.01.25
はじめに
「ARMマイコンにTRY6」では、I2CにTRYです。
SDRトランシーバーでは、今まで、PICマイコンでPLLやデジタルポテンションメーターなどのICをI2C制御で使ってきましたが、今回はSTM32F446マイコンを
マスターモードとして制御してみます。
STM32F446のI2C
STM32F446のI2Cは、7bit叉は10bitアドレスモード、100k/400k/1Mのクロック対応で、PLL IC(Si5351)やデジタルポテンション(MCP4018)の制御
には十分なスペックです。
プロジェクトの作成、コード生成
まずは、制御データが1ヶのみの簡単なMCP4018でTRYしてみます。
-1.「Lチカ」でのプロジェクト作成手順に同じですが、プロジェクト名は適当に「renshyuI2C」とします。
-2.続いて、ピン配置の設定。PB8をI2C1 SCL、PB9をI2C1 SDAに設定、デフォルト状態では、それ以外のピンも設定されていますが、reset_stateにします。
-3.続いて、パラメーターの設定、Categories欄をクリックConectivity > I2C1にチェック ModeをI2C、他はデフォルトでOK。
ちなみにデフォルト状態では、speedがstandard(100k)ですが、Fast modeにすれば400kを選択できます。
-6.次にメニュー欄のコード生成ボタン(歯車マーク)をクリックで、ひな型コードが表示されます。
ソースコードの記述1
|
/* User code Begin2 */ 〜 /* User code End2 */ の間に、左図ソースコード(クリックで拡大)を挿入。
MCP4018のアドレスは0x2Fですが、LSBにWriteモードを示す0を挿入するので、1bit分左シフトします。アドレスはシフトした結果の0x5Eと記述してもOKです。
92行目で書き込むデータを配列で準備、ここではMCP4018にセットする値のデータを書き込むので配列要素数1ヶ分になり
配列名は適当にi2c_buf、要素数は[1]とします。
93行目に書き込むデータを配列[0]に設定します、ここでは適当に0x5Fとしています。
95行目にHAL関数、第3引数で配列名を記述してi2c_buf{0}のデーターを、第4引数で送出するデーター数(この場合1)、第5引数でタイムアウト(msec)を記述します。
次に、ビルド(トンカチマークアイコン)をクリックしてエラーがなければ、PCとボードをUSB接続してRunをクリックすればプログラムが書き込まれ、データに応じた出力
電圧がでます。
|
ソースコードの記述2
|
次に、Si5351にTRYします、MC4018に比較し書き込みレジスタやデーターが複数あるので書き込みフローは、少し複雑になります。
/* User code Begin2 */ 〜 /* User code End2 */ の間に、左図ソースコード(クリックで拡大)を挿入。
Si5351の周波数、パラメーター設定のやり方はこちらを参考にして、パラメーターは事前に計算された値を使用します。
ここでは、CLK0を7.96MHz、パラメーターはPLL部 P1=2748(0x0ABC) P2=27136(0x6A00) P3=65536(0xFFFF)
シンセ部 P1=9728(0x2600) P2=0(0x00) P3=1(0x01)で入力します。
Si5351のアドレスは0x60ですが、LSBにWriteモードを示す0を挿入するので、1bit分左シフトします。アドレスはシフトした結果の0xC0と記述してもOKです。
92〜95行目で書き込むデータを配列で準備、配列要素[0]にレジスタアドレス、続いてデータを記述し、配列名は適当にreg_xxxとし、要素数はアドレスの1ヶと書き込む
データー数を加えた数とします。
連続した複数レジスタへの書き込みは、配列要素[0]に先頭アドレスを書けば、自動的にアドレスがインクリメントされていきます。
97〜100行目でHAL関数を使って初期設定と周波数パラメーター設定、第3引数で配列名を記述して、第4引数で送出するデーター数(この場合1)、第5引数でタイムアウト
(msec)を記述します。
その後、パワーON等の処理の為、配列データーを変更して、再度HAL関数でデータを書き込みます。
ビルド(トンカチマークアイコン)をクリックしてエラーがなければ、PCとボードをUSB接続してRunをクリックすればプログラムが書き込まれ、7.95980MHzが出力されます。
HAL関数は、他にHAL_Mem_Write()という関数もあったり、もっとうまいやり方もありそうですが、今後の課題とします。
|
テスト回路
|
左図外付け回路(クリックで拡大)を追加しボード上コネクタCN5-9、10に接続、プルアップ抵抗は4.7k、3.3Vは外部から供給しました。
Si5351は秋月電子のモジュールを使用しました
|
今後の進め方
Lチカからスタートした「STMマイコンにTRY」ですが、ここまではほとんどコードを書かずHAL関数のみできました。次回からは、SDRとしてまとめるにもう少し実践的な
ソフトにTRYです。
ADに戻る
Top Menu