| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 串口通信中关键知识点4 -> 正文阅读 |
|
[嵌入式]串口通信中关键知识点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); |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 3:43:46- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |