【STM32单片机_(HAL库)】6-3【串口通信UART、USART】串口通信发送/接收一个字符

1.硬件

  • STM32单片机最小系统

2.软件

  • main.c程序
c 复制代码
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "uart1.h"

int main(void)
{
    HAL_Init();                         /* 初始化HAL库 */
    stm32_clock_init(RCC_PLL_MUL9);     /* 设置时钟, 72Mhz */
    led_init();                         /* 初始化LED灯 */
    uart1_init(115200);

    while(1)
    { 
        led1_on();
        led2_off();
        delay_ms(500);
        led1_off();
        led2_on();
        delay_ms(500);
    }
}
  • uart1.c程序
c 复制代码
#include "uart1.h"

UART_HandleTypeDef uart1_handle = {0};
void uart1_init(uint32_t baudrate)//初始化(波特率)
{
    uart1_handle.Instance = USART1;
    uart1_handle.Init.BaudRate = baudrate;//波特率作为传入函数
    uart1_handle.Init.WordLength = UART_WORDLENGTH_8B;//8位
    uart1_handle.Init.StopBits = UART_STOPBITS_1;//1个停止位
    uart1_handle.Init.Parity = UART_PARITY_NONE;//无校验位
    uart1_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
    uart1_handle.Init.Mode = UART_MODE_TX_RX;
    HAL_UART_Init(&uart1_handle);
}

void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
    if(huart->Instance == USART1)//先判断是否是USART1
    {
        __HAL_RCC_USART1_CLK_ENABLE();
        __HAL_RCC_GPIOA_CLK_ENABLE(); 
        GPIO_InitTypeDef gpio_initstruct;
        
        //调用GPIO初始化函数
        gpio_initstruct.Pin = GPIO_PIN_9;          //PA9--->TX
        gpio_initstruct.Mode = GPIO_MODE_AF_PP;    //复用推挽输出(参考手册)
        gpio_initstruct.Pull = GPIO_PULLUP;                     // 上拉
        gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH;           // 高速
        HAL_GPIO_Init(GPIOA, &gpio_initstruct);
        
        gpio_initstruct.Pin = GPIO_PIN_10;          // PA10--->RX
        gpio_initstruct.Mode = GPIO_MODE_AF_INPUT;             // 推挽输出
        HAL_GPIO_Init(GPIOA, &gpio_initstruct);
        
        HAL_NVIC_EnableIRQ(USART1_IRQn);
        HAL_NVIC_SetPriority(USART1_IRQn, 2, 2);
        
        __HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);//使能标志位
    }
}

void USART1_IRQHandler(void)//中断服务函数
{
    uint8_t receive_data = 0;
    if(__HAL_UART_GET_FLAG(&uart1_handle, UART_FLAG_RXNE) != RESET)//如果接收到数据RXNE为0
    {
        HAL_UART_Receive(&uart1_handle, &receive_data, 1, 1000);//接收1位,超时1s
        HAL_UART_Transmit(&uart1_handle, &receive_data, 1, 1000);//发送
}
 
  • uart1.h程序
c 复制代码
#ifndef __USART_H__
#define __USART_H__

#include "sys.h"

void uart1_init(uint32_t baudrate);

#endif

3.实物效果

  • 硬件模块接线
USB转TTL STM32
TX PA10
RX PA9
VCC 5V
GND GND

ST-Link下载方式

  • 实验现象
    通过USB转TTL串口模块,将STM32单片机与电脑连接,打开串口软件,设置波特率115200,通过串口软件发送数据,可以看到串口软件接收到数据。

串口通信发送/接收一个字符keil源文件

相关推荐
iCxhust8 小时前
8086/8088单板机VSCode集成自动下载功能(完善串口接收显示版)
ide·vscode·单片机·编辑器·微机原理·8088单板机·8086单板机
振南的单片机世界9 小时前
从数码管到点阵屏:动态扫描加595,3个IO驱动256个LED
stm32·单片机·嵌入式硬件
listhi52010 小时前
STC8 16通道模拟采集 + 4路串口 + 8路PWM 程序
stm32·单片机·嵌入式硬件
星夜夏空9910 小时前
STM32单片机学习(4)——嵌入式概述
stm32·单片机·学习
Deitymoon11 小时前
STM32——OLED显示字符串
单片机·嵌入式硬件
LCG元11 小时前
STM32实战:基于STM32F407的FFT频谱分析(音频信号处理)
stm32·音视频·信号处理
Graceful_scenery11 小时前
龙芯2k0300 - 走马观碑组按键驱动移植
单片机·嵌入式硬件
d111111111d11 小时前
MQTT+STM32+ESP8266网络程序分层+韦老师
笔记·stm32·单片机·嵌入式硬件·学习·php
长安第一美人11 小时前
RT-Thread 工业屏驱动开发实战:UART 串口屏协议解析 + 数据实时刷新 + 设备驱动框架完整实现
驱动开发·嵌入式硬件·rt-thread·工业控制·uart通信·串口屏驱动
LDR00611 小时前
突破快充壁垒,赋能全场景体验——LDR6600 2C1A快充协议芯片重磅来袭
嵌入式硬件