打印
[STM32F4]

UART串口通信详解

[复制链接]
989|52
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
今天我们学习STM32CubeMX串口的操作,以及HAL库串口的配置,我们会详细的讲解各个模块的使用和具体功能,并且基于HAL库实现Printf函数功能重定向,UART中断接收,本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用


所用工具:

1、芯片: STM32F407ZET6

2、STM32CubeMx软件

3、IDE: MDK-Keil软件

4、STM32F1xx/STM32F4xxHAL库

5、串口: 使用USART1 PA9,PA10

知识概括:

通过本篇博客您将学到:

STM32CubeMX创建串口例程

HAL库UATR函数库

重定义printf函数

HAL库,UART中断接收

HAL库UATR接收与发送例程

使用特权

评论回复
沙发
突然下起雨|  楼主 | 2022-11-17 10:51 | 只看该作者
工程创建
设置RCC
设置高速外部时钟HSE 选择外部时钟源

使用特权

评论回复
板凳
突然下起雨|  楼主 | 2022-11-17 10:51 | 只看该作者
设置串口

使用特权

评论回复
地板
突然下起雨|  楼主 | 2022-11-17 10:52 | 只看该作者
点击USATR1   
2设置MODE为异步通信(Asynchronous)      
3基础参数:波特率为115200 Bits/s。传输数据长度为8 Bit。奇偶检验无,停止位1      接收和发送都使能
4GPIO引脚设置 USART1_RX/USART_TX
5 NVIC Settings 一栏使能接收中断

使用特权

评论回复
5
突然下起雨|  楼主 | 2022-11-17 10:54 | 只看该作者
NVIC Settings 一栏使能接收中断

使用特权

评论回复
6
突然下起雨|  楼主 | 2022-11-17 11:03 | 只看该作者
设置时钟

我的是  外部晶振为8MHz

1选择外部时钟HSE 8MHz   
2PLL锁相环倍频72倍
3系统时钟来源选择为PLL
4设置APB1分频器为 /2

使用特权

评论回复
7
突然下起雨|  楼主 | 2022-11-17 11:06 | 只看该作者
项目文件设置

使用特权

评论回复
8
突然下起雨|  楼主 | 2022-11-17 11:20 | 只看该作者
设置项目名称
2 设置存储路径
3 选择所用IDE

使用特权

评论回复
9
突然下起雨|  楼主 | 2022-11-17 11:23 | 只看该作者
创建工程文件

然后点击GENERATE CODE  创建工程

使用特权

评论回复
10
突然下起雨|  楼主 | 2022-11-17 11:24 | 只看该作者
配置下载工具

新建的工程所有配置都是默认的  我们需要自行选择下载模式,勾选上下载后复位运行

使用特权

评论回复
11
突然下起雨|  楼主 | 2022-11-17 11:28 | 只看该作者
HAL库UART函数库介绍



  UART结构体定义

UART_HandleTypeDef huart1;
UART的名称定义,这个结构体中存放了UART所有用到的功能,后面的别名就是我们所用的uart串口的别名,默认为huart1

使用特权

评论回复
12
突然下起雨|  楼主 | 2022-11-17 11:29 | 只看该作者
可以自行修改

使用特权

评论回复
13
突然下起雨|  楼主 | 2022-11-17 11:31 | 只看该作者
串口发送/接收函数

HAL_UART_Transmit();串口发送数据,使用超时管理机制
HAL_UART_Receive();串口接收数据,使用超时管理机制
HAL_UART_Transmit_IT();串口中断模式发送  
HAL_UART_Receive_IT();串口中断模式接收
HAL_UART_Transmit_DMA();串口DMA模式发送
HAL_UART_Transmit_DMA();串口DMA模式接收

使用特权

评论回复
14
突然下起雨|  楼主 | 2022-11-17 11:32 | 只看该作者
这几个函数的参数基本都是一样的,我们挑两个讲解一下

串口发送数据:
HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

使用特权

评论回复
15
突然下起雨|  楼主 | 2022-11-17 11:32 | 只看该作者
功能:串口发送指定长度的数据。如果超时没发送完成,则不再发送,返回超时标志(HAL_TIMEOUT)。

使用特权

评论回复
16
突然下起雨|  楼主 | 2022-11-17 11:33 | 只看该作者
参数:

UART_HandleTypeDef *huart      UATR的别名    如 :   UART_HandleTypeDef huart1;   别名就是huart1  
*pData      需要发送的数据
Size    发送的字节数
Timeout   最大发送时间,发送数据超过该时间退出发送   

使用特权

评论回复
17
突然下起雨|  楼主 | 2022-11-17 11:35 | 只看该作者
举例:   HAL_UART_Transmit(&huart1, (uint8_t *)ZZX, 3, 0xffff);   //串口发送三个字节数据,最大传输时间0xffff

使用特权

评论回复
18
突然下起雨|  楼主 | 2022-11-17 11:36 | 只看该作者
中断接收数据:

HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

使用特权

评论回复
19
突然下起雨|  楼主 | 2022-11-17 11:37 | 只看该作者
功能:串口中断接收,以中断方式接收指定长度数据。
大致过程是,设置数据存放位置,接收数据长度,然后使能串口接收中断。接收到数据时,会触发串口中断。
再然后,串口中断函数处理,直到接收到指定长度数据,而后关闭中断,进入中断接收回调函数,不再触发接收中断。(只触发一次中断)

使用特权

评论回复
20
突然下起雨|  楼主 | 2022-11-17 11:38 | 只看该作者
参数:

UART_HandleTypeDef *huart      UATR的别名    如 :   UART_HandleTypeDef huart1;   别名就是huart1  
*pData      接收到的数据存放地址
Size    接收的字节数

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

244

帖子

1

粉丝