STM32CubeIDE HAL庫常用涵式

STM32CubeIDE HAL庫常用涵式

常用涵式GPIO

指定GPIO狀態設定

HAL_GPIO_WritePin(GPIOx, GPIO_Pin, PinState);

此涵式是將GPIO設定為HIGH or LOW,其中GPIO_PIN_RESET為LOW(也可以寫0),GPIO_PIN_SET為HIGH(也可以寫1)。

  • GPIOx:GPIO的port設定
  • GPIO_Pin:在某一個port中的第幾隻接腳
  • PinState:設定GPIO_PIN_SET or GPIO_PIN_RESET

翻轉指定 GPIO 引腳的狀態

HAL_GPIO_TogglePin(GPIOx, GPIO_Pin);

如果該引腳目前為高電平(1),則切換為低電平(0);如果目前為低電平(0),則切換為高電平(1)。這個涵式非常適合在嵌入式開發中用來控制引腳的開關狀態,例如閃爍 LED、驅動繼電器等場景。

  • GPIOx:GPIO的port設定
  • GPIO_Pin:在某一個port中的第幾隻接腳

讀取指定 GPIO 引腳的電平狀態

HAL_GPIO_ReadPin(GPIOx, GPIO_Pin);

此涵式使得定時器的指定通道開始輸出 PWM 訊號,PWM 訊號的佔空比和頻率通常在初始化時會配置好。

  • GPIOx:指定要讀取的 GPIO 端口,GPIOA, GPIOB, GPIOC 等(例如 GPIOA)。
  • GPIO_Pin:指定要讀取的接腳,使用 GPIO_PIN_x(如 GPIO_PIN_0, GPIO_PIN_1 等,0 表示第 0 腳,1 表示第 1 腳,以此類推)。

回傳值
此函數傳回引腳的電平狀態,GPIO_PIN_SET 表示高電平,GPIO_PIN_RESET 表示低電平。

常用涵式PWM

啟動指定定時器通道的 PWM 輸出

HAL_TIM_PWM_Start(htim, Channel);

此涵式使得定時器的指定通道開始輸出 PWM 訊號,PWM 訊號的佔空比和頻率通常在初始化時會配置好。

  • htim:指向定時器句柄的指針,指定要使用的定時器實例。例如,htim2 指的是 TIM2 定時器的句柄,通常在定時器初始化時定義並配置。
  • Channel:指定定時器的 PWM 通道(如 TIM_CHANNEL_1, TIM_CHANNEL_2 等),對應不同的接腳。定時器可以有多個通道,每個通道可以輸出獨立的 PWM 訊號。

設定指定定時器通道的比較暫存器值

__HAL_TIM_SetCompare(htim, Channel, Compare_Value);

呼叫 __HAL_TIM_SetCompare 實際上是更新了指定通道的 CCR(捕獲/比較暫存器)值。在 PWM 模式下,CCR 值決定了訊號的高電位持續時間,調整這個值可以動態改變 PWM 的佔空比。

  • htim:指向定時器句柄的指針,指定要使用的定時器實例。例如,htim2 指的是 TIM2 定時器的句柄,通常在定時器初始化時定義並配置。
  • Channel:指定定時器的 PWM 通道(如 TIM_CHANNEL_1, TIM_CHANNEL_2 等),對應不同的接腳。定時器可以有多個通道,每個通道可以輸出獨立的 PWM 訊號。
  • Compare_Value:設定比較值(Compare 值),表示輸出訊號的高電平持續時間。在 PWM 模式中,這個值會影響佔空比。

常用涵式ADC

啟動 ADC 轉換並開啟中斷

HAL_ADC_Start_IT(&hadc);

這個涵式的作用是啟動 ADC 的轉換,並在轉換完成後觸發中斷。
在中斷模式下,ADC 完成一次取樣後會觸發中斷,使 MCU 停止目前任務,跳到指定的中斷服務函數進行處理。
使用中斷可以讓主程式在等待 ADC 完成時執行其他任務,不需要主動輪詢 ADC 的狀態,提升效率。

  • &hadc:指向 ADC 句柄的指針,指定要操作的 ADC 實例。 &hadc 通常是在初始化時配置的 ADC 句柄,如 &hadc1 代表 ADC1。

ADC中斷處理Callback函數

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {
	 if (hadc->Instance == ADC1) {
		 uint32_t adc_value = HAL_ADC_GetValue(hadc); // 讀取轉換結果
		 // 在這裡處理 ADC 結果,例如儲存、顯示等
	 }
     HAL_ADC_Start_IT(hadc);
}

HAL_ADC_ConvCpltCallback 會在 ADC 完成一次轉換、進入中斷模式時自動呼叫。此時,MCU 會跳到此回呼函數來處理資料。
透過 HAL_ADC_GetValue(hadc),可以讀取最新的 ADC 轉換結果,並執行使用者自訂的任務,例如資料處理、儲存等。

常用涵式UART

UART 接收完成Callback函數

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
     HAL_UART_Receive_IT(&huart1, RxBuf, sizeof(RxBuf));
}

HAL_UART_RxCpltCallback 在 UART 接收完成後自動呼叫。此處的代碼 HAL_UART_Receive_IT(&huart1, RxBuf, sizeof(RxBuf)); 是再次啟動接收,確保能夠連續不斷地接收資料。
HAL_UART_Receive_IT 函數啟用 UART 的接收中斷,使 MCU 在接收到指定長度的資料後觸發中斷,從而自動呼叫 HAL_UART_RxCpltCallback。

  • huart:指向 UART 句柄的指標。透過這個參數可以判斷是哪一個 UART 觸發了回調(如 UART1、UART2),方便在多 UART 系統中區分處理。

非阻塞的 UART 傳送涵式

HAL_UART_Transmit_IT(huart, pData, Size);

這個涵式將資料緩衝區 pData 中的內容透過 UART 傳送,並在傳送完成時觸發 HAL_UART_TxCpltCallback 回呼函數。
HAL_UART_Transmit_IT 是非阻塞的,即啟動傳送後,涵式會立即傳回,而不會等待資料傳送完畢。發送的實際過程透過中斷來進行。

  • huart:指向 UART 句柄的指針,指定要使用的 UART 實例。例如,&huart1 表示 UART1 的句柄。
  • pData:指向要傳送的資料緩衝區的指標。這個緩衝區包含要透過 UART 傳送的資料。
  • Size:要傳送的資料大小,表示緩衝區中資料的位元組數。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *