gombeのブログ

マイコンの電子工作系PIC32/KiCad/C/C++/3D/

HALってこう使うものだ(自称

図は汚いです。後の図はもっと綺麗なので。重要なのはどのようにしてHALを叩くのかです。

私はこのような形でHALを触っています。これはHALを直でユーザーが触るのだけは避けています。なぜなら変更があった時などに対応できなくなるからです。が、GPIOだけはHALが触っています。これまではちょっとできない(苦笑

mspは入出力設定を書きます。リマップ、GPIOのクロックなどもここで設定します。あとクロックはmspの関数内の前に書かないと設定が書き込まれません。。。

上位レイヤーズ

SystemTaskManagerはシステムのタスクマネージャのことで、これは5msごとに処理、通信を繰り返します。処理はApplicationLayerが担当し、通信はDeviceDriverが担当します。MWはMiddleLayerのことでこれはHALを代わりに叩いてくれるものです。

このような構造にすることでメンテ性の向上、同様のプロジェクトで同様のひな形が使えるようになります。

あとHALに関係ないのだがSTM32F1についてのDMAもメモ

DMAの転送要求はchごとに決められたものでしか出せない。これは非常に使いにくいし他のマイコンやっている私としては本当になんだかorzって感じ。まあしょうがないのかなと思いつつUARTとI2CをDMA使おうと思ったら両方とも同じchに割り当てられていたりなんか本当にkz(以下ry)。