串口通信中关键知识点4
串口基本配置的寄存器,配置过程总结为:
1、串口时钟使能。这里的串口1设置是APB2ENR寄存器的第4位。
2、串口波特率设置。每个串口都有一个自己独立的波特 率寄存器 USART_BRR,通过设置该寄存器就可以达到配置不同波特率的目的。
3、串口控制。STM32F429 的每个串口都有 3 个控制寄存器 USART_CR1~3,串口的很多 配置都是通过这 3 个寄存器来设置的。这里我们只要用到 USART_CR1 就可以实现我们的功能。
4、数据发送与接收。STM32F429 的发送与接收是通过数据寄存器 USART_DR 来实现的, 这是一个双寄存器,包含了 TDR 和 RDR。
5、串口状态。串口的状态可以通过状态寄存器 USART_SR 读取。
思考:假如用HAL库进行配置的话,实现过程是什么?
第一:初始化函数 HAL_UART_Init 相关函数:
HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart);
解释:函数只有一个入口参数 huart,为 UART_HandleTypeDef 结构体指针类型,称为:句柄。
第二:使能串口和 GPIO 口时钟
使用串口,我们必须使能串口时钟和使用到的 GPIO 口时钟。
__HAL_RCC_USART1_CLK_ENABLE(); //使能 USART1 时钟 __HAL_RCC_GPIOA_CLK_ENABLE(); //使能 GPIOA 时钟
第三:GPIO 口初始化设置(速度,上下拉等)以及复用映射配置
GPIO_InitTypeDef GPIO_Initure;
GPIO_Initure.Pin=GPIO_PIN_9|GPIO_PIN_10; //PA9/PA10 GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_FAST; //高速
GPIO_Initure.Alternate=GPIO_AF7_USART1; //复用为 USART1 HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化 PA9/PA10
第四:开启串口相关中断,配置串口中断优先级
__HAL_UART_ENABLE_IT(huart,UART_IT_RXNE); //开启接收完成中断
第一个参数:huart为串口句柄 第二个参数:要开启的中断类型。
__HAL_UART_DISABLE_IT(huart,UART_IT_RXNE); //关闭接收完成中断
HAL_NVIC_EnableIRQ(USART1_IRQn); //使能 USART1 中断通道 HAL_NVIC_SetPriority(USART1_IRQn,3,3); //抢占优先级 3,子优先级3
第五:编写中断服务函数
void USART1_IRQHandler(void);
第六:串口数据接收和发送
发送与接收是通过数据寄存器 USART_DR 来实现。当向该寄存器写数据的时候,串口就会自动发送,当收到数据的时候,也 是存在该寄存器内。
HAL 库操作 USART_DR 寄存器发送数据的函数是:
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
通过该函数向串口寄存器 USART_DR 写入一个数据:
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
相关文章
- Python 知识点
- Java核心知识点学习----线程中如何创建锁和使用锁 Lock,设计一个缓存系统
- 【学习总结】jmeter核心知识点
- java核心知识点学习----重点学习线程池ThreadPool
- 【学习总结】jmeter核心知识点
- Atitit it领域知识点 划分 acm18知识树 目录 1. Acm总结的18个计算机科学关键领域 ACM知识树1 1.1. 大学级别的计算机科学知识可以归纳成14个知识领域:3 2. U
- Python之matplotlib:利用matplotlib绘制八象空间三维图案例(知识点包括散点图、折线图、标注文字、图例、三维坐标)之详细攻略
- java知识点
- 2021年软件测试必看的2大知识点:如何转自动化测试?学习软件测试好还是开发好?
- PHP 中操作数组的知识点
- 【概率论与数理统计】第四章知识点复习与习题
- 【C语言】C语言字符串 | 关于String | 通过国外教材讲解字符串 | 专栏遗漏知识点补充