stm32 HAL库 UART 笔记

 USART也叫通用同步/异步串行接收/发送器。USART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备。和UART(通用异步收发器)一样也是一种通用串行接口。而UART仅支持异步通信方式。

stm32 串口工作方式:

                        

阻塞方式 

简单理解就是在while(1)中一直等待,只要没有数据来,就会一直等待,特别浪费CPU资源。

(回环测试)

配置过程:我们选择的是USART,这里我们选择异步通信就可以了。

Asynchronous 异步通信

Synchronous 同步通信

        

配置波特率、数据宽度、校验位、停止位,数据的方向。

                

我们看一下生成的代码:

串口配置初始化:

        

GPIO初始化 A9 A10 初始GPIO时钟、UART时钟 A9(TX)为复用推挽输出

                

常用串口的接口函数:

阻塞模式的接收函数:HAL_UART_Receive()函数

参数1 串口的句柄

参数2 一个数组

参数3 数组长度

参数4 接收数据等待时间

阻塞模式的发送函数:HAL_UART_Transmit()函数,参数与接收函数一样。

具体操作:

在主函数中 ,定义一个接收数组

在while(1)中

下载代码,看实现结果:

                

串口中断方式实现

回环测试+串口控制LED的亮灭

配置过程:与阻塞方式不同的就是使能中断。

生成代码:串口中断配置,这里与阻塞方式对比,不难发现,这里使能了中断优先级、中断向量

生成的串口中断触发函数

进入HAL_UART_IRQHandler函数  在这里调用了UART_Receive_IT函数

这个函数里面对数据数组进行处理,并且调用HAL_UART_RxCpltCallback函数

非阻塞串口发送数据函数 HAL_UART_Transmit_IT()

阻塞串口接收数据函数,HAL_UART_Receive_IT()确切的说是使能了串口中断接收函数,因为这个函数调用了UART_Start_Receive_IT函数。

进入UART_Start_Receive_IT函数,这里面对接收的数据,数据的大小进行操作,并且使能了串口接收中断。所以HAL_UART_Receive_IT也就使能了串口接收中断。

具体实现如下:

使能串口接收

回环测试和LED操作在回调函数操作:

Strncmp函数

用来比较指定长度两个字符串的大小

头  文  件:#include <string.h>

返  回  值:(与strncmp相同)str1 = str2   则返回0,

                   str1 > str2  则返回大于0的值,

                   str1 < str2  则返回小于0的值

实现结果:

空闲中断+串口DMA

配置过程:相关时钟配置,不论述了,使能DMA,串口DMA通道是固定的。等下面复习到DMA,在为大家说明一下。这里面对DMA的模式进行选择,选择正常模式,数据运输方向外设到寄存器、寄存器到外设。选择数据宽度为1个字节。

生成代码如下:

dma.c文件  使能DMA时钟、使能DMA通道、DMA中断

uart.c文件  HAL_UART_MspInit函数 对GPIOA时钟使能、串口时钟使能、配置GPIO

对DMA 进行相关配置 包括通道、数据运输方向、传输周期、数据宽度等相关操作。这里面调用了

__HAL_LINKDMA()函数

__HAL_LINKDMA()函数,(确切的说是宏),可以理解为将UART与DMA连接起来。

进行使用空闲中断+DMA

首先在UART.c 文件的MX_USART1_UART_Init函数中进行操作

系统一上电,执行startup文件,然后执行main.c,在这面main.c文件中会调用MX_USART1_UART_Init函数,所以在进行串口的初始化后,要使能空闲中断、串口DMA中断。

Uart.h 变量的声明

在UART.c文件中 

HAL_UART_Receive_DMA()函数和HAL_UART_Receive_IT函数用法差不多。

      __HAL_UART_ENABLE_IT这个宏的操作,这个宏在串口发送数据的函数中调用过,对特殊中断进行使能         ​​​​​​​        ​​​​​​​

  参数1 句柄

参数2 特殊中断

然后,在触发函数中操作

因为我们是使用串口的空闲中断,将数据通过DMA传输给SRAM的,所以我们要在串口的触发函数进行操作。

主函数发送数据

实现结果:

        ​​​​​​​        

  • 16
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32L4xx系列使用UART HAL库来实现与串行设备的通信。UART HAL库STM32Cube固件套件中的一部分,专门用于简化STM32微控制器的串行通信编程。 UART(通用异步收发传输)是一种常见的串行通信协议,它允许设备之间通过单条数据线进行双向通信。在STM32L4xx系列中,UART HAL库提供了一组函数来配置和控制UART外设。 使用UART HAL库,我们可以进行以下操作: 1. 初始化UART外设:使用HAL_UART_Init函数来初始化UART外设,设置波特率、数据位、停止位等参数。 2. 发送数据:使用HAL_UART_Transmit函数发送数据,将要发送的数据写入发送缓冲区,并通过UART发送出去。 3. 接收数据:使用HAL_UART_Receive函数接收数据,将从UART接收到的数据写入接收缓冲区。 4. 中断处理:使用HAL_UART_IRQHandler和HAL_UART_RxCpltCallback函数来处理接收中断。当收到数据时,可以在回调函数中处理数据。 5. DMA传输:使用DMA传输模式可以实现在不使用CPU的情况下进行数据传输,提高系统性能。使用HAL_UART_Transmit_DMA和HAL_UART_Receive_DMA函数启动DMA传输。 6. 中断和DMA的组合:可以同时使用中断和DMA来处理UART数据传输,实现更灵活和高效的通信。 总之,STM32L4xx系列使用UART HAL库可以简化串行通信的编程过程,提供了丰富的功能和灵活的配置选项,使得与串行设备的通信变得更加易于实现和管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值