STM32入门教程:串口通信

STM32是一款功能强大的微控制器系列,可用于各种应用中。其中串口通信是常用的通信方式之一,用于与其他设备或计算机进行数据交互。本教程将详细介绍如何使用STM32进行串口通信,并给出相关的代码案例。

本教程将以STM32F4系列为例,使用Keil MDK作为开发环境。通过串口通信,我们将实现STM32与PC之间的数据传输。

首先,我们需要在Keil MDK中创建一个新的工程。选择适合的STM32F4系列芯片,并配置好工程的基本设置。

接下来,我们需要配置串口的相关设置。在STM32中,串口通信使用USART(通用同步/异步收发传输器)模块。我们要在代码中配置USART的参数,包括波特率、数据位、停止位等。

以下是一个基本的串口配置代码示例:

#include "stm32f4xx.h"

void USART_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure;

  // Enable USART and GPIO clock
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

  // Configure USART pins
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  // Connect USART pins to AF
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2);
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2);

  // Configure USART parameters
  USART_InitStructure.USART_BaudRate = 9600;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  USART_Init(USART2, &USART_InitStructure);

  // Enable USART
  USART_Cmd(USART2, ENABLE);
}

在上述代码中,我们首先使能了USART2和GPIOA的时钟,然后配置了USART的引脚和参数。这里的波特率设置为9600,数据位为8位,停止位为1位,无校验位。最后使能了USART2。

接下来,我们就可以实现串口的发送和接收功能。以下是一个基本的代码示例,通过串口发送一段字符串,然后接收并打印PC端回传的数据:

#include "stm32f4xx.h"
#include <stdio.h>

void USART_SendString(USART_TypeDef* USARTx, char* string)
{
  while(*string)
  {
    while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);
    USART_SendData(USARTx, *string++);
  }
}

void USART_ReceiveString(USART_TypeDef* USARTx, char* buffer, uint32_t bufferSize)
{
  uint32_t i = 0;
  char receivedChar = 0;

  while(i < bufferSize)
  {
    while(USART_GetFlagStatus(USARTx, USART_FLAG_RXNE) == RESET);
    receivedChar = USART_ReceiveData(USARTx);
    if(receivedChar == '\r')
      break;
    buffer[i++] = receivedChar;
  }
  buffer[i] = '\0';
}

int main()
{
  USART_Configuration();

  char sendBuffer[] = "Hello, PC!";
  char receiveBuffer[50];

  while(1)
  {
    USART_SendString(USART2, sendBuffer);

    USART_ReceiveString(USART2, receiveBuffer, sizeof(receiveBuffer));
    printf("Received: %s\n", receiveBuffer);
  }
}

在上述代码中,我们定义了两个函数:USART_SendString用于发送字符串,USART_ReceiveString用于接收字符串。在主函数中,我们首先调用USART_Configuration函数进行串口的初始化配置。然后定义了一个发送缓冲区和接收缓冲区,并进入一个循环中。在循环中,我们先发送一段字符串,然后接收PC端回传的数据并打印。

通过以上代码,我们就实现了STM32与PC之间的串口通信。你可以将STM32连接到PC,打开串口调试助手,即可看到PC端接收到STM32发送的数据,并将数据回传给STM32进行打印。

总结: 在本教程中,我们介绍了如何使用STM32进行串口通信。首先配置了串口的参数,然后实现了串口的发送和接收功能,并给出了相关的代码案例。通过这些代码,你可以快速上手STM32串口通信,并应用到你的项目中。

希望本教程对你有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大黄鸭duck.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值