STM32实现简单的串口通信

STM32是一系列由STMicroelectronics开发的微控制器,它内置了串口通信功能,可以用于实现与其他设备或模块的通信。本文将详细介绍如何使用STM32实现简单的串口通信。

  1. 硬件准备 首先,我们需要准备一块STM32开发板,例如STM32F103C8T6,以及一台计算机和一根USB数据线。将STM32开发板与计算机连接,确保驱动程序正确安装。

  2. 工程创建 使用CubeMX软件创建一个新的工程。选择对应的STM32型号,然后通过可视化界面配置GPIO和串口参数。在GPIO配置中,将一个GPIO引脚设置为“USART”功能,并将其设置为“Tx”(发送)模式;将另一个GPIO引脚设置为“USART”功能,并将其设置为“Rx”(接收)模式。在串口配置中,选择波特率、数据位、停止位和奇偶校验等参数。点击“生成代码”按钮生成工程代码。

  3. 初始化串口 打开生成的工程代码,找到main.c文件。在文件开头包含必要的头文件:

#include "main.h"
#include "usart.h"

main()函数中,添加以下代码来初始化串口:

/* Initialize USART */
MX_USART1_UART_Init();

这将调用自动生成的MX_USART1_UART_Init()函数,该函数通过调用HAL_UART_Init()函数来初始化USART1串口。

  1. 发送数据 要发送数据,可以使用HAL_UART_Transmit()函数。在main()函数中添加以下代码:
/* Send data */
char sendData[10] = "Hello\r\n";
HAL_UART_Transmit(&huart1, (uint8_t*)sendData, strlen(sendData), HAL_MAX_DELAY);

该代码将字符串“Hello\r\n”发送到USART1。HAL_UART_Transmit()函数接受四个参数:UART句柄、发送缓冲区、数据长度和超时时间。

  1. 接收数据 要接收数据,可以使用HAL_UART_Receive()函数。在main()函数中添加以下代码:
/* Receive data */
char recvData[10];
HAL_UART_Receive(&huart1, (uint8_t*)recvData, sizeof(recvData), HAL_MAX_DELAY);

该代码从USART1接收数据并将其存储在recvData缓冲区中。HAL_UART_Receive()函数接受四个参数:UART句柄、接收缓冲区、数据长度和超时时间。

  1. 中断接收数据 除了使用HAL_UART_Receive()函数以轮询方式接收数据外,还可以使用中断方式。首先,需要启用串口的接收中断功能。在main.c文件中找到MX_USART1_UART_Init()函数,将以下代码添加到函数开头:
/* Enable USART1 RX interrupt */
__HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);

然后,在main.c文件中找到以下函数:

void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */

  /* USER CODE END USART1_IRQn 0 */
  HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */

  /* USER CODE END USART1_IRQn 1 */
}

将接收数据的代码添加到USART1_IRQHandler()函数中:

void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */

  /* USER CODE END USART1_IRQn 0 */
  HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */
  char recvData[10];
  HAL_UART_Receive_IT(&huart1, (uint8_t*)recvData, sizeof(recvData));
  /* USER CODE END USART1_IRQn 1 */
}

现在,当USART1接收到数据时,将触发USART1的中断,USART1_IRQHandler()函数将被调用,并调用HAL_UART_Receive_IT()函数以中断方式接收数据。

  1. 中断接收数据的处理 在上一步中,我们已经设置了中断接收数据的功能。要处理接收到的数据,需要在main.c文件中找到以下函数并添加处理代码:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  /* USER CODE BEGIN HAL_UART_RxCpltCallback 0 */

  /* USER CODE END HAL_UART_RxCpltCallback 0 */
  if (huart->Instance == USART1)
  {
    /* Process received data */
    /* ... */
  }
  /* USER CODE BEGIN HAL_UART_RxCpltCallback 1 */

  /* USER CODE END HAL_UART_RxCpltCallback 1 */
}

在上面的代码中,可以添加处理接收数据的代码,例如将接收到的数据打印到终端。

至此,我们已经完成了STM32实现简单串口通信的代码编写。可以通过CubeMX生成的代码来构建工程,并通过调试器将程序烧录到STM32开发板上进行测试。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值