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

相关推荐
fly的fly34 分钟前
RT-Thread消息队列源码机制讲解
c语言·stm32·物联网
隔壁大炮38 分钟前
【串口】USART模块的使用方法
单片机·嵌入式硬件·pid·江协科技
小野嵌入式1 小时前
3小时精通嵌入式串口通信!从零玩转ESP32+Modbus+OTA(1)
c语言·单片机·嵌入式硬件·mcu·物联网
钰珠AIOT3 小时前
连接电池的座子2端的电阻只有0.24欧,这个是断路吗,为什么?
单片机·嵌入式硬件·机器人
Hello_Embed3 小时前
Modbus 传感器开发:从寄存器规划到点表设计
笔记·stm32·单片机·学习·modbus
天天爱吃肉82183 小时前
【新能源商用车驱动电机整车运行状态电气性能全维度分析(附6图实战解读)】
嵌入式硬件·汽车
小龙报4 小时前
【51单片机】不止是调光!51 单片机 PWM 实战:呼吸灯 + 直流电机正反转 + 转速控制
数据结构·c++·stm32·单片机·嵌入式硬件·物联网·51单片机
送外卖的工程师4 小时前
STM32 驱动五线四相步进电机(28BYJ-48+ULN2003)教程
stm32·单片机·嵌入式硬件·mcu·物联网·51单片机·proteus
优信电子4 小时前
STM32软件SPI驱动BMP280(OLED显示)
stm32·oled·spi·传感器·bmp280
拉咯比哩4 小时前
江科大老学长 STM32 + FREERTOS 项目实践 教程资源汇总
stm32·单片机·嵌入式硬件