HAL Function
HAL Function
1. GPIO Functions
HAL_GPIO_Init()
• Example:
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_5; // Example: PA5
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
HAL_GPIO_WritePin()
• Example:
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // Set PA5 HIGH
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // Set PA5 LOW
HAL_GPIO_TogglePin()
• Example:
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); // Toggle PA5
HAL_GPIO_ReadPin()
• Example:
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET) {
// PA0 is HIGH (e.g., button pressed)
}
2. UART Functions
HAL_UART_Transmit()
• When to Use: Transmit a string or buffer (e.g., send "Hello World" to a PC).
• Example:
char msg[] = "Hello World\r\n";
HAL_UART_Transmit(&huart2, (uint8_t*)msg, strlen(msg), 100); // Timeout:
100 ms
HAL_UART_Receive()
• When to Use: Read a fixed number of bytes (e.g., wait for user input).
• Example:
uint8_t buffer[10];
HAL_UART_Receive(&huart2, buffer, 10, 100); // Wait for 10 bytes
HAL_UART_Transmit_IT() / HAL_UART_Receive_IT()
• Example:
// Start non-blocking transmission
HAL_UART_Transmit_IT(&huart2, (uint8_t*)msg, strlen(msg));
3. Timer Functions
HAL_TIM_Base_Start()
• Example:
HAL_TIM_Base_Start(&htim2); // Start TIM2
HAL_TIM_PWM_Start()
• Example:
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); // Start PWM on TIM3 Channel 1
HAL_TIM_IC_Start_IT()
• Example:
HAL_TIM_IC_Start_IT(&htim4, TIM_CHANNEL_2); // Measure on TIM4 Channel 2
4. ADC Functions
HAL_ADC_Start() / HAL_ADC_PollForConversion()
• Example:
HAL_ADC_Start(&hadc1); // Start ADC1
if (HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK) {
uint16_t adc_value = HAL_ADC_GetValue(&hadc1); // Read result
}
HAL_ADC_Start_IT()
• Example:
HAL_ADC_Start_IT(&hadc1); // Start ADC1 with interrupt
// Implement callback:
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {
uint16_t adc_value = HAL_ADC_GetValue(hadc); // Read result
}
5. I2C/SPI Functions
HAL_I2C_Master_Transmit()
• Example:
uint8_t data[] = {0x00, 0x01};
HAL_I2C_Master_Transmit(&hi2c1, 0x50<<1, data, 2, 100); // Send to
device address 0x50
HAL_SPI_TransmitReceive()
• Example:
uint8_t tx_data[] = {0xAA};
uint8_t rx_data[1];
HAL_SPI_TransmitReceive(&hspi1, tx_data, rx_data, 1, 100); // Full-
duplex SPI
HAL_Delay()
• Example:
HAL_Delay(1000); // Delay for 1 second
HAL_GetTick()
• Example:
uint32_t start = HAL_GetTick();
while (HAL_GetTick() - start < 1000) {
// Wait for 1 second without blocking
}
7. Interrupt Handlers
HAL_GPIO_EXTI_IRQHandler()
• Example:
// In stm32XXxx_it.c:
void EXTI0_IRQHandler(void) {
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); // Handle PA0 interrupt
}
// Implement callback:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
if (GPIO_Pin == GPIO_PIN_0) {
// PA0 button pressed
}
}
Summary
Always check the HAL documentation for your specific STM32 variant for detailed usage and
parameters!