STM32实现简单的串口通信

下面是一个基于STM32的串口通信的简单代码案例。

首先,我们需要初始化串口的硬件相关配置。这可以通过STM32的寄存器进行操作。以下是一个典型的串口初始化函数:

#include "stm32f4xx.h"

void USART_Config(void)
{
    // 使能串口时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

    GPIO_InitTypeDef GPIO_InitStructure;
    // 配置串口引脚
    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);

    // 配置串口使用的GPIO引脚为复用功能
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2); // USART2_TX
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2); // USART2_RX

    USART_InitTypeDef USART_InitStructure;
    // 配置串口参数
    USART_InitStructure.USART_BaudRate = 115200;
    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);

    // 使能串口
    USART_Cmd(USART2, ENABLE);
}

接下来,我们需要实现数据的发送和接收函数。以下是一个简单的串口发送函数:

void USART_SendChar(char ch)
{
    // 等待串口发送数据缓冲区为空
    while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);

    // 将数据发送到串口
    USART_SendData(USART2, ch);
}

以下是一个简单的串口接收函数:

char USART_ReceiveChar(void)
{
    // 等待串口接收到数据
    while (USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET);

    // 从串口接收数据
    return USART_ReceiveData(USART2);
}

现在,我们可以使用上述函数来实现串口通信。以下是一个简单的例子,其中发送字符串"Hello, World!",然后接收并打印收到的数据:

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

void USART_Config(void);
void USART_SendChar(char ch);
char USART_ReceiveChar(void);

int main(void)
{
    USART_Config();

    char data[] = "Hello, World!";
    for (int i = 0; i < sizeof(data)/sizeof(data[0]) - 1; i++)
    {
        USART_SendChar(data[i]);
    }

    printf("\nReceived data: ");
    char receivedData;
    while (1)
    {
        receivedData = USART_ReceiveChar();
        printf("%c", receivedData);
    }
}

在上述代码中,我们使用了标准库函数printf来打印收到的数据。为了使其工作,我们需要在STM32的工程设置中启用Semihosting功能,以便将输出显示在调试器的控制台上。

以上就是一个基于STM32的简单串口通信的代码案例。你可以根据自己的需求进行修改和扩展。请注意,上述代码只是一个简单的示例,实际的应用可能需要更多的错误检查和处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值