ARM_5_UART总线接口实验

一、总线相关的概念

1.1、总线的含义

        定义:总线是不同设备间通信的桥梁

比如:

        PC ----------------   UART总线------------------  SOC

        SOC(stm32mp157a) --------------- IIC总线 ----------------   空气温湿度芯片(si7006)

 

1.2、串行通信 和 并行通信

 1.2.1、串行总线

        定义:通信双方只有一根双向的数据线,同一时刻传输数据时,需要1bit位,1bit位传输

        比如:UART总线,IIC总线,SPI总线,USB总线,RS485总线,CAN总线

1.2.2、并行总线

        定义:通信双方具备多条数据线,同一时刻传输数据时,可以多位收发

        比如:显示屏,触摸屏,摄像头驱动

 

1.3、单工通信、半双工通信、全双工通信

 1.3.1、单工通信

        定义:通信设备,要么只能发送数据,要么只能接收数据,比如广播

1.3.2、半双工通信

        定义:通信设备可以发送数据也可以接收数据,但同一时刻,只能发或只能收,如对讲机

1.3.3、全双工通信

        定义:通信设备可以发送数据也可以接收数据,同一时刻,既能发也能收,如手机

半双工通信:IIC总线,RS485总线,CAN总线

全双工通信:UART总线,SPI总线

 

1.4、同步通信和异步通信

1.4.1、同步通信

        通信双方共用相同的时钟源,能做到数据接收和数据发送的同步性

 1.4.2、异步通信

        通信双方使用各自的时钟源进行通信

        注意:想要实现异步通信双方数据收发准确性,需要将通信双方的通信速率通信协议等配置成相同的

 

 1.5、不同总线的特性

1.5.1、UART总线

        异步串行全双工总线

        UART总线别名:串口通信

1.5.2、IIC总线

        同步串行半双工总线

1.5.3、SPI总线

        同步串行全双工总线

二、UART总线的硬件连接

2.1、串口通信的硬件(DB9)

 

 2.2、串口通信硬件(DB9)的引脚定义

        注意:虽然串口通信需要使用到DB9公/母头,DB9具备9个引脚,但是实际开发中,使用DB9实现串口通信只需要3个线,如下图

        串口通信的三线制

                1、TXD线(数据发送线)

                2、RXD线(数据接收线)

                3、GND线(地线)

 

2.3、串口的硬件连接

2.3.1、通过USB转串口线的方式

2.3.2、 ST-Link转接器连接方式

2.3.3、 通过USB转串口板的连接方式

 

三、串口的通信协议(重点)

波特率:串口通信时,1s(1秒)接收或者发送数据的位数,单位bps(bit / s)

常见的波特率:4800 9600 115200

基于下图乱码可得:

        串口通信的双发需要配置好UART通信的波特率和协议,才能准确收发正确的数据

常见的串口通信协议:8N1

 

四、分析原理图

        主板原理图:FS_MP1A.pdf(第1页)

        主板原理图:FS_MP1A.pdf(第14页)

         主板原理图:FS_MP1A.pdf(第5页)

 

 UART4_TX的引脚:PG11

UART4_RX的引脚:PB2

 

五、分析芯片手册

5.1、分析框图

 基于框图可知:

        1、需要分析各个外设控制器的基地址

        2、需要分析RCC章节

        3、需要分析GPIO章节

        4、需要分析UART章节

5.2、分析2.5.2章节找RCC GPIOB GPIOG UART4的基地址

        芯片手册(2.5.2章节)

 由上图可知:

        1、RCC的基地址:0x50000000

        2、GPIOB的基地址:0x50003000

        3、GPIOG的基地址:0x50008000

        4、UART4的基地址:0x40010000

5.3、分析RCC章节

        芯片手册(第10章节)

由上图可知:

        1、RCC_MP_AHB4ENSTER[1] = 0b1                使能GPIOB相关外设

        2、RCC_MP_AHB4ENSTER[6] = 0b1                使能GPIOG相关外设

        3、RCC_MP_APB1ENSTER[16] = 0b1               使能GPIOB相关外设

5.4、 分析GPIO章节

5.4.1、GPIO介绍

 

5.4.2、GPIOx_MODER寄存器

由上图可知:

        1、GPIOB_MODER[ 5 : 4 ] = 0b10                设置PB2引脚为复用功能

        2、GPIOG_MODER[ 23 : 22 ] = 0b10            设置PG11引脚为复用功能

 

5.4.3、GPIOx_AFRL寄存器

现在需要查看stm32mp157a.pdf的第4章节的表8和表9查看AF0-15对应的模式

由上图可知:

        GPIOB_AFRL[11:8] = 0b1000           将PB2引脚配置为UART4_RX的复用功能

5.4.4、GPIOx_AFRH寄存器

由上图可知:

        GPIOG_AFRH[15 : 12]  =  0b110           将PG11引脚配置为UART4_TX的复用功能

5.5、分析UART章节

5.5.1、UART章节介绍

        UART的框图:

5.5.2、USART_CR1寄存器

由上图可知:

        1、设置8位数据位:USART_CR1[28] = 0b0, USART_CR1[12] = 0b0

        2、设置16倍的采样率:USART_CR1[15] = 0b0

        3、禁止校验位:USART_CR1[10] = 0b0

        4、使能发送寄存器:USART_CR1[3] = 0b1

        5、使能接收寄存器:USART_CR1[2] = 0b1

        6、使能串口:USART_CR1[0] = 0b1

5.5.3、USART_CR2寄存器

由上图可知:

        配置1位停止位:USART_CR2[13:12] = 0b00

5.5.4、USART_BRR寄存器

由上图可知:

        波特率计算公式在stm32mp157a-datasheet.pdf的53.5.7可见

        想要设置波特率为115200bps,就需要设置BRR[15:0] = 0x22B(采样率over8 = 0需要在BRR寄存器设置前完成)

5.5.5、USART_ISR寄存器

由上图可知:

        USART4_ISR[7]   判断此位是否为1

5.5.6、USART_RDR寄存器

 由上图可知:

        通过串口接收到的数据会被存档到USART_RDR寄存器中,程序员需要读取RDR寄存器中的数值

5.5.7、USART_TDR寄存器

由上图可知:

        我们想要通过串口发送数据,就需要向USART_TDR寄存器中写入数值

5.5.8、USART_PRESC寄存器

由上图可知:

        对时钟信号进行不分频操作:USART_PRESC[3:0] = 0b0000

任务:

1、串口字符打印,当串口工具输入a时,串口工具回显b

        (回显时ASSCI自动追加1)

2、串口字符串打印,当在串口工具输入this is me后,回车,串口工具再次打印this is me

        (串口把收到的字符串给换回来,需要换行并在行首重新打印)

3、串口控制led灯实验,当串口工具输入led1_on时,led1灯亮

4、总结UART通信的理论知识

        4.1> UART是几线制?

        4.2> UART的特性?

        4.3> 串口通信协议?

5、面试题:你是如何通过UART总线进行串口工具显示的?

        1> 使用UART总线前需要配置哪些东西?

        2> 如何配置的?

        3> 实现串口收发时,需要注意哪些内容?

代码:

uart.h

uart.c

main.c

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++报错已解决】std::ios_base::failure

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

“JY901传感器“学习笔记

目录 一、产品概述 二、产品功能介绍 2.1、轴向说明 2.2、模块校准 2.3、姿态角 2.4、大地坐标系、地心地固坐标系、站心坐标系 三、参考文献 一、产品概述 模块集成高精度的陀螺仪、加速度计、地磁场传感器,采用高性能的微处理器和先进的动力解算与卡尔曼动…

征程6 上基于 DEB 工具实现包管理

1.引言 在开发、调测过程中,开发人员需要将系统软件、应用软件部署到 Soc 板端,以用于运行调试。传统的部署方式是通过解压复制或者调用部署脚本。这样的部署方式需要有着方式不统一、维护投入大的缺点。 在 linux 系统上,大多采用包管理的…

罕见,回复问询后闪电终止,业绩存下滑风险

《IPO魔女》认为,和美精艺利润低且大幅波动,报告期公司毛利率持续大幅下滑。而2023年同行业的上市公司均出现了业绩大幅下滑的情况,还未上市的和美精艺恐怕也存在业绩下滑的风险。此外,2020年至2022年,和美精艺研发投入…

docker的harbor仓库登录问题

目录 一、问题描述 二、证书信任问题 三、DNS解析问题 四、解决 参考链接:Docker login Harbor报错解决:Error response from daemon: Get https:..-阿里云开发者社区 一、问题描述 问题: 挂机或者挂机重启之后harbor登录不上 查看日…

【质优价廉】GAP9 AI算力处理器赋能智能可听耳机,超低功耗畅享未来音频体验!

当今世界,智能可听设备已经成为了流行趋势。随后耳机市场的不断成长起来,消费者又对AI-ANC,AI-ENC(环境噪音消除)降噪的需求逐年增加,但是,用户对于产品体验的需求也从简单的需求,升…

【Qt笔记】QStackedWidget控件详解

目录 引言 一、基础功能 二、属性设置 2.1 属性介绍 2.2 代码示例 2.3 代码解析 三、常用API 3.1 添加子部件 3.2 插入子部件 3.3 移除子部件 3.4 设置当前页面索引值 3.5 设置当前显示子部件 3.6 返回索引处子部件指针 3.7 返回子部件索引值 四、信号与槽 4.…

代码随想录Day 58|拓扑排序、dijkstra算法精讲,题目:软件构建、参加科学大会

提示:DDU,供自己复习使用。欢迎大家前来讨论~ 文章目录 图论part08**拓扑排序精讲**题目:117. 软件构建拓扑排序的背景解题思路:模拟过程 **dijkstra(朴素版)精讲**题目:47. 参加科学大会解题思…

OpenCV视频I/O(5)视频采集类VideoCapture之从视频流中获取下一帧的函数grab()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 从视频文件或捕获设备中抓取下一帧。 grab() 函数是 OpenCV 中 VideoCapture 类的一个成员函数,用于从视频流中获取下一帧而不立即检…

Android Studio 真机USB调试运行频繁掉线问题

一、遇到问题 Android Studio使用手机运行项目时,总是频繁掉线,连接很不稳定,动不动就消失,基本上无法使用 二、问题出现原因 1、硬件问题:数据线 换条数据线试试,如果可以,那就是数据线的…

element plus block报错

解决: ::v-deep input[aria-hidden"true"] {display: none !important }

9.3 Linux_I/O_文件I/O相关函数

打开与关闭 1、打开文件 int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);返回值:成功返回文件描述符,失败返回EOF pathname:文件路径 flags:标志,其中O_RDO…

《面向对象是怎样工作的》笔记

6、1、在面向对象的世界中,我们需要事先为所有的行动准备好方法并通过消息传递来调用方法,这样事物才会开始运作。 2、实际上,类、继承和多态应该被明确定义为能提高软件的可维护性和可重用行的结构。类将变量和子程序汇总在一起&#xff0c…

Vue 技术入门 day1 模版语法、数据绑定、事件处理、计算属性与监视、class和style绑定、条件渲染v-if/v-show、列表渲染v-for

目录 1.Vue 核心 1.1. Vue 简介 1.1.1 介绍与描述 1.1.2 Vue 的特点 1.2 模板语法 1.2.1 模板的分类 1.2.2 插值语法 1.2.3 指令语法 1.2.4 实例 1.3 数据绑定 1.3.1 单向数据绑定 1.3.2 双向数据绑定 1.3.3 MVVM 模型 1.3.4 data与el的2种写法 1.3.5 实例 1.3.…

信息安全工程师(25)网络安全体系框架主要组成和建设内容

一、主要组成 信息安全战略:确立组织的信息安全目标和方向,指导整个网络安全体系的建设和运营。信息安全政策和标准:制定和执行一系列信息安全政策、标准和规范,确保网络安全活动有法可依、有章可循。信息安全管理:包括…

网站建设中常见的网站后台开发语言有哪几种,各自优缺点都是什么?

市场上常见的网站后台开发语言有PHP、Python、JavaScript、Ruby、Java和.NET等。这些语言各有其独特的优缺点,适用于不同的开发场景和需求。以下是对这些语言的具体介绍: PHP 优点:PHP是一种广泛用于Web开发的动态脚本语言,特别适…

《论文阅读》 用于产生移情反应的迭代联想记忆模型 ACL2024

《论文阅读》 用于产生移情反应的迭代联想记忆模型 ACL2024 前言简介任务定义模型架构Encoding Dialogue InformationCapturing Associated InformationPredicting Emotion and Generating Response损失函数问题前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦…

成都睿明智科技有限公司赋能商家高效变现

在这个日新月异的数字时代,抖音电商正以不可阻挡之势崛起,成为众多品牌与商家竞相角逐的新战场。在这片充满机遇与挑战的蓝海中,成都睿明智科技有限公司如同一颗璀璨新星,凭借其专业的服务、创新的策略和敏锐的市场洞察&#xff0…

NLP 文本分类任务核心梳理

解决思路 分解为多个独立二分类任务将多标签分类转化为多分类问题更换 loss 直接由模型进行多标签分类 数据稀疏问题 标注更多数据,核心解决方案: 自己构造训练样本 数据增强,如使用 chatGPT 来构造数据更换模型 减少数据需求增加规则弥补…

[element-ui]记录对el-table表头样式的一些处理

1、表头换行 & 列表项换行 可用element-table组件自带的方法实现列标题换行的效果 2、小圆点样式