STM32 HAL库 常用函数、代码整理

IO口的相关函数

  • HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
    读取GPIO口状态,高电平返回1,低电平返回0

    HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6)

  • HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
    设置GPIO电平

  • HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
    反转GPIO电平

串口相关函数

  • HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
    串口发送函数

    传入参数分别为 串口地址 数据指针 数据大小 超时时间
    数据中加“\r\n” 串口换行 注意保证波特率一致,否则为乱码
    可使用sizeof(*pData)函数获取数据大小

  • HAL_UART_Receive_IT(&huart1, (uint8_t*)recv_buf, 13)
    串口接收使能

  • 串口中断常见的定义方式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
    {
    /* 判断是哪个串口触发的中断 */
    if(huart ->Instance == USART1)
    {

    /*要执行的操作*/

    //重新使能串口接收中断
    HAL_UART_Receive_IT(huart, (uint8_t*)recv_buf, 13);
    }
    }

定时器相关函数

  • HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1)
    配置定时器后启动PWM

  • HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1)
    停止输出PWM

  • TIM3->CCR1 = pulse
    改变定时器输出占空比,示例为定时器3通道1

  • 重定向printf至串口

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <stdio.h>

    ...

    int fputc(int ch, FILE *stream)
    {
    /* 堵塞判断串口是否发送完成 */
    while((USART1->SR & 0X40) == 0);

    /* 串口发送完成,将该字符发送 */
    USART1->DR = (uint8_t) ch;

    return ch;
    }
    //重新定义fputc函数
  • void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
    弱定义外部中断回调函数,在主函数中自行添加此函数定义,达成中断条件后触发

待续