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  
  {  
    // 初始化失败处理  
    // ...  
  }  
}

注释:

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变量中。可以根据需要修改发送的数据类型和长度。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

付宇利

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值