我的程序庫01_HAL庫文件的頭文件結(jié)構(gòu)


title: 我的程序庫01_HAL庫文件的頭文件結(jié)構(gòu)
tags: 編程,STM32,函數(shù)庫,程序庫
grammar_cjkRuby: true


防重復(fù)編譯和C++沖突申明

其中#ifndef 是為了防止重復(fù)編譯,cplusplus 是為了防止編譯沖突
#ifndef __STM32F4xx_HAL_USART_H  //如果沒有包含過頭文件,則包含進(jìn)去
#define __STM32F4xx_HAL_USART_H 

#ifdef __cplusplus  //如果編譯器是C++,則下面的語句以C語言進(jìn)行編譯,這里是為了兼容C++調(diào)用
extern "C" { 
#endif

包含頭文件

其中HAL_DEF文件包含了一些HAL要用到的標(biāo)志數(shù)據(jù)結(jié)構(gòu)枚舉等

#include "stm32f4xx_hal_def.h"  
 HAL_OK       = 0x00U,
  HAL_ERROR    = 0x01U,
  HAL_BUSY     = 0x02U,
  HAL_TIMEOUT  = 0x03U

結(jié)構(gòu)體的定義,包括如下幾個結(jié)構(gòu)體

 1. USART_InitTypeDef
 //   通信的初始化一般有,模式設(shè)置,數(shù)據(jù)速度,數(shù)據(jù)格式和時鐘
 2. HAL_USART_StateTypeDef
   狀態(tài)包括了:是否初始化過,發(fā)送和接收忙,以及錯誤和超時

模塊的虛擬化結(jié)構(gòu)體USART_HandleTypeDef

typedef struct
{
  USART_TypeDef                 *Instance;     //所有模塊寄存器的地址都在這里定義
  USART_InitTypeDef             Init;             //初始化結(jié)構(gòu)體
  
  uint8_t                       *pTxBuffPtr;      //發(fā)送的數(shù)據(jù)從哪里取
  uint16_t                      TxXferSize;       //發(fā)送數(shù)據(jù)的長度
  __IO uint16_t                 TxXferCount;     //發(fā)送數(shù)據(jù)計數(shù)
  
  uint8_t                       *pRxBuffPtr;      /./接收的數(shù)據(jù)從哪里取
  uint16_t                      RxXferSize;       /接收數(shù)據(jù)的長度
  __IO uint16_t                 RxXferCount;   //接收數(shù)據(jù)計數(shù)
  
  DMA_HandleTypeDef             *hdmatx;        //發(fā)送數(shù)據(jù)的DMA模塊
  DMA_HandleTypeDef             *hdmarx;        //接收數(shù)據(jù)的DMA模塊
  
  HAL_LockTypeDef                Lock;            //模塊鎖存,在進(jìn)行初始化的時候不再使用
  __IO HAL_USART_StateTypeDef    State;     //通信狀態(tài),在上面的枚舉體中
  __IO uint32_t                  ErrorCode;     //錯誤碼

}USART_HandleTypeDef;

定義數(shù)據(jù)結(jié)構(gòu)體要用的模塊常量

其中錯誤碼,標(biāo)志,中斷和標(biāo)志,時鐘使能這五個常量大部分的模塊都會有,其他為特殊功能性的。
// 1. 錯誤碼:
 //2. 數(shù)據(jù)長度:
// 3. 停止位
 //4. 校驗
 //5. 模式:
 //6. 時鐘使能:
 //7. 極性
 //8. 相位
 //9. 停止位
 //10. 響應(yīng)
 //11. 標(biāo)志位
 //12. 中斷

定義一些簡單的宏定義函數(shù)

  __HAL_USART_RESET_HANDLE_STATE //復(fù)位USART模塊
 __HAL_USART_GET_FLAG //獲取標(biāo)志
 __HAL_USART_CLEAR_FLAG //清標(biāo)志位
__HAL_USART_CLEAR_PEFLAG //清模塊掛起
 __HAL_USART_CLEAR_FEFLAG//FE //清快速使能標(biāo)志
 __HAL_USART_CLEAR_NEFLAG //清互補(bǔ)輸出
 __HAL_USART_CLEAR_OREFLAG//清OVER溢出
 //中斷相關(guān)函數(shù)
 __HAL_USART_ENABLE_IT // 中斷使能
 __HAL_USART_DISABLE_IT //中斷去使能
 __HAL_USART_GET_IT_SOURCE
 
 __HAL_USART_ONE_BIT_SAMPLE_ENABLE //一位采樣模式使能和失能
 __HAL_USART_ENABLE //UART模塊使能和失能

初始化和去初始化的函數(shù)

HAL_StatusTypeDef HAL_USART_Init(USART_HandleTypeDef *husart);
HAL_StatusTypeDef HAL_USART_DeInit(USART_HandleTypeDef *husart);
void HAL_USART_MspInit(USART_HandleTypeDef *husart);
void HAL_USART_MspDeInit(USART_HandleTypeDef *husart);
其中MspInit是用于HAL_USART_Init的調(diào)用,其中此函數(shù)為weak函數(shù),如果需要進(jìn)行修改,我們也可以自己定義。

模塊的IO功能函數(shù)組

//發(fā)送和接收
HAL_USART_Transmit //發(fā)送
HAL_USART_Receive //接收
HAL_USART_TransmitReceive // 全雙工下的數(shù)據(jù)通信

//中斷
HAL_USART_Transmit_IT //發(fā)送中斷
HAL_USART_Receive_IT // 接收中斷
HAL_USART_TransmitReceive_IT //收發(fā)中斷

//DMA相關(guān)
HAL_USART_Transmit_DMA
HAL_USART_Receive_DMA
HAL_USART_TransmitReceive_DMA //
HAL_USART_DMAPause //暫停
HAL_USART_DMAResume //重啟
HAL_USART_DMAStop //停止

//終止函數(shù)
HAL_USART_Abort
HAL_USART_Abort_IT //終止和終止中斷

//中斷和回調(diào)函數(shù),回調(diào)函數(shù)全是弱定義“ __weak”
HAL_USART_IRQHandler  //中斷入口
HAL_USART_TxCpltCallback  //發(fā)送完成回調(diào)
HAL_USART_TxHalfCpltCallback //發(fā)送一半
HAL_USART_RxCpltCallback  //
HAL_USART_RxHalfCpltCallback
HAL_USART_TxRxCpltCallback   //雙工發(fā)送接收完成
HAL_USART_ErrorCallback   //錯誤
HAL_USART_AbortCpltCallback //終止

//獲取狀態(tài)和錯誤狀態(tài)標(biāo)識
HAL_USART_GetState
HAL_USART_GetError

私有類型,私有變量和私有常量

這個是上面的IO函數(shù)要用到的私有參數(shù),可以不關(guān)注
// Private types
//Private variables 
// Private constants 
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容