Help us understand the problem. What is going on with this article?

【手抜き】STM32の使い方まとめ 番外. 「私、マクロを使えって言ったよね!?」

久しぶりの投稿です。
とっても短いページになる予定です。

事の始まり

そろそろ後輩にいろいろ教えないとと思って、相変わらず手抜きの資料集めをしたのですが
PWM, Encoderモードについて、その値を構造体で直接いじっている記事が多すぎる…
やめてやめて~~

Timer

というかこれに関する記事しかない。

PWM

みなさん、PWMのDuty比を設定するときにどうしてますか??
まさか htim1->Instance->CCR1=<Duty>;
とかしてないですよね??

__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, <duty>);
ですよですよ??

Period

たまに、タイマのPeriod値(CubeMXで設定したタイマの最大の値)が欲しいときがあるでしょう。
この時は
__HAL_TIM_GET_AUTORELOAD(&htim1);
を使いましょう。

Encoder mode

はい。一番事故ってる記事が多いのがこれ。
エンコーダ値の読み方がわからなかったからと
cnt=htim1->Instance->CNT;
って人が大多数!!

__HAL_TIM_GET_COUNTER(htim1);

ですね。。

タイマについてのまとめ

それぞれの使用法について特化して書きましたが、実は上記のマクロは使い方に寄りません。
例えば、COUNTERはそのままカウンターのことですから、ただのカウントアップとして(HAL_TIM_Base_Start())使う場合でも使いますし、
コンペアマッチモードではCOMPAREを使うでしょう。

また、もちろんSETがあれば、GETがありますし、vice versa。

こんなこと言ってる理由

いや、構造体直接引っ張り出したらHAL Driverの意味を消失してるのでは。。
HALってなんでこんなにいろんな名前長いんだろーってのは、誰が読んでも何してるのかわかるため、ですよね?可読性というやつですか?
だから、直でレジスタをたたくようなところを関数なりマクロでコーディングしているわけですから、もうちょっとSTさんの意向をくみ取りましょう。

注記

他の機能についても同じようにマクロがあるはずです。

HALのドキュメントUM1725(このリンクはforF4)では
機能ごとに分かれて、順に

  • 設定用などの構造体
  • 手順(ここが弱い)
  • 関数
  • マクロ・列挙体(構造体に代入する設定項目など)

が、並んでいます。
もし、やりたいことが、関数になかった場合はマクロを探してみてください。
逆に関数にある場合(割り込みの許可不許可など)は関数を積極的に使うようにします。

直接レジスタたたいたり、構造体をいじるならHALはいらないよね?

相互リンク(随時更新@2020/03/09)

【手抜き】STM32の使い方まとめ
(まだない記事は今後変更の可能性があります)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away