STM32之串口通信

什么是串口

串行通信接口:指按位发送和接收的接口,如RS232/422/485

RS232电平和COMS/TTL电平对比

RS232电平:逻辑1:-15V ~ -3V 逻辑0:+3V ~ +15V
CMOS电平: 逻辑1:3.3V 逻辑0:0V (STM32使用)
TTL电平:逻辑1:5V 逻辑0:0V (51单片机使用)

备注:因为电压不同,所以CMOS/TTL是不能是直接与RS232交换信息,需要电平转换芯片进行电压转换。 如3.3V可以使用MAX323/SP3232转换芯片, 如果是5V可以使用MAX232转换芯片

USART/UART异步通信配置步骤

一、配置串口工作参数、开启串口异步接收中断

使用HAL库接口HAL_UART_Init(); HAL_UART_Receive_IT();

#define RXBUFFERSIZE 1
UART_HandleTypeDef g_uart1_handle;    /* UART句柄 */
uint8_t g_rx_buffer[RXBUFFERSIZE] = {0};         //接收缓冲区
void usart_init(uint32_t baudrate)
{g_uart1_handle.Instance = USART1;g_uart1_handle.Init.BaudRate = baudrate;      								//波特率g_uart1_handle.Init.WordLength = UART_WORDLENGTH_8B;                        //字长为8位数据格式g_uart1_handle.Init.StopBits = UART_STOPBITS_1;                             //一个停止位g_uart1_handle.Init.Parity = UART_PARITY_NONE;                              //无奇偶校验位g_uart1_handle.Init.Mode = UART_MODE_TX_RX;                                 //收发模式g_uart1_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE;                        //无硬件流控HAL_UART_Init(&g_uart1_handle);                                             //HAL_UART_Init()会使能UART1/* 该函数会开启接收中断:标志位UART_IT_RXNE,并且设置接收缓冲以及接收缓冲接收最大数据量 */HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE);}

二、串口底层初始化

使用HAL库接口:HAL_UART_MspInit() 配置GPIO/NVIC/CLOCK等

void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{GPIO_InitTypeDef gpio_init_struct;if (huart->Instance == USART1){
//        __HAL_RCC_USART1_CLK_ENABLE();                  //HAL_UART_Init()中已经使能了USART1的时钟__HAL_RCC_GPIOA_CLK_ENABLE();                                   //使能GPIOA的时钟gpio_init_struct.Pin  = GPIO_PIN_9;                           //PA9  Txgpio_init_struct.Mode = GPIO_MODE_AF_PP;                  //推挽复用输出gpio_init_struct.Pull = GPIO_PULLUP;                          //下拉,因为时钟空闲是低电平gpio_init_struct.Speed = GPIO_SPEED_FREQ_LOW;                 //低速gpio_init_struct.Alternate = USART_TX_GPIO_AF;                //复用为USART1的TXHAL_GPIO_Init(GPIOA, &gpio_init_struct);gpio_init_struct.Pin  = GPIO_PIN_10;                           //PA10  Rx
//        gpio_init_struct.Mode = GPIO_MODE_INPUT;                      //输入
//        gpio_init_struct.Pull = GPIO_PULLUP;                          //上拉gpio_init_struct.Speed = GPIO_SPEED_FREQ_LOW;                 //低速gpio_init_struct.Alternate = USART_RX_GPIO_AF;                //复用为USART1的RXHAL_GPIO_Init(GPIOA, &gpio_init_struct);}}

三、设置优先级、使能中断

使用HAL接口:HAL_NVIC_SetPriority(); HAL_NVIC_EnableIRQ();

 HAL_NVIC_SetPriority(USART1_IRQn, 2, 0);                     //设置优先级HAL_NVIC_EnableIRQ(USART1_IRQn);                              //使能中断

四、编写中断服务函数

使用接口:USARTx_IRQHandler(); UARTx_IRQHandler();


五、串口数据发送

USART DR(数据发送寄存器) 、HAL_UART_Transmit();


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/880148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT----基于QML的计时器

赶上了实习的末班车,现在在做QML开发,第一天的学习成果,一个计时器.逻辑挺简单的,纯QML实现,代码在仓库QT-Timer 学习使用c的listmodel 学习使用了如何用c的listmodel来存储数据. 新建一个TImeListModel类继承自QAbstractListModel class TimeListModel : public QAbstrac…

STM32CUBEIDE FreeRTOS操作教程(五):mutex互斥信号量

STM32CUBEIDE FreeRTOS操作教程(五):mutex互斥信号量 STM32CUBE开发环境集成了STM32 HAL库进行FreeRTOS配置和开发的组件,不需要用户自己进行FreeRTOS的移植。这里介绍最简化的用户操作类应用教程。以STM32F401RCT6开发板为例&am…

蓝牙技术|详谈蓝牙信道探测技术,可实现厘米级精准定位

2024年9月5日,蓝牙技术联盟发布蓝牙6.0核心规范。相比此前各版本,蓝牙核心规范6.0版的主要创新和新功能包括:支持蓝牙信道探测、同步适配层增强、LL扩展功能和 帧空间更新。 蓝牙信道探测 市场上已经有不少高精度定位技术了,像 …

ToF传感器更新

我们最近改进了 ToF 解码管道(固件)和 ToF 工厂校准,该校准已应用于我们最新的带有 ToF 相机的OAK-D-SR-PoE 1. 点云 这是直接来自摄像机的原始点云(没有应用任何后处理过滤器)。 2. ToF 精度 (ToF 深度误差…

界面控件Telerik UI for WinForms 2024 Q3概览 - 支持合并单元格等

Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件。所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌面和平板电脑应用程序提供一致美观的下一代用户体验。 本文将介绍界面组件Telerik UI for WinForms在今年第一…

3d可视化图片:通过原图和深度图实现

1、depthy 在线体验demo: https://depthy.stamina.pl/#/ 也可以docker安装上面服务: docker run --rm -t -i -p 9000:9000 ndahlquist/depthy http://localhost:90001)首先传原图 2)再传对应深度图 3)效果 </ifra

Linux ubuntu debian系统安装UFW防火墙图形化工具GUFW

GUFW是UFW的图形化前端&#xff0c;可以通过以下命令安装&#xff1a; sudo apt install gufw安装成功后&#xff0c;可以通过应用程序菜单启动GUFW&#xff0c;在图形界面中&#xff0c;可以方便地添加、修改和删除规则&#xff0c;查看状态和日志。

分布式系统的概念与设计模式

概念 定义&#xff1a;分布式系统是指将数据和计算任务分散到多个独立的计算机上&#xff0c;这些计算机通过网络进行通信和协作&#xff0c;共同对外提供服务。分布式系统不仅提高了系统的可靠性和可扩展性&#xff0c;还增强了系统的并发处理能力和数据管理能力。 特点&…

【操作系统强化】王道强化一轮笔记

第一章 计算机系统概述 考点1 操作系统的概念、特征和功能 1. 2. 考点2 内核态与用户态 1. 2.用户态和内核态之间的切换本质上就是应用程序和操作系统对CPU控制器的切换 考点3 中断和异常 1. 2. 考点4 系统调用 1. 2. 3.C 考点5 操作系统引导 1. 2. ①磁盘的物理格式化&…

React-Native 中使用 react-native-image-crop-picker 在华为手机上不能正常使用拍照功能

背景: React-Native 0.66 中使用 react-native-image-crop-picker 在安卓 华为手机上不能正常使用拍照功能, 其他品牌正常 代码如下: import ImagePicker from react-native-image-crop-picker;ImagePicker.openCamera(photoOptions).then(image > {callback(image);}) …

库仑定律-库仑力-两个电荷之间静电力的计算公式

图中&#xff1a; q1&#xff0c;q2 为两个电荷r 为电荷间的距离 r ^ 1 , 2 \widehat{r}_{1,2} r 1,2​ 为从 q1 指向 q2 的单位向量 F ⃗ 1 , 2 \vec{F}_{1,2} F 1,2​ 为 q1 施加到 q2 上的静电力 公式&#xff1a; F ⃗ 1 , 2 q 1 q 2 K r 2 r ^ 1 , 2 \vec{F}_{1,2} \f…

七种修复错误:由于找不到msvcr110.dll 无法继续执行的方法

当你在运行某些程序时遇到“找不到msvcr110.dll”的错误提示&#xff0c;这通常意味着你的系统缺少了Microsoft Visual C 2012 Redistributable包中的一个重要文件。这个DLL文件是Microsoft Visual C Redistributable的一部分&#xff0c;用于支持许多使用Visual C编写的软件和…

Tornado 是一个 Python 异步网络库和 web 框架

Tornado 是一个 Python 异步网络库和 web 框架&#xff0c;它最初由 FriendFeed 开发&#xff0c;后来被 Facebook 收购并开源。Tornado 因其非阻塞的 I/O 操作和优秀的性能而广受欢迎&#xff0c;特别是在需要处理大量并发连接的应用中。Tornado 的底层实现主要依赖于 Python …

【软件测试】如何设计测试用例? 设计测试用例常用的方法.

目录 一.什么是测试用例?二.总体设计测试用例的万能公式.2.1 功能性能界面兼容易用安全2.2 弱网测试2.3 安装卸载测试. 三. 常用设计具体测试用例的方法3.1 等价类3.2 边界值3.3 正交法3.3.1 正交表3.3.2 如何设计正交表,并根据正交表编写测试用例 3.4 判定表法3.4.1 根据判定…

《Nginx核心技术》第18章:基于主从模式搭建Nginx+Keepalived双机热备环境

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 星球项目地址&#xff1a;https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…

光子架与电子架 -- 光子架与电子架

电子架 指插放交叉板、OTU单板、支/线路板、保护类单板的子架。 在通用型平台子架和平台子架中如果仅插放OTU单板&#xff08;非中继模式&#xff09;视为电子架。光电混合的子架视为电子架。 电子架主要实现将客户侧信号转换成标准波长的光信号&#xff0c;供光子架调度。 光子…

p18 docker镜像原理之联合文件系统,p19 docker镜像分层的理解

镜像是什么 镜像其实就是一种轻量级的&#xff0c;可执行的一种软件包&#xff0c;用来打包基于环境开发的软件&#xff0c;里面可以包括代码&#xff0c;环境&#xff0c;数据库&#xff0c;配置文件等信息 如何得到镜像&#xff1f; 可以从镜像仓库下载比方说dockerhub 比…

jenkins分布式构建

Jenkins分布式构建是一种将构建任务分散到多个机器上的方法&#xff0c;以提高构建效率和并行处理能力 1. 架构 主节点&#xff08;Master&#xff09;&#xff1a;负责管理构建任务、调度和监控所有从节点。从节点&#xff08;Slave&#xff09;&#xff1a;实际执行构建任务…

JavaEE: 深入探索TCP网络编程的奇妙世界(六)

文章目录 TCP核心机制TCP核心机制九: 面向字节流TCP核心机制十: 异常处理 小小的补充(URG 和 PSH)~TCP小结TCP/UDP 对比用UDP实现可靠传输(经典面试题) 结尾 TCP核心机制 上一篇文章JavaEE: 深入探索TCP网络编程的奇妙世界(五) 书接上文~ TCP核心机制九: 面向字节流 TCP是面…

C++vector类的模拟实现

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 模拟实现vector类 收录于专栏【C语法基础】 本专栏旨在分享学习C的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 前置说明 1. vecto…