单片机中的UART通信应用实例详解

晨曦微光 2022-08-09 ⋅ 24 阅读

引言

UART(通用异步收发传输器)是一种串行通信协议,常用于单片机与其他设备之间的数据传输。在单片机中,UART通信被广泛应用于外设控制,如与电脑通信、与传感器通信等。本文将详细介绍单片机中UART通信的应用实例,并通过具体代码示例展示其操作。

1. UART通信原理

UART通信通过一对数据线(TXD发送线和RXD接收线)来实现数据的发送和接收。在发送端,数据经过串行转并行转换后通过TXD线输出;在接收端,数据通过RXD线输入,并经过并行转串行转换后输出给接收模块。

2. 单片机中的UART通信应用实例

以STM32F103系列单片机为例,下面将介绍一个简单的UART通信应用实例,利用UART通信实现LED灯的控制。

2.1 硬件连接

首先,将单片机的串口1连接到电脑的串口(或通过USB转串口模块连接)。

2.2 软件开发

使用Keil等开发工具,创建一个新的工程,配置串口1的引脚和波特率等参数。在主函数中,编写如下代码:

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

#define LED_PIN GPIO_Pin_13
#define LED_PORT GPIOC

void UART1_Init()
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);

    // 配置UART引脚
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init( GPIOA, &GPIO_InitStructure );

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init( GPIOA, &GPIO_InitStructure );

    // 配置UART参数
    USART_InitTypeDef USART_InitStructure;
    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( USART1, &USART_InitStructure );

    // 使能UART
    USART_Cmd( USART1, ENABLE );
}

void LED_Init()
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = LED_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init( LED_PORT, &GPIO_InitStructure );
}

int main(void)
{
    UART1_Init();
    LED_Init();

    USART_SendData( USART1, 'H' );
    while( USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET );

    USART_SendData( USART1, 'i' );
    while( USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET );

    USART_SendData( USART1, '\r' );
    while( USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET );

    USART_SendData( USART1, '\n' );
    while( USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET );

    while(1)
    {
        uint16_t rx_data = USART_ReceiveData( USART1 );

        if (rx_data == '1')
        {
            GPIO_SetBits( LED_PORT, LED_PIN );
        }
        else if (rx_data == '0')
        {
            GPIO_ResetBits( LED_PORT, LED_PIN );
        }
    }
}

上述代码初始化了串口1和LED引脚,并通过UART通信发送和接收数据,通过接收到的数据来控制LED灯的开关。

3. 总结

本文介绍了单片机中UART通信的应用实例,通过一个简单的LED控制例子来说明UART通信的原理和实现。学习和掌握UART通信在单片机中的应用将为开发更为功能丰富的单片机项目奠定基础。


全部评论: 0

    我有话说: