串口
时间:2023-01-13
本文章向大家介绍串口,主要内容包括一、数据通信基础概念、1、串行/并行通信、2、单工/半双工/全双工通信、3、同步/异步通信、4、波特率、5、常见的串行通信接口、二、串口(RS-232)、1、什么是串口、2、RS-232电平与COMS/TTL电平对比、使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
串口
一、数据通信基础概念
1、串行/并行通信
2、单工/半双工/全双工通信
3、同步/异步通信
4、波特率
5、常见的串行通信接口
二、串口(RS-232)
1、什么是串口
2、RS-232电平与COMS/TTL电平对比
3、设备间的RS232通信示意图
4、STM32串口与电脑USB口通信示意图
5、RS-232异步通信协议
三、STM32-USART
1、STM32的USART简介
- Universal synchronous asynchronous receiver transmitter,通用同步异步收发器
- Universal asynchronous receiver transmitter,通用异步收发器
- USART/UART都可以与外部设备进行全双工异步通信
- USART,我们常用的也是异步通信
2、STM32的USART主要特征
- 全双工异步通信
- 单线半双工通信
- 单独的发送器和接收器使能位
- 可配置使用DMA的多缓冲器通信
- 多个带标志的中断源
3、STM32F1/F4/F7的USART框图
4、STM32H7的USART框图
5、STM32F1/F4/F7/H7的USART框图简化版
6、设置USART波特率(F1)
波特比率寄存器(BRR)
使用寄存器设置波特率 - USART1为例
波特率设置通用公式推演(F1)
7、设置USART波特率(F4)
波特率寄存器(BRR)
8、设置USART波特率(F7)
波特率寄存器(BRR)
9、设置USART波特率(H7)
波特率寄存器(BRR)
10、USART寄存器介绍(F1)
控制寄存器1(CR1)
控制寄存器2(CR2)
控制寄存器3(CR3)
数据寄存器(DR)
状态寄存器(SR)
需要配置的时序总结
四、HAL 库外设初始化MSP回调机制
1、HAL库外设初始化MSP回调机制- USART为例
五、HAL 库中断回调机制
1、HAL库中断回调机制 - USART为例(F1)
UART中断回调函数:
HAL_UART_TxCpltCallback() /* 发送完成回调函数 */
HAL_UART_TxHalfCpltCallback() /* 半发送完成回调函数 */
HAL_UART_RxCpltCallback() /* 接收完成回调函数 */
HAL_UART_RxHalfCpltCallback() /* 半接收完成回调函数 */
HAL_UART_ErrorCallback() /* UART错误回调函数 */
HAL_UART_AbortCpltCallback() /* UART中止回调函数 */
HAL_UART_AbortTransmitCpltCallback() /* UART发送中止回调函数 */
HAL_UART_AbortReceiveCpltCallback() /* UART接收中止回调函数 */
六、USART/UART 异步通信配置步骤
功能 | 函数 |
---|---|
配置串口工作参数 | HAL_UART_Init() |
串口底层初始化 | HAL_UART_MspInit() 配置GPIO、NVIC、CLOCK等 |
开启串口异步接收中断 | HAL_UART_Receive_IT() |
设置优先级,使能中断 | HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ() |
编写中断服务函数 | USARTx_IRQHandler()、 UARTx_IRQHandler() |
串口数据发送 | USART_DR, HAL_UART_Transmit() |
1、HAL库相关函数介绍
-
HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
//关键结构体(F1): typedef struct { uint32_t BaudRate; /* 波特率 */ uint32_t WordLength; /* 字长 */ uint32_t StopBits; /* 停止位 */ uint32_t Parity; /* 奇偶校验位 */ uint32_t Mode; /* UART 模式 */ uint32_t HwFlowCtl; /* 硬件流设置 */ uint32_t OverSampling; /* 过采样设置 */ }UART_InitTypeDef
-
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
- 作用:以中断的方式接收指定字节的数据
- 参 1 是 UART_HandleTypeDef 结构体类型指针变量
- 参 2 是指向接收数据缓冲区
- 参 3 是要接收的数据大小,以字节为单位
-
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
- 作用:以阻塞的方式发送指定字节的数据
- 参 1 :UART_HandleTypeDef 结构体类型指针变量
- 参 2:指向要发送的数据地址
- 参 3:要发送的数据大小,以字节为单位
- 参 4:设置的超时时间,以ms单位
七、IO 引脚复用功能
1、何为复用?
- 通用:IO端口的输入或输出是由GPIO外设控制,我们称之为通用
- 复用: IO端口的输入或输出是由其它非GPIO外设控制,我们称之为复用
2、STM32F1的IO引脚复用
3、STM32F4/F7/H7的IO引脚复用
IO引脚复用映射示意图
GPIO 复用功能低位寄存器(AFRL)
GPIO 复用功能高位寄存器(AFRH)
八、串口接收过程
原文地址:https://www.cnblogs.com/lxd-koi/p/17045244.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Pytorch 中的 5 个非常有用的张量操作
- k-近邻算法实现数字识别
- 【Linux_Shell 脚本编程学习笔记五、Oracle JDK1.8 安装shell 脚本】
- vue中子组件使用$emit传值的种种情况
- 前端工程化建设
- 机器学习101-从JAX的角度去实现
- Spring 系列之jdbcTemplate的使用
- 【Linux_Shell 脚本编程学习知识点、判断传入参数是否是 整数】
- 发现一款.NET Core开源爬虫神器:DotnetSpider
- 完整的卸载Jdk java环境教程
- HTML 元素标签语义化及使用场景
- 共享内存原理与VCS监控采集实战
- Spark中的聚类算法
- 【Linux_Shell 脚本编程学习笔记六、shell的数值运算】
- Java自动化测试(adb常用命令 32)