久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5554|回復: 3
收起左側

STM32F103-hal庫函數

[復制鏈接]
ID:423265 發表于 2019-6-14 08:41 | 顯示全部樓層 |閱讀模式
1.      HAL_GPIO_Init:初始化我們需要用到的引腳的工作模式,包括具體引腳的工作速度、是否復用模式、上下拉等等參數。
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef*GPIO_Init)

2.      HAL_GPIO_DeInit:將初始化之后的引腳恢復成默認的狀態--各個寄存器復位時的值
       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:讀取我們想要知道的引腳的電平狀態、函數返回值為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:翻轉某個引腳的電平狀態
voidHAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
例:HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_9);

6.     HAL_GPIO_LockPin:如果一個管腳的當前狀態是1,讀管腳值使用鎖定,當這個管腳電平變化時保持鎖定時的值,直到重置才改變
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:這個函數是外部中斷服務函數,用來響應外部中斷的觸發,函數實體里面有兩個功能,1是清除中斷標記位,2是調用下面要介紹的回調函數。實際調用的是下邊的中斷回調函數
voidHAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
例:HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);

8.     HAL_GPIO_EXTI_Callback:中斷回調函數,可以理解為中斷函數具體要響應的動作。
voidHAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
例:HAL_GPIO_EXTI_Callback(GPIO_Pin);
9.     使能時鐘
/*
       使能時鐘A、B、C、D
       這里使能時鐘的方法與標準庫不一樣,HAL庫其實是宏定義,標準庫則是函數。
*/
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();

10.  HAL_GetTick:獲取系統當前運行時間,返回uint32_t類型,時間為毫秒ms。
__weak uint32_t HAL_GetTick(void)
__weak修飾符:“弱函數”
加上了__weak 修飾符的函數,用戶可以在用戶文件中重新定義一個同名函數,最終編譯器編譯的時候,會選擇用戶定義的函數,如果用戶沒有重新定義這個函數,那么編譯器就會執行__weak 聲明的函數,并且編譯器不會報錯。
__weak 在回調函數的時候經常用到。這樣的好處是,系統默認定義了一個空的回調函數,保證編譯器不會報錯。同時,如果用戶自己要定義用戶回調函數,那么只需要重新定義即可,不需要考慮函數重復定義的問題,使用非常方便,在 HAL 庫中__weak關鍵字被廣泛使用。

11.  HAL_Delay:Delay延時,單位毫秒ms。
__weak void HAL_Delay(__IO uint32_t Delay)
例:HAL_Delay(500); //延時500ms

12.  HAL_UART_Transmit:串口發送數據
HAL_StatusTypeDefHAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size,uint32_t Timeout)
例:HAL_UART_Transmit(&huart1, MyRxData, 15,100); //發送串口1數據
參數:串口,數據,大小,超時時間

13.  HAL_UART_Receive:串口接收數據
HAL_StatusTypeDefHAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size,uint32_t Timeout)
例:HAL_UART_Receive(&huart1, MyRxData1, 15,100)//接收串口1數據
參數:串口,數據,大小,超時時間

14.  HAL_ADC_Start:開啟ADC轉換
HAL_StatusTypeDefHAL_ADC_Start(ADC_HandleTypeDef* hadc)
例:HAL_ADC_Start(&hadc1);  //hadc1ADC_HandleTypeDef變量


15.  HAL_ADC_PollForConversion:等待ADC轉換完成
HAL_StatusTypeDefHAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout)
例:if (HAL_ADC_PollForConversion(&hadc1, 100)== HAL_OK)   //第二個參數表示超時時間,單位ms

16.  HAL_ADC_GetValue:獲取ADC轉換數據
uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef*hadc)
例:KeyADCVal =(WORD)HAL_ADC_GetValue(&hadc1);

17.  HAL_ADC_Stop:停止ADC轉換
HAL_StatusTypeDefHAL_ADC_Stop(ADC_HandleTypeDef* hadc)
例:HAL_ADC_Stop(&hadc1);

18.  HAL_SPI_Transmit:SPI發送
HAL_StatusTypeDefHAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size,uint32_t Timeout)
例:HAL_SPI_Transmit(&hspi1, data, 2, 100);//SPI發送data2個字節,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個字節,100ms超時

20.  HAL_SPI_TransmitReceive:SPI發送和接收
HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef*hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout)
例://SPI發送/接收數據,tx_data:發送數據;rx_data:接收數據,100ms超時
HAL_SPI_TransmitReceive(&hspi1, tx_data,rx_data, 2, 100);

21.  HAL_I2C_Master_Transmit:I2C主機發送數據
HAL_StatusTypeDefHAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t*pData, uint16_t Size, uint32_t Timeout)
例:IIC根據地質發送數據到不同的設備
HAL_I2C_Master_Transmit(&hi2c1, 0x78,data0, 1, 100); //主機發送數據

22.  HAL_I2C_Master_Receive:I2C主機接收數據
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); //主機接收數據

23.  HAL_I2C_Slave_Transmit:I2C從機發送數據
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); //發送數據data0

24.  HAL_I2C_Slave_Receive:I2C從機接收數據
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) //判斷是否接收到數據

25.  HAL_I2C_Mem_Write:I2C設備寄存器寫數據
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設備號指針,這里用的是I2C1: &hi2c1
//DevAddress: 設備地址;MemAddress: 寄存器地址;MemAddSize: 寄存器長度;
//*pData: 數據指針;Size: 數據長度;Timeout: 超時時間
HAL_I2C_Mem_Write(&hi2c1, 0x78, 0X00, 1,data0, 1, 100); //寫數據

26.  HAL_I2C_Mem_Read:I2C設備寄存器讀數據
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設備號指針,這里用的是I2C1: &hi2c1
//DevAddress: 設備地址;MemAddress: 寄存器地址;MemAddSize: 寄存器長度;
//*pData: 數據指針;Size: 數據長度;Timeout: 超時時間
HAL_I2C_Mem_Read(&hi2c1, 0x78, 0X00, 1,data1, 1, 100); //讀數據
27.  HAL_IWDG_Refresh:獨立看門狗數據重裝函數
獨立看門狗使用,獨立看門狗時鐘采用與RTC公用的40KHz的時鐘,與系統時鐘分開,即使系統時鐘掛了,看門狗還是可以工作
例:HAL_IWDG_Refresh(&hiwdg); //重裝看門狗數據為4095.

28.  三種編程方式
  HAL庫對所有的函數模型也進行了統一。在HAL庫中,支持三種編程模式:輪詢模式、中斷模式、DMA模式(如果外設支持)。其分別對應如下三種類型的函數(以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:根據RCC_OscInitTypeDef結構體中指定的參數初始化RCC振蕩器
HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef  *RCC_OscInitStruct)
例:ret=HAL_RCC_OscConfig(&RCC_OscInitStructure);//初始化,RCC_OscInitTypeDef指針
RCC_OscInitTypeDef結構體:
typedef struct
{
  uint32_t OscillatorType; //①選定將被配置的振蕩器        
  uint32_t HSEState;    //②HSE狀態              
  uint32_t LSEState;    //③LSE狀態            
  uint32_t HSIState;    //④HSI狀態            
  uint32_t HSICalibrationValue;  //⑤HSI校準調整值  
  uint32_t LSIState;       //⑥LSI狀態         

#if defined(RCC_HSI48_SUPPORT)
  uint32_t HSI48State; //⑦HSI狀態,#if defined(RCC_HSI48_SUPPORT)            
#endif

  uint32_t MSIState;      //⑧,MSI狀態              
  uint32_t MSICalibrationValue; //⑨,MSI校準調整值  
  uint32_t MSIClockRange;   //⑩,MSI頻率范圍      
  RCC_PLLInitTypeDef PLL;   //⑾,PLL結構體參數         
} RCC_OscInitTypeDef;

30.  HAL_RCC_ClockConfig:根據RCC_ClkInitTypeDef結構體中指定的參數初始化CPU、AHB(系統總線)和APB(外圍總線)總線時鐘
HAL_StatusTypeDefHAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency)
例:ret=HAL_RCC_ClockConfig(&RCC_ClkInitStructure,FLASH_LATENCY_2);  //同時設置FLASH延時周期為2WS,也就是3個CPU周期。
RCC_ClkInitTypeDef結構體:
typedefstruct
{
  uint32_tClockType;       //①,選定將被配置的時鐘            
  uint32_tSYSCLKSource;     //②,用作系統時鐘的時鐘源選擇         
  uint32_tAHBCLKDivider;    //③,AHB時鐘(HCLK)分頻器,該時鐘由SYSCLK而來      
  uint32_tAPB1CLKDivider;    //④,APB1時鐘(PCLK1)分頻器,該時鐘由HCLK而來      
  uint32_tAPB2CLKDivider;    //⑤,APB2時鐘(PCLK2)分頻器,該時鐘由HCLK而來      
}RCC_ClkInitTypeDef;
回復

使用道具 舉報

ID:525821 發表于 2019-6-15 05:59 | 顯示全部樓層
用著方便,謝謝。
回復

使用道具 舉報

ID:595380 發表于 2019-8-7 10:20 | 顯示全部樓層
thanks
回復

使用道具 舉報

ID:584195 發表于 2021-8-11 07:20 | 顯示全部樓層
期待樓主多出教程,學習了,謝謝!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品永久免费视频 | 日本精品一区二区三区在线观看视频 | 一级看片免费视频 | 日本一区二区不卡 | 精品欧美激情精品一区 | 欧美日韩在线精品 | 日日操视频 | 亚洲欧洲成人av每日更新 | 精品久久中文字幕 | 欧产日产国产精品99 | av中文字幕在线 | 欧美亚洲国产一区二区三区 | www.国产.com | 一级片在线观看 | 日日干天天操 | 色黄网站| 精品国产欧美 | 精品视频一区二区 | 日韩在线观看 | 久久精品成人一区 | 日韩在线一区二区三区 | 日韩中文字幕在线观看视频 | 四虎影院在线播放 | 久久精品国产99国产精品 | 99re热精品视频 | 国产精品激情小视频 | 欧美区精品| www亚洲成人 | 国产精久久久久久久妇剪断 | 免费激情网站 | 成人在线黄色 | 亚洲欧美激情精品一区二区 | 亚洲高清视频在线观看 | 亚洲成av人片在线观看 | 最新国产精品精品视频 | 精品中文字幕一区二区三区 | 天堂一区二区三区 | 久久久久久久久久久高潮一区二区 | 黄频免费 | 国产一区二区三区久久久久久久久 | 久久久99国产精品免费 |