Up HAL 作成: 2026-09-15
更新: 2026-09-15

4足歩行ロボット > 自律型> コンピュータ > ソフトウェア > HAL/MCU > とは

    マイコンベンダーは,
      ハードウェアの抽象化
      開発支援ツールの提供
    に注力することになる。

    そして,「ハードウェアの抽象化」 の形が,
       HAL : Hardware Abstraction Layer

    マイコンごとに異なる周辺機能
      GPIO, UART, SPI, I2C, ADC, タイマ, DMA など
    を抽象化するために,HAL が一般的に採用される。
    開発者は
      ハードウェア固有のレジスタ操作
    を免れ,アプリケーションロジックの実装に集中できる,というわけ。


  • HAL の実体
    HAL の実体は,
     ・HAL言語ライブラリ
     ・C + HAL言語で書いたソースプログラムを
       MCU の機械語に翻訳する規則 (「ビルダ」)


  • HALライブラリ
    HALライブラリは,大きく以下の機能ブロックに分類される:
    1. 共通HAL
          マイコン全体に関わる機能
          システムクロック設定,
          割り込みコントローラ,
          フラッシュメモリ制御
      などを扱う。
      これは,
        `stm32fxxx_hal.h`
        `stm32fxxx_hal_rcc.h`
      などのヘッダファイルで定義されている。

    2. 周辺機能HAL :
      各周辺機能
          GPIO,UART,SPI,I2C,
          TIM,ADC,DMA,CAN,USBなど
      に対応するドライバ群。
      例えば,UARTであれば
         `stm32fxxx_hal_uart.h`
         `stm32fxxx_hal_uart.c`
      で定義され,
         初期化,
         データ送受信,
         割り込み処理
      などのAPIが提供されれる。

    3. MSP (Microcontroller Specific Package) :
      マイコン固有の低レベル初期化コードを含む層。
         `stm32fxxx_hal_msp.c`
      ファイルに実装され,各周辺機能の初期化時に呼ばれるコールバック関数(例: `HAL_UART_MspInit()`)が含まれる。
      これにより,ハードウェア依存のピン配置やクロック設定をHALライブラリの汎用コードから分離し,移植性を高めている。


  • HAL関数群の構造と命名規則
    HALライブラリの関数は,一貫した命名規則に従っているため,その機能を推測しやすい。
    一般的な命名規則は以下の通り:

     `HAL_PPP_Init()`
       周辺機能PPP(Peripheral)の初期化
     `HAL_PPP_DeInit()`
       周辺機能PPPの初期化解除を行う関数です。
     `HAL_PPP_Read()` / `HAL_PPP_Write()`
       周辺機能PPPからのデータ読み出し/書き込み
     `HAL_PPP_Transmit()` / `HAL_PPP_Receive()`
       通信系周辺機能(UART, SPIなど)でのデータ送受信
     `HAL_PPP_IRQHandler()`
       周辺機能PPPの割り込みハンドラです。
     `HAL_PPP_RxCpltCallback()` / `HAL_PPP_TxCpltCallback()`
       受信/送信完了時に呼ばれるコールバック

    これらの関数は,通常,デバイスのインスタンスを指す構造体へのポインタ(例: `UART_HandleTypeDef *huart`)を引数として受け取り,その構造体を通じてデバイスの状態や設定を管理する。
    これにより,複数の同じ周辺機能(例: UART1, UART2)を同時に扱うことが可能となる。