STM32 HAL、ゆっくり勉強中

STM32マイコンのHALをゆっくりと勉強中です。

このブログでも少し紹介しましたが、GPIOを一通りいじって理解できたところです。割り込みについても簡単な実験をしましたが、多分ブログに書いたことは間違っているので書き直しが必要です。STM32のHALでは割り込みハンドラをユーザーに触らせず、weak宣言されたHALのデフォルト・コールバックをユーザーによってオーバーライドさせる方針のようです。

最近はI2CのHALをいじっています。STM32のI2C HAL関数には

  • ポーリングによる制御
  • 割り込みによる制御
  • DMA制御

の三種類があります。これらについては意図するところもわかりやすいです。が、これらの他に「メモリへの転送」というよくわからない関数があって困惑しています。今のところ無視して困っていません。しかし当たり前のようにこの関数を使っている方々も居て、少々居心地が悪いです。そもそもマニュアルに何も説明していないというのは、いったいどういう了見でしょうか。

それから、STM32のI2C HAL関数には”sequential”と名付けられた関数があります。これは最初何のことやらわからなかったのですが、I2Cのrepeated startを扱う関数群だそうです。だったら、”repeated_start”と名付ければいいのです。わざわざ見当違いの名前に変えるとは、いったいどういう了見でしょうか。

また、これらのrepeated startに対応する関数は割り込み転送には対応していますが、DMA転送には転送していません。いったいどういう了見でしょうか。

そして何より、I2Cデバイス・アドレスを「1 bit左にシフトして」引数に渡せと書いてあります。デバイスのレジスタどころか、I2Cプロトコルのビット配置にあわせるためにC言語の関数の引数をユーザーに調整させるとは驚きです。なぜ、コンピュータができることを人間にやらせるのでしょうか。STの技術者はHALがHardware Abstraction Layerの略であることを知らないか、Abstraction – 抽象とは物事の細かい事を覆い隠すことだと知らないようです。知らないのにHALを設計するとは、いったいどういう了見でしょうか。

何というか、我々人類と違う現実把握能力を持つ宇宙人が英語で書いた文書を読み解いている気分ですが、とにかくSTM32 マイコンのHALを勉強しています。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください