• stm32单片机之串口通信例程


    STM32用hal库的串口通信

    #include "stm32f4xx_hal.h"  
      
    UART_HandleTypeDef huart2; // 串口2句柄  
      
    void SystemClock_Config(void);  
    void GPIO_Init(void);  
    void UART2_Init(void);  
      
    int main(void)  
    {  
      HAL_Init(); // 初始化HAL库  
      
      SystemClock_Config(); // 配置系统时钟  
      
      GPIO_Init(); // 初始化GPIO  
      
      UART2_Init(); // 初始化串口2  
      
      while (1)  
      {  
        // 从串口接收数据  
        uint8_t data = HAL_UART_Receive(&huart2, (uint8_t *)&data, 1, HAL_MAX_DELAY);  
      
        // 处理接收到的数据  
        // ...  
      
        // 发送数据到串口  
        HAL_UART_Transmit(&huart2, (uint8_t *)&data, 1, HAL_MAX_DELAY);  
      }  
    }  
      
    void SystemClock_Config(void)  
    {  
      // 配置系统时钟,使用HSI作为源时钟,PLL倍频至168MHz  
      // ...  
    }  
      
    void GPIO_Init(void)  
    {  
      // 初始化GPIO,配置PA2和PA3引脚为串口2的TX和RX引脚  
      // ...  
    }  
      
    void UART2_Init(void)  
    {  
      huart2.Instance = USART2; // 设置串口2实例  
      huart2.Init.BaudRate = 115200; // 设置波特率为115200bps  
      huart2.Init.WordLength = UART_WORDLENGTH_8B; // 设置数据位长度为8位  
      huart2.Init.StopBits = UART_STOPBITS_1; // 设置停止位长度为1位  
      huart2.Init.Parity = UART_PARITY_NONE; // 不使用校验位  
      huart2.Init.Mode = UART_MODE_TX_RX; // 设置串口模式为收发模式  
      huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; // 不使用硬件流控制  
      huart2.Init.OverSampling = UART_OVERSAMPLING_16; // 设置过采样倍率为16倍  
      if (HAL_UART_Init(&huart2) != HAL_OK) // 初始化串口2  
      {  
        // 初始化失败处理  
        // ...  
      }  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    注释:

    HAL_Init():初始化HAL库。
    SystemClock_Config():配置系统时钟。在此示例中,使用HSI作为源时钟,PLL倍频至168MHz。具体配置需要根据实际硬件情况进行调整。
    GPIO_Init():初始化GPIO。在此示例中,将PA2和PA3引脚配置为串口2的TX和RX引脚。具体配置需要根据实际硬件情况进行调整。
    UART2_Init():初始化串口2。在此示例中,设置串口2实例、波特率、数据位长度、停止位长度、校验位、模式、硬件流控制和过采样倍率等参数,并调用HAL_UART_Init()函数进行初始化。如果初始化失败,可以在此处添加相应的错误处理代码。
    HAL_UART_Receive():从串口接收数据。在此示例中,使用HAL_UART_Receive()函数从串口接收一个字节的数据。该函数会阻塞程序直到接收到数据或超时。接收到的数据存储在data变量中。可以根据需要修改接收的数据类型和长度。
    HAL_UART_Transmit():发送数据到串口。在此示例中,使用HAL_UART_Transmit()函数向串口发送一个字节的数据。该函数会阻塞程序直到发送完成或超时。发送的数据存储在data变量中。可以根据需要修改发送的数据类型和长度。

  • 相关阅读:
    开源OCR模型对比
    超聚变安装银河麒麟服务器系统ky10-server-x86
    springboot+vue+elementUI 篮球竞赛预约平台#毕业设计
    yolov5 OpenVINO windows部署实战
    WPF数据绑定(指定源(Source)的几种方法)(三)
    paramiko 使用总结(SSH 操作远端机器)
    一文了解Gin对Cookie的支持
    Charles的Map Remote功能
    TDengine3.0 新架构设计思路
    WSO2 ESB 5.0.0 一些组件的使用教程
  • 原文地址:https://blog.csdn.net/techenliu/article/details/132837176