常用涵式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:要傳送的資料大小,表示緩衝區中資料的位元組數。