カウンタ

パルス幅はひとまず置いておいて、カウンタを試してみます。 プログラムはこんなの。難しいところはなさそう? 難しさと言えば、多機能ボードなのでいろいろな端子が すでに使われていて、残りの端子でなんとかする必要が あります。 今回はタイマ2のETRをカ…

パルス幅入力(2)

更新がいつものペースに戻った感じもしますが、 少しずつ活動は続けています。 パルス幅入力は、とりあえず動くようになったのですが、 気に入らないところがあって、そこを直すと動かなく なってしまうのです。 何か勘違いがあるのだと思いますが、現時点で…

パルス幅入力(1)

超音波距離センサを使ってみたいと思い、パルス幅入力を 試しました。使ったセンサはこれ: akizukidenshi.com 超音波を出して反射して戻ってくるまでの間センサからHighを 出力します。このセンサ出力がHighになっている時間を 測定すると、音速を使って距…

USB CDCがエラーになる要因

USB CDCがなぜかエラーになる場合があって、 その要因の一つがわかったので忘れないように 書いておきます。 本来ならUSBの設定を行ったときに、その割り込みハンドラである OTG_FS_IRQHandlerが生成されるはずですが、なぜか生成 されない場合があるようで…

I2C

I2Cで接続されたセンサを使ってみます。 最近は、まず参考になりそうな先人を探すところからスタートです。 今回はこの方の簡潔な説明を見て、考えながら試行錯誤しました。 単にセンサにアクセスするだけなら、これで十分な気がします。 meerstern.seesaa.n…

PWM

A-D変換でやってみたいことはあるのですが、先にPWMを試してみます。 ごく単純にLEDの明るさを変えるプログラムを作ります。 PB4にLEDがつながっていて、PB4はTIM3のCH1でもあるので TIM3を使ってPWMを実現します。 大量にあるPWMの情報の中から、今回参考に…

A-D変換 DMAの利用

今回は驚異的な進み方ですね。 次に、DMAを使ってみます。 A-D変換が完了したとき、これまではHAL_ADC_GetValueを呼び出して変換結果を取り出していましたが、わざわざ呼び出さなくても変数に格納してもらえるとうれしいわけです。DMAを使えばそれが可能にな…

A-D変換 変換完了割り込みの利用

次に、変換完了割り込みを使います。 前回とは、CubeMXでADC1の割り込みを有効にする点が 大きく違います。 Preemption Levelは、以前のタイマの時と同様にデフォルトの0から1に変更します。 ソースコードは、割り込みハンドラではフラグadcDoneFlagを立てる…

A-D変換 基本編

続いて、A-D変換に取り組みます。 検索してみると何か難しいところがあるようなので 注意が必要ですね。 簡単なところから、順番に進めていきます。 先人の知恵によると、 A-D変換を起動するトリガ、A-D変換完了時の割り込み、 A-D変換結果のDMA転送の3つが…

タイマ割り込み

STM32マイコンに多数用意されたタイマのうち、 ベーシックタイマであるTIM6を使って、 1秒ごとに割り込みを発生させて Lチカを行います。 まず、TIM6の設定を行います。 ベーシックタイマというだけあって、 上半分はほぼ設定がありません。 下半分では、タ…

USB CDC

今回のボードはデバッガがないので、printfデバッグになる予感がします。そこでUSB CDCでPCにメッセージを表示できるようにしてみます。 まずは、先人の知恵を調べてみると、次のようなところが見つかりました。 これらを参考に進めてみます。 blueeyes.saku…

HAL_Delay

いわゆるLチカをするときに、点滅の間隔の時間待ちをどうやって作るか、という問題があります。 とりあえず100万回ループとかにするわけですが、STM32Cubeを使うとHAL_Delayなるものがあることを知りました。引数はミリ秒単位で与え、例えばHAL_Delay(1000)…

STM32CubeIDE

開発環境として、STM32CubeIDEのバージョン1.0.0が公開されていました。これまではAtollicのTrueSTUDIOを使っていましたが、乗り換えてみます。 STM32CubeMXが統合されているので、これまでのようにコード生成時に毎回IDEを選択する必要がなくなって便利な気…