基于stm32的HAL库串口发送/接收一个字符(二)

小实验1:通过串口发送/接收一个字符

实验目的

使用串口1发送/接收一个字符。

1、串口初始化
#include "uart.h"

UART_HandleTypeDef uart_handle = {0};

void uart1_init(uint32_t baudrate)//baudrate是波特率
{
    
    uart1_handle.Instance          = USART1;             //选择通用异步收发器
    uart1_handle.Init.BaudRate     = baudrate;           //baudrate 是波特率
    uart1_handle.Init.WordLength   = UART_WORDLENGTH_8B; //字长参数列表用用的8位
    uart1_handle.Init.StopBits     = UART_STOPBITS_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(&uart_handle);
}
2、Msp

msp公用的一个函数这里有三个串口,都会调用msp先进行一个判断

参考8.1.11 外设的GPIO配置

RXNE

void HAL_UART_MspInit(UART_HandleType *huart)
{
    if(huart->Instance == USART1)//先进行一个判断
    {
    //GPIO配置
    __HAL_RCC_USART1_CLK_ENABLE();
    __HAL_RCC_GPIOA_CLK_ENABLE();
    GPIO_InitTypeDef gpio_initstruct;
    //配置TX
    gpio_initstruct.Pin  =  GPIO_PIN_9; //PA9是TX  写
    gpio_initstruct.Mode =  GPIO_MODE_AF_PP;

    //由参考手册GPIO口,外设GPIO口配置要求 stm
    //32中文参考手册V10 
    //每个GPIO口在其他用用场景下应该把它配制成怎样的模式串口模式一般是复用

    gpio_initstruct.Pull =  GPIO_PULLUP;
    gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOA,&gpio_initstruct);
    //配置RX
    gpio_initstruct.Pin  =  GPIO_PIN_10; //PA10是RX  写
    gpio_initstruct.Mode =  GPIO_MODE_AF_INPUT;//复用输入模式和输入模式是一样的
    HAL_GPIO_Init(GPIOA,&gpio_initstruct);
    //NVIC
    HAL_NVIC_EnableIRQ(USART1_IRQn);//使能中断
    HAL_NVIC_SetPriority(USART1_IRQn,2,2);//设置中断优先级,随便设置
    
    //如何确定RXNE被置为1 __HAL_UART_ENABLE_IT(*,RXNE) 非空中断使能
    __HAL_UART_ENABLE_IT(&UASRT1_IRQn,RXNE);
    
}
}
3、中断服务函数
void USART1_IRQHandler(void)
{
    //判断什么时候数据的收发 如何判断是否收到数据  
    //看RXNE  RDR接收数据寄存器内不为空 就会触发一个中断就可以进行一个操作

     //被置1不为RESET

    if(__HAL_UART_GET_FLAG(&uart1_handle,UART_FLAG_RXNE) != RESET)                                
    {
        //进行接收
        //接收的位置,接收的数据,接受的长度,超时时间
        HAL_UART_Receive(&uart1_handle,&receive_data,1,1000);

        //发出数据一定时间内发出
        HAL_UART_Transmit(&uart1_handle,&receive_data,1,1000);        
    }
}
4、main
#include "sys.h"
#include "uart1.h"

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值