ARM裸板开发——UART通信方式及使用(一)

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 1个月
简介: ARM裸板开发——UART通信方式及使用

文章目录

UART相关描述及概念

计算机中常见的几种硬件通信方式

UART串口的定义

UART串口的三种工作方式

UART协议相关概念

ARM裸板操作UART串口进行数据输出

查看芯片手册UART相关内容

支持6路UART

UART控制器内部集成了发送器

UART控制器内部还集成了接收器

波特率配置P969

UART控制器性格的寄存器

代码示例:


UART相关描述及概念

计算机中常见的几种硬件通信方式

计算机中CPU和外设进行硬件通信的方式有以下几种:


  • GPIO通信方式,如:LED等、蜂鸣器等。
  • UART串口通信方式,如:GPS、GPRS等等。
  • I2C总线通信方式,如:重力传感器、加速度传感器、触摸屏等。
  • SPI总线通信方式,如:norflash闪存、触摸屏等、
  • 1-wire(一线式)总线通信方式,例如:温度传感器、EEPROM存储器等。

UART串口的定义

UART串口定义:通用串行异步收发器

通用: UART串口应用非常广泛

串行: CPU和外设进行数据通信时,只需一根信号线即可,此信号线又称数据线,也就是说CPU和外设进行数据通信时,是一个bit位一个bit位的传输:


  • 切记:UART数据传输从低位开始!例如:CPU向BT发送一个0x95这个数据
  • 数据线的操作如下:

高->低->高->低->高->低->低->高
  1   0   1   0   1   0    0  1


20200105222346366.png

并行: CPU和外设数据传输时,需要多根信号线(数据线),8/16/32根,那么也就是一次数据传输可以同时传输8bit/16bit/32bit。

异步: CPU的数据处理速度要远远快于外设,所以CPU和外设进行数据传输时,务必要考虑数据同步。双方在数据正式传输时,只要保证数据同步即可,传输前和传输以后,无需考虑数据同步。


  • 数据同步: CPU向设备发送数据以后,要确保外设能够 正常的将数据接收到,接收完整! 计算机中数据同步的方法有两种:异步和同步。
  • 异步定义: 双方在数据正式传输时,只要保证数据同步即可,传输前和传输以后,无需考虑数据同步。
  • 同步定义: CPU和外设进行数据传输时,如果采用同步方式保证数据同步,那么CPU和外设之间不仅仅有数据线,还需要一根时钟控制信号线,此信号线就是用来实现双方的数据同步。2020010522241243.png

收发器: 接收和发送数据的硬件单元 。


UART串口的三种工作方式

单工: 数据传输永远只能一个方向。

半双工: 数据传输可以两个方向(可以收也可以发,但不能同时进行)

全双工: 数据传输可以同时双向进行,CPU和外设数据传输需要两根数据线,一根用于发送(TX),一根用于接收(RX),一定要记得连接GND。


UART协议相关概念

如何利用异步实现UART串口的数据同步?


  • 在UART数据传输协议中。

空闲位: CPU和外设不再进行数据传输时,数据线上一直发送空闲位,高电平(1)有效。

起始位: CPU和外设进行数据传输时,首先在数据线上要发送一个起始位信号,有效位数:1个bit位,低电平有效。

数据位: 指定有效的数据位数,选择如下:5 / 6 / 7 / 8一般选择为8位。

奇偶校验位: 指示数据传输时是否发生错误,有效的校验位数:1个bit位。对数据的校验方式有三种:奇校验、偶校验、不校验:无需发送校验位。这里以CPU向BT发送0X95数据为例,采用奇校验方式检查数据传世是否发生错误。

注意:CPU和BT必须都是奇校验方式。

停止位: 指示数据传输结束,有效位数 :1 bit或者2bit,有效电平为高电平。

波特率: 指示双方数据传输的速率。本质就是CPU和外设数据传输指定一个步调,波特率由外设来指定。例如:波特率为115200bps表示一秒钟CPU和外设传输115200个bit位。


20200106205730232.png

20200106205730232.png

发送端


  • CPU首先将0x95通过TX数据线发送给BT。
  • CPU计算数据0x95中1的个数(4个,4为偶数)
  • 由于4是一个偶数,而数据校验采用奇校验,所以CPU最后在发送一个校验位(高电平1)这样加起来高电平个数为5个(奇数),满足了奇校验。
  • 结论:校验位为高电平。

发送端 BT接收数据并且判断数据是否正确


  • BT从TX上接收数据0x95
  • BT再从TX上接收CPU发送来的校验位(高电平1)
  • BT先算接收的数据0x95中的1的个数为4,并且采用奇校验来验证,1的个数4和校验位高电平相加符合奇校验。
  • BT发现CPU发送的校验位满足,BT确认CPU发送的数据没问题。

ARM裸板操作UART串口进行数据输出

首先查看原理图,在其中找到UART0对应的连接线。UART0其实就是我们在板子上使用的调试串口,所以UART0从CPU发送数据给PC上位机,上位机通过CRT串口调试能够正常接收到发送的数据。连接图如下:

20200106213456794.png

此时,说明通过CPU核访问操作UARTTXD0和UARTRXD0来实现UART操作。具体如下图:

20200106213410966.png

  • CPU核通过地址指针的形式访问UART控制器内部的一大堆寄存器,也就是CPU核通过软件给UART控制器发送命令。
  • UART控制器根据命令,硬件上自动操作UARTTXD0和UARTRXD0两个引脚。
  • 最终影响外设。
  • 具体如何配置UART控制器和内部寄存器需要查看芯片手册了。
相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
17天前
|
算法 编译器 Linux
【Qt4 部署】ARM系统上使用Qt 4 进行开发的QWS 等环境变量部署
【Qt4 部署】ARM系统上使用Qt 4 进行开发的QWS 等环境变量部署
33 0
|
17天前
|
存储 Ubuntu Linux
ARM-Linux开发与MCU开发的不同之处分析
ARM-Linux开发与MCU开发的不同之处分析
29 0
ARM6818开发板画任意矩形,圆形,三角形,五角星,6818开发板画太极,画五星红旗(含码源与思路)
ARM6818开发板画任意矩形,圆形,三角形,五角星,6818开发板画太极,画五星红旗(含码源与思路)
350 0
|
9月前
|
Linux C++
基于ARM-contexA9-Linux驱动开发:如何获取板子上独有的ID号
基于ARM-contexA9-Linux驱动开发:如何获取板子上独有的ID号
87 0
|
9月前
|
芯片
基于友善之臂ARM-ContexA9-ADC驱动开发
基于友善之臂ARM-ContexA9-ADC驱动开发
43 0
|
9月前
|
缓存 C++
基于ARM-contexA9-蜂鸣器pwm驱动开发
基于ARM-contexA9-蜂鸣器pwm驱动开发
63 0
|
9月前
基于ARM-contexA9蜂鸣器驱动开发
基于ARM-contexA9蜂鸣器驱动开发
50 0
|
算法 物联网 测试技术
开发一个arm固件加载基址定位器
最近入坑iot,涉及很多芯片固件的逆向。但是这些固件很多时候都不是标准二进制格式,也就是说丢进ida,识别不出架构和指令集。架构和指令集可以查芯片的文档,但是加载基址还没法确定,这个靠自己去定位,再配置ida。人工做这个工作太累,而我又是懒狗,所以自动化这一过程不香吗?
|
Linux
ARM6818开发板输入设备(触摸屏)操作(开发五子棋游戏)
ARM6818开发板输入设备(触摸屏)操作(开发五子棋游戏)
324 0
|
Shell
ARM裸板开发——简单编写实现“shell”功能
ARM裸板开发——简单编写实现“shell”功能
166 0