STM32 HAL
Introduction
Cette fiche résume l’ensemble des fonctions HAL du STM32F411 manipulables directement dans l’application (c’est-à-dire non générées automatiquement par STM32CubeMX).
GPIO – Entrées/Sorties
Fonctionnalité | Fonctions HAL |
---|---|
Lecture d’entrée | HAL_GPIO_ReadPin |
Écriture de sortie | HAL_GPIO_WritePin |
Inversion de sortie | HAL_GPIO_TogglePin |
Interruption EXTI | HAL_GPIO_EXTI_IRQHandler , HAL_GPIO_EXTI_Callback |
Exemple lecture
// Lis le niveau logique sur une GPIO spécifique.
GPIO_PinState read_GPIO(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin){
return HAL_GPIO_ReadPin(GPIOx, GPIO_Pin);
}
// Exemple de détection d’une commande haute sur un joystick
GPIO_PinState sw_up() {
return read_GPIO(GPIOA, GPIO_PIN_4);
}
UART / USART
Fonctionnalité | Fonctions HAL |
---|---|
Transmission synchrone | HAL_UART_Transmit |
Réception synchrone | HAL_UART_Receive |
Transmission IT / DMA | HAL_UART_Transmit_IT , HAL_UART_Transmit_DMA |
Réception IT / DMA | HAL_UART_Receive_IT , HAL_UART_Receive_DMA |
Interruptions et callbacks | HAL_UART_IRQHandler , HAL_UART_TxCpltCallback , HAL_UART_RxCpltCallback |
SPI
Fonctionnalité | Fonctions HAL |
---|---|
Transmit / Receive | HAL_SPI_Transmit , HAL_SPI_Receive , HAL_SPI_TransmitReceive |
Transfert IT / DMA | HAL_SPI_Transmit_IT , HAL_SPI_Transmit_DMA , HAL_SPI_Receive_DMA |
IRQ & callbacks | HAL_SPI_IRQHandler , HAL_SPI_TxCpltCallback , HAL_SPI_RxCpltCallback |
I2C
Fonctionnalité | Fonctions HAL |
---|---|
Tx / Rx maître | HAL_I2C_Master_Transmit , HAL_I2C_Master_Receive |
Mémoire I2C | HAL_I2C_Mem_Read , HAL_I2C_Mem_Write |
Transfert IT / DMA | HAL_I2C_Master_Transmit_IT , HAL_I2C_Master_Transmit_DMA |
IRQ / callbacks | HAL_I2C_EV_IRQHandler , HAL_I2C_ER_IRQHandler , HAL_I2C_MasterTxCpltCallback , HAL_I2C_MasterRxCpltCallback |
Timers (TIM1 à TIM11)
Fonctionnalité | Fonctions HAL |
---|---|
PWM | HAL_TIM_PWM_Start , HAL_TIM_PWM_Stop , __HAL_TIM_SET_COMPARE |
Timer de base | HAL_TIM_Base_Start , HAL_TIM_Base_Start_IT , HAL_TIM_Base_Stop |
Output Compare | HAL_TIM_OC_Start , HAL_TIM_OC_Stop |
Input Capture | HAL_TIM_IC_Start , HAL_TIM_IC_Stop |
Encodeur | HAL_TIM_Encoder_Start , HAL_TIM_Encoder_Stop |
Callback | HAL_TIM_PeriodElapsedCallback |
Exemple PWM
extern TIM_HandleTypeDef htim2;
extern TIM_HandleTypeDef htim3;
// Configure le PWM avec fréquence (Hz) et duty cycle (%).
void set_pwm_device (TIM_HandleTypeDef *htim, uint32_t channel, uint32_t freq_hz, uint8_t duty_percent, PWM_SetMode mode){
switch (mode){
case PWM_SET_FREQ:
if (freq_hz == 0)
return;
{
uint32_t timer_clk = HAL_RCC_GetPCLK1Freq () * 2;
uint32_t arr = (timer_clk / freq_hz) - 1;
__HAL_TIM_SET_AUTORELOAD (htim, arr);
htim->Init.Period = arr;
// Duty fixe à 50 %
uint32_t pulse = (arr + 1) / 2;
__HAL_TIM_SET_COMPARE (htim, channel, pulse);
HAL_TIM_PWM_Start (htim, channel);
}
break;
case PWM_SET_DUTY:
{
uint32_t pulse = (100 - brightness) * (htim->Init.Period + 1) / 100;
HAL_TIM_PWM_Start (htim, channel);
switch (brightness){
case 0:
__HAL_TIM_SET_COMPARE (htim, channel, htim->Init.Period);
break;
case 100:
__HAL_TIM_SET_COMPARE (htim, channel, 0);
break;
default:
__HAL_TIM_SET_COMPARE (htim, channel, pulse);
break;
}
}
break;
}
}
// Exemple du réglage d'une LED rouge
void red_led (int8_t brightness){
set_pwm_device (&htim3, TIM_CHANNEL_1, 0, brightness, PWM_SET_DUTY);
}
// Exemple d'émission d'une onde sonore sur un haut-parleur
void speaker_tone(uint32_t frequency_hz) {
set_pwm_device(&htim2, TIM_CHANNEL_3, frequency_hz, 0, PWM_SET_FREQ);
}
// Pour arrêter le son
void speaker_off(void) {
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_3, 0);
}
ADC
Fonctionnalité | Fonctions HAL |
---|---|
Conversion | HAL_ADC_Start , HAL_ADC_PollForConversion , HAL_ADC_GetValue , HAL_ADC_Stop |
Conversion IT / DMA | HAL_ADC_Start_IT , HAL_ADC_Start_DMA , HAL_ADC_Stop_IT , HAL_ADC_Stop_DMA |
Sélection de canal | HAL_ADC_ConfigChannel |
Callback conversion | HAL_ADC_ConvCpltCallback |
Callback DMA / erreur | HAL_ADC_ConvHalfCpltCallback , HAL_ADC_ErrorCallback |
Exemple ADC
extern ADC_HandleTypeDef hadc1;
// Lit la valeur analogique d'un canal ADC donné et stocke le résultat dans *value.
static void read_adc(uint32_t *value, uint32_t channel)
{
ADC_ChannelConfTypeDef s_config = {0};
s_config.Channel = channel;
s_config.Rank = 1;
s_config.SamplingTime = ADC_SAMPLETIME_3CYCLES; /* Défini par CubeMX */
if (HAL_ADC_ConfigChannel(&hadc1, &s_config) != HAL_OK) {
Error_Handler(); // Gestion d'erreur si la configuration échoue
}
HAL_ADC_Start(&hadc1); // Démarre la conversion ADC
if (HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY) == HAL_OK) {
*value = HAL_ADC_GetValue(&hadc1); // Récupère la valeur convertie
}
HAL_ADC_Stop(&hadc1); // Arrête la conversion ADC
}
// Exemple : lecture de la valeur d'un potentiomètre connecté au canal ADC_CHANNEL_0.
void pot_1(uint32_t *value_pot)
{
read_adc(value_pot, ADC_CHANNEL_0);
}
DMA
Fonctionnalité | Fonctions HAL |
---|---|
IRQ transfert | HAL_DMA_IRQHandler |
Callback transfert | HAL_DMA_XferCpltCallback |
USB OTG FS
Fonctionnalité | Fonctions HAL |
---|---|
Start périphérique | HAL_PCD_Start |
Interruptions USB | HAL_PCD_IRQHandler |
Callbacks transfert | HAL_PCD_DataInStageCallback , HAL_PCD_DataOutStageCallback |
RTC
Fonctionnalité | Fonctions HAL |
---|---|
Lire l’heure/date | HAL_RTC_GetTime , HAL_RTC_GetDate |
Alarmes / wakeup | HAL_RTC_SetAlarm , HAL_RTC_SetWakeUpTimer |
Power Management
Fonctionnalité | Fonctions HAL |
---|---|
Entrer en veille | HAL_PWR_EnterSLEEPMode , HAL_PWR_EnterSTOPMode , HAL_PWR_EnterSTANDBYMode |
Activer accès Backup | HAL_PWR_EnableBkUpAccess |
Flash interne
Fonctionnalité | Fonctions HAL |
---|---|
Accès flash | HAL_FLASH_Unlock , HAL_FLASH_Lock |
Programmation / effacement | HAL_FLASH_Program , HAL_FLASH_Program_IT , HAL_FLASH_Erase |
CRC
Fonctionnalité | Fonctions HAL |
---|---|
Calcul CRC | HAL_CRC_Calculate , HAL_CRC_Accumulate |
RNG
Fonctionnalité | Fonctions HAL |
---|---|
Nombre aléatoire | HAL_RNG_GenerateRandomNumber , HAL_RNG_IRQHandler |
Watchdogs
Fonctionnalité | Fonctions HAL |
---|---|
IWDG | HAL_IWDG_Start |
WWDG Refresh | HAL_WWDG_Refresh |
EXTI
Fonctionnalité | Fonctions HAL |
---|---|
Interruption ligne | HAL_EXTI_IRQHandler , HAL_EXTI_GetPending , HAL_EXTI_ClearPending , HAL_EXTI_Callback |