1. HAL_GPIO_Init:初始化我們需要用到的引腳的工作模式,包括具體引腳的工作速度、是否復(fù)用模式、上下拉等等參數(shù)。 void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef*GPIO_Init)
2. HAL_GPIO_DeInit:將初始化之后的引腳恢復(fù)成默認的狀態(tài)--各個寄存器復(fù)位時的值 void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx,uint32_t GPIO_Pin) 例:HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); 3. HAL_GPIO_ReadPin:讀取我們想要知道的引腳的電平狀態(tài)、函數(shù)返回值為0或1。 GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef*GPIOx, uint16_t GPIO_Pin) 例:GPIO_PinState pinState; pin_State = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_9);
4. HAL_GPIO_WritePin:給某個引腳寫0或1,但是不要理解成,寫1就是使能之類的意思,有些寄存器寫1是擦除的意思 voidHAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinStatePinState) 例:#define LED_G(x) HAL_GPIO_WritePin(GPIOC, GPIO_PIN_15, (x) ? GPIO_PIN_SET :GPIO_PIN_RESET) //配置引腳的初始化電平
5. HAL_GPIO_TogglePin:翻轉(zhuǎn)某個引腳的電平狀態(tài) voidHAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) 例:HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_9);
6. HAL_GPIO_LockPin:如果一個管腳的當(dāng)前狀態(tài)是1,讀管腳值使用鎖定,當(dāng)這個管腳電平變化時保持鎖定時的值,直到重置才改變 HAL_StatusTypeDefHAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) 例:HAL_StatusTypeDef hal_State; hal_State = HAL_GPIO_LockPin(GPIOC, GPIO_PIN_9);
7. HAL_GPIO_EXTI_IRQHandler:這個函數(shù)是外部中斷服務(wù)函數(shù),用來響應(yīng)外部中斷的觸發(fā),函數(shù)實體里面有兩個功能,1是清除中斷標記位,2是調(diào)用下面要介紹的回調(diào)函數(shù)。實際調(diào)用的是下邊的中斷回調(diào)函數(shù) voidHAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) 例:HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
8. HAL_GPIO_EXTI_Callback:中斷回調(diào)函數(shù),可以理解為中斷函數(shù)具體要響應(yīng)的動作。 voidHAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) 例:HAL_GPIO_EXTI_Callback(GPIO_Pin); 9. 使能時鐘 /* 使能時鐘A、B、C、D 這里使能時鐘的方法與標準庫不一樣,HAL庫其實是宏定義,標準庫則是函數(shù)。 */ __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE();
10. HAL_GetTick:獲取系統(tǒng)當(dāng)前運行時間,返回uint32_t類型,時間為毫秒ms。 __weak uint32_t HAL_GetTick(void) __weak修飾符:“弱函數(shù)” 加上了__weak 修飾符的函數(shù),用戶可以在用戶文件中重新定義一個同名函數(shù),最終編譯器編譯的時候,會選擇用戶定義的函數(shù),如果用戶沒有重新定義這個函數(shù),那么編譯器就會執(zhí)行__weak 聲明的函數(shù),并且編譯器不會報錯。 __weak 在回調(diào)函數(shù)的時候經(jīng)常用到。這樣的好處是,系統(tǒng)默認定義了一個空的回調(diào)函數(shù),保證編譯器不會報錯。同時,如果用戶自己要定義用戶回調(diào)函數(shù),那么只需要重新定義即可,不需要考慮函數(shù)重復(fù)定義的問題,使用非常方便,在 HAL 庫中__weak關(guān)鍵字被廣泛使用。
11. HAL_Delay:Delay延時,單位毫秒ms。 __weak void HAL_Delay(__IO uint32_t Delay) 例:HAL_Delay(500); //延時500ms
12. HAL_UART_Transmit:串口發(fā)送數(shù)據(jù) HAL_StatusTypeDefHAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size,uint32_t Timeout) 例:HAL_UART_Transmit(&huart1, MyRxData, 15,100); //發(fā)送串口1數(shù)據(jù) 參數(shù):串口,數(shù)據(jù),大小,超時時間
13. HAL_UART_Receive:串口接收數(shù)據(jù) HAL_StatusTypeDefHAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size,uint32_t Timeout) 例:HAL_UART_Receive(&huart1, MyRxData1, 15,100)//接收串口1數(shù)據(jù) 參數(shù):串口,數(shù)據(jù),大小,超時時間
14. HAL_ADC_Start:開啟ADC轉(zhuǎn)換 HAL_StatusTypeDefHAL_ADC_Start(ADC_HandleTypeDef* hadc) 例:HAL_ADC_Start(&hadc1); //hadc1為ADC_HandleTypeDef變量
15. HAL_ADC_PollForConversion:等待ADC轉(zhuǎn)換完成 HAL_StatusTypeDefHAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout) 例:if (HAL_ADC_PollForConversion(&hadc1, 100)== HAL_OK) //第二個參數(shù)表示超時時間,單位ms
16. HAL_ADC_GetValue:獲取ADC轉(zhuǎn)換數(shù)據(jù) uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef*hadc) 例:KeyADCVal =(WORD)HAL_ADC_GetValue(&hadc1);
17. HAL_ADC_Stop:停止ADC轉(zhuǎn)換 HAL_StatusTypeDefHAL_ADC_Stop(ADC_HandleTypeDef* hadc) 例:HAL_ADC_Stop(&hadc1);
18. HAL_SPI_Transmit:SPI發(fā)送 HAL_StatusTypeDefHAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size,uint32_t Timeout) 例:HAL_SPI_Transmit(&hspi1, data, 2, 100);//SPI發(fā)送data的2個字節(jié),100ms超時 19. HAL_SPI_Receive:SPI接收 HAL_StatusTypeDefHAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size,uint32_t Timeout) 例:while(HAL_SPI_Receive(&hspi1,data, 1, 100) != HAL_OK)//接收1個字節(jié),100ms超時
20. HAL_SPI_TransmitReceive:SPI發(fā)送和接收 HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef*hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout) 例://SPI發(fā)送/接收數(shù)據(jù),tx_data:發(fā)送數(shù)據(jù);rx_data:接收數(shù)據(jù),100ms超時 HAL_SPI_TransmitReceive(&hspi1, tx_data,rx_data, 2, 100);
21. HAL_I2C_Master_Transmit:I2C主機發(fā)送數(shù)據(jù) HAL_StatusTypeDefHAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t*pData, uint16_t Size, uint32_t Timeout) 例:IIC根據(jù)地質(zhì)發(fā)送數(shù)據(jù)到不同的設(shè)備 HAL_I2C_Master_Transmit(&hi2c1, 0x78,data0, 1, 100); //主機發(fā)送數(shù)據(jù)
22. HAL_I2C_Master_Receive:I2C主機接收數(shù)據(jù) HAL_StatusTypeDefHAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t*pData, uint16_t Size, uint32_t Timeout) 例:HAL_I2C_Master_Receive(&hi2c1, 0x78,data1, 1, 100); //主機接收數(shù)據(jù)
23. HAL_I2C_Slave_Transmit:I2C從機發(fā)送數(shù)據(jù) HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef*hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout) 例:HAL_I2C_Slave_Transmit(&hi2c1, data0, 1,100); //發(fā)送數(shù)據(jù)data0
24. HAL_I2C_Slave_Receive:I2C從機接收數(shù)據(jù) HAL_StatusTypeDefHAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size,uint32_t Timeout) 例:if(HAL_I2C_Slave_Receive(&hi2c1,data1, 1, 100) == HAL_OK) //判斷是否接收到數(shù)據(jù)
25. HAL_I2C_Mem_Write:I2C設(shè)備寄存器寫數(shù)據(jù) HAL_StatusTypeDefHAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_tMemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_tTimeout) 例://*hi2c: I2C設(shè)備號指針,這里用的是I2C1: &hi2c1; //DevAddress: 設(shè)備地址;MemAddress: 寄存器地址;MemAddSize: 寄存器長度; //*pData: 數(shù)據(jù)指針;Size: 數(shù)據(jù)長度;Timeout: 超時時間 HAL_I2C_Mem_Write(&hi2c1, 0x78, 0X00, 1,data0, 1, 100); //寫數(shù)據(jù)
26. HAL_I2C_Mem_Read:I2C設(shè)備寄存器讀數(shù)據(jù) HAL_StatusTypeDefHAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_tMemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_tTimeout) 例://*hi2c: I2C設(shè)備號指針,這里用的是I2C1: &hi2c1; //DevAddress: 設(shè)備地址;MemAddress: 寄存器地址;MemAddSize: 寄存器長度; //*pData: 數(shù)據(jù)指針;Size: 數(shù)據(jù)長度;Timeout: 超時時間 HAL_I2C_Mem_Read(&hi2c1, 0x78, 0X00, 1,data1, 1, 100); //讀數(shù)據(jù) 27. HAL_IWDG_Refresh:獨立看門狗數(shù)據(jù)重裝函數(shù) 獨立看門狗使用,獨立看門狗時鐘采用與RTC公用的40KHz的時鐘,與系統(tǒng)時鐘分開,即使系統(tǒng)時鐘掛了,看門狗還是可以工作 例:HAL_IWDG_Refresh(&hiwdg); //重裝看門狗數(shù)據(jù)為4095.
28. 三種編程方式 HAL庫對所有的函數(shù)模型也進行了統(tǒng)一。在HAL庫中,支持三種編程模式:輪詢模式、中斷模式、DMA模式(如果外設(shè)支持)。其分別對應(yīng)如下三種類型的函數(shù)(以ADC為例): HAL_StatusTypeDefHAL_ADC_Start(ADC_HandleTypeDef* hadc); HAL_StatusTypeDefHAL_ADC_Stop(ADC_HandleTypeDef* hadc);
HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef*hadc); HAL_StatusTypeDefHAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc);
HAL_StatusTypeDefHAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length); HAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef* hadc); 其中,帶_IT的表示工作在中斷模式下;帶_DMA的工作在DMA模式下(注意:DMA模式下也是開中斷的);什么都沒帶的就是輪詢模式(沒有開啟中斷的)。
29. HAL_RCC_OscConfig:根據(jù)RCC_OscInitTypeDef結(jié)構(gòu)體中指定的參數(shù)初始化RCC振蕩器 HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) 例:ret=HAL_RCC_OscConfig(&RCC_OscInitStructure);//初始化,RCC_OscInitTypeDef指針 RCC_OscInitTypeDef結(jié)構(gòu)體: typedef struct { uint32_t OscillatorType; //①選定將被配置的振蕩器 uint32_t HSEState; //②HSE狀態(tài) uint32_t LSEState; //③LSE狀態(tài) uint32_t HSIState; //④HSI狀態(tài) uint32_t HSICalibrationValue; //⑤HSI校準調(diào)整值 uint32_t LSIState; //⑥LSI狀態(tài)
#if defined(RCC_HSI48_SUPPORT) uint32_t HSI48State; //⑦HSI狀態(tài),#if defined(RCC_HSI48_SUPPORT) #endif
uint32_t MSIState; //⑧,MSI狀態(tài) uint32_t MSICalibrationValue; //⑨,MSI校準調(diào)整值 uint32_t MSIClockRange; //⑩,MSI頻率范圍 RCC_PLLInitTypeDef PLL; //⑾,PLL結(jié)構(gòu)體參數(shù) } RCC_OscInitTypeDef;
30. HAL_RCC_ClockConfig:根據(jù)RCC_ClkInitTypeDef結(jié)構(gòu)體中指定的參數(shù)初始化CPU、AHB(系統(tǒng)總線)和APB(外圍總線)總線時鐘 HAL_StatusTypeDefHAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency) 例:ret=HAL_RCC_ClockConfig(&RCC_ClkInitStructure,FLASH_LATENCY_2); //同時設(shè)置FLASH延時周期為2WS,也就是3個CPU周期。 RCC_ClkInitTypeDef結(jié)構(gòu)體: typedefstruct { uint32_tClockType; //①,選定將被配置的時鐘 uint32_tSYSCLKSource; //②,用作系統(tǒng)時鐘的時鐘源選擇 uint32_tAHBCLKDivider; //③,AHB時鐘(HCLK)分頻器,該時鐘由SYSCLK而來 uint32_tAPB1CLKDivider; //④,APB1時鐘(PCLK1)分頻器,該時鐘由HCLK而來 uint32_tAPB2CLKDivider; //⑤,APB2時鐘(PCLK2)分頻器,該時鐘由HCLK而來 }RCC_ClkInitTypeDef; |