stm32Hal库函数的一个基本介绍和使用

以下是一些常用的STM32 HAL库函数:

  1. GPIO相关函数:HAL_GPIO_Init()、HAL_GPIO_WritePin()、HAL_GPIO_ReadPin()等。

  2. 进行定时器操作的函数,例如:HAL_TIM_Base_Init()、HAL_TIM_Base_Start()、HAL_TIM_PWM_Init()、HAL_TIM_PWM_Start()等。

  3. 与ADC相关的函数,例如:HAL_ADC_Init()、HAL_ADC_Start()、HAL_ADC_PollForConversion()等。

  4. 外部中断函数,例如:HAL_EXTI_Init()、HAL_NVIC_SetPriority()等。

  5. 时钟树控制函数,例如:HAL_RCC_OscConfig()、HAL_RCC_ClockConfig()。

  6. DMA相关函数,例如:HAL_DMA_Init()、HAL_DMA_Start()、HAL_DMA_PollForTransfer()。

  7. UART相关函数,例如:HAL_UART_Init()、HAL_UART_Transmit()、HAL_UART_Receive()等。

  8. SPI相关函数,例如:HAL_SPI_Init()、HAL_SPI_Transmit()、HAL_SPI_Receive()、HAL_SPI_TransmitReceive()等。

  9. I2C相关函数,例如:HAL_I2C_Init()、HAL_I2C_Master_Transmit()、HAL_I2C_Master_Receive()等。

  10. USB相关函数,例如:HAL_PCD_Init()、HAL_PCD_SetupStageCallback()、HAL_PCD_EP_Transmit()等。

这里以几个常用的STM32 HAL库函数举例,分别介绍它们的使用方法。

  1. GPIO相关函数

a. 初始化GPIO

使用HAL_GPIO_Init()函数初始化GPIO,它需要传入一个GPIO_InitTypeDef类型的参数,其中包括GPIO的参数配置信息,例如引脚方向、引脚模式等。例如:

GPIO_InitTypeDef GPIO_InitStruct;
// 设置PA5为推挽输出,无上拉下拉
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

b. 设置GPIO输出状态

使用HAL_GPIO_WritePin()函数设置GPIO输出的电平状态,它需要传入GPIO端口和引脚号。例如:

// 将PA5引脚设置为高电平
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);

c. 读取GPIO状态

使用HAL_GPIO_ReadPin()函数读取GPIO的输入状态,它需要传入GPIO端口和引脚号。例如:

// 读取PA5引脚的输入状态
GPIO_PinState state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5);
  1. 定时器相关函数

a. 初始化定时器

使用HAL_TIM_Base_Init()函数初始化定时器,它需要传入一个TIM_HandleTypeDef类型的参数,其中包括了定时器的时钟配置信息和计数器的重载值。例如:

TIM_HandleTypeDef TIM_HandleStruct;
TIM_HandleStruct.Instance = TIM1; // 选择定时器1
TIM_HandleStruct.Init.ClockDivision = 0;
TIM_HandleStruct.Init.CounterMode = TIM_COUNTERMODE_UP;
TIM_HandleStruct.Init.Period = 10000; // 重载值为10000
TIM_HandleStruct.Init.Prescaler = 100;
HAL_TIM_Base_Init(&TIM_HandleStruct);

b. 启动定时器

使用HAL_TIM_Base_Start()函数启动定时器,它需要传入一个TIM_HandleTypeDef类型的参数,指定定时器的句柄。例如:

HAL_TIM_Base_Start(&TIM_HandleStruct);

c. 定时器中断处理函数

在定时器溢出时,可以使用HAL_TIM_PeriodElapsedCallback()函数作为中断处理函数。该函数需要添加到定时器IRQHandler()函数中,例如:

void TIM1_BRK_TIM15_IRQHandler(void)
{
    
    
  HAL_TIM_IRQHandler(&TIM_HandleStruct);
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim)
{
    
    
    if (htim->Instance == TIM1) {
    
    
        // do something
    }
}
  1. ADC相关函数

a. 初始化ADC

使用HAL_ADC_Init()函数初始化ADC,它需要传入一个ADC_HandleTypeDef类型的参数,其中包括了ADC通道的选择、采样周期、转换模式等信息。例如:

ADC_HandleTypeDef ADC_HandleStruct;
ADC_ChannelConfTypeDef ADC_ChannelInitStruct;
 
__HAL_RCC_ADC_CLK_ENABLE();
ADC_HandleStruct.Instance = ADC1;
ADC_HandleStruct.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
ADC_HandleStruct.Init.ContinuousConvMode = ENABLE;
ADC_HandleStruct.Init.DataAlign = ADC_DATAALIGN_RIGHT;
ADC_HandleStruct.Init.DMAContinuousRequests = DISABLE;
ADC_HandleStruct.Init.ExternalTrigConv = ADC_SOFTWARE_START;
ADC_HandleStruct.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
ADC_HandleStruct.Init.NbrOfConversion = 1;
ADC_HandleStruct.Init.Resolution = ADC_RESOLUTION_12B;
ADC_HandleStruct.Init.ScanConvMode = DISABLE;
HAL_ADC_Init(&ADC_HandleStruct);

// 配置通道5的采样时间为15个时钟周期
ADC_ChannelInitStruct.Channel = ADC_CHANNEL_5;
ADC_ChannelInitStruct.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
ADC_ChannelInitStruct.SamplingTime = ADC_SAMPLETIME_15CYCLES;
ADC_ChannelInitStruct.SingleDiff = ADC_SINGLE_ENDED;
ADC_ChannelInitStruct.OffsetNumber = ADC_OFFSET_NONE;
HAL_ADC_ConfigChannel(&ADC_HandleStruct, &ADC_ChannelInitStruct);

b. 启动ADC

使用HAL_ADC_Start()函数启动ADC转换,它需要传入一个ADC_HandleTypeDef类型的参数,指定ADC的句柄。例如:

HAL_ADC_Start(&ADC_HandleStruct);

c. 获取ADC转换结果

使用HAL_ADC_PollForConversion()函数等待ADC转换完成,然后使用HAL_ADC_GetValue()函数获取ADC转换结果。例如:

// 等待数据转换完成
HAL_ADC_PollForConversion(&ADC_HandleStruct, 100);
// 读取数据
uint32_t adc_data = HAL_ADC_GetValue(&ADC_HandleStruct);

以上是一些常用的STM32 HAL库函数的使用方法。不同的库函数用法可能不同,具体使用时应查看相关文档并进行适当修改。

猜你喜欢

转载自blog.csdn.net/weixin_47712251/article/details/129968681
今日推荐