【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源文件

相关推荐
小龙报9 分钟前
【51单片机】51 单片机 IIC 协议深度解析:时序实现 + GXHT3L 连续转换模式 + 数据解析
c语言·数据结构·stm32·单片机·嵌入式硬件·物联网·51单片机
不做无法实现的梦~11 小时前
ros2实现路径规划---nav2部分
linux·stm32·嵌入式硬件·机器人·自动驾驶
熊猫_豆豆15 小时前
同步整流 Buck 降压变换器
单片机·嵌入式硬件·matlab
chenchen0000000019 小时前
49元能否买到四核性能?HZ-RK3506G2_MiniEVM开发板评测:MCU+三核CPU带来的超高性价比
单片机·嵌入式硬件
孤芳剑影20 小时前
反馈环路设计总结
嵌入式硬件·学习
dump linux21 小时前
设备树子系统与驱动开发入门
linux·驱动开发·嵌入式硬件
专注VB编程开发20年21 小时前
简易虚拟 PLC 服务器-流水线自动化,上位机程序维护升级,西门子PLC仿真
服务器·单片机·自动化·上位机·plc·流水线·工控
LeoZY_21 小时前
CH347/339W开源项目:集SPI、I2C、JTAG、SWD、UART、GPIO多功能为一体(3)
stm32·单片机·嵌入式硬件·mcu·开源
chenchen000000001 天前
国产显示芯势力新篇章:内置DDR+四核A35!MY-SSD2351-MINI开发板深度评测
驱动开发·嵌入式硬件
BackCatK Chen1 天前
第13篇:TMC2240 StallGuard4失速检测|寄存器配置+状态读取(保姆级)
单片机·嵌入式硬件·tmc2240·stm32实战·stallguard4·失速检测·电机故障识别