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

相关推荐
F137298015573 小时前
7V 至 30V 的超宽 VIN 输入范围,转换效率高达 96%的WD5030
单片机·嵌入式硬件·51单片机
cykaw25908 小时前
NVIC原理和使用
stm32·单片机·嵌入式
最爱是生活10 小时前
STM32之硬件SPI
stm32·单片机·嵌入式硬件
微嵌电子12 小时前
STM32 子设备通过CAN发送数据到主设备
stm32·单片机·嵌入式硬件
国科安芯13 小时前
RISC-V双核锁步高性能抗辐照MCU芯片技术解析与应用
单片机·嵌入式硬件·risc-v
傍晚冰川13 小时前
【江协科技STM32】TIM编码器接口测速(学习笔记)
c语言·笔记·科技·stm32·单片机·嵌入式硬件·学习
敬往事一杯酒哈14 小时前
第6章 定时器计数器
单片机·嵌入式硬件
煜36414 小时前
stm32 基于蓝桥物联网赛 oled屏使用
stm32·嵌入式硬件·物联网
dreamczf15 小时前
嵌入式开发之串行数据处理
单片机·mcu·物联网·嵌入式软件
柒十三.16 小时前
江科大51单片机笔记【9】DS1302时钟&可调时钟(下)
笔记·嵌入式硬件·51单片机