串行通信的基本概念

在通信领域内,有两种通信方式:并行通讯和串行通信

串口的数据传输是以串行的方式进行的。串口在数据通讯中,一次只能传输一个比特的数据。串行数据的传输速度用 bps或波特率 来描述

串行通信设计的常用术语

单工、半双工和全双工:

单工:仅能进行一个方向的数据传送。

半双工:数据可以在两个方向进行传送,但是这种传送绝对不能同时进行。

全双工:数据可以在两个方向进行数据传送。

数据传输率:

        每秒传输的二进制位数,单位为bps(bit per second)也称为比特率

异步方式和同步方式:

同步通信方式:所用的数据格式没有起始位、停止位,一次传送的字符个数可变。在传送前,先按照一定的格式将各种信息装配成一个包,该包包括供接收方识别用的同步字符一个或者两个,其后紧跟着要传送的n个字符,再后就是校验字符

异步方式:也称为     起止同步式        

硬件流控制:

如果打开串口硬件流控制后,串口A只有在nCTS被激活就才能吧数据发送出去。

当串口A可以接收数据时,激活nRTS

UTRT通信接口功能模块示意图:

编程原理:数据由总线传输过来,进入 发送/接收  寄存器之前,需判断对应寄存器缓存区中的数据是否为满或者空(发送判满、接收判空);

        这里由三种方式进行判断:1、利用循环,在寄存器内部实现轮询方式,直到对应寄存器满空标志位为空,在进行 写入/读取 数据,以下编程主要采用该种方式。2、采用异常中断的方式来实现。3、使用PWM方式实现。

由查询原理图和芯片手册了解到可能需要编写的寄存器有(需要原理图和芯片手册请私信):

GPA1CON        0x11400020       //用于设置该接口的复用功能UART_2_RXD和UART_2_TXD

ULCON        0x13820000        //用于设置串口协议的数据位、停止位、奇偶校验位

UBRDIV        0x13820028        //用于设置波特率的整数部分

UFRACVAL         0x1382002c        //用于设置波特率的小数部分

UCON         0x13820004        //用于设置串口协议读写工作模式:轮询 or 中断

UTXH/URXH        0x13820020/0x13820024        //寄存器读写缓存区内容

编程阶段

        该阶段使用汇编和C语言混编模式,主要代码在C代码实现。

功能说明:实现连接开发板的终端的屏显。键盘输入之后,在终端显示出来。

        汇编部分:

.textb main.c
.end

        C部分:     

#define GPA1CON          *(volatile unsigned int *)0x11400020
#define ULCON           *(volatile unsigned int *)0x13820000
#define UBRDIV          *(volatile unsigned int *)0x13820028
#define UFRACVAL        *(volatile unsigned int *)0x1382002c
#define UCON            *(volatile unsigned int *)0x13820004
#define UTRSTAT         *(volatile unsigned int *)0x13820010
#define UTXH            *(volatile unsigned int *)0x13820020
#define URXH            *(volatile unsigned int *)0x13820024
void gpio_init()
{//设置GPA1_0复用 UART_2_RXD功能,GPA1_1复用 UART_2_TXD功能// GPA1CON   = GPA1CON & ( ~(0xff << 0)) | (0x2 << 0) | (0x2 << 4);GPA1CON    = GPA1CON & ( ~(0xff << 0)) | (0x22 << 0);
}
void uart_init()//初始化串口协议
{//设置串口协议:数据位(8)、停止位(1)、奇偶校验位(无): 0000011ULCON |= 0x3;//设置波特率:115200// DIV_VAL = (PCLK_UART)/ (bps *16) -1//         = 100MHZ / (115200*16)-1//         = 100000000 / 115200/16-1//         = 53.25// UBRDIV  = 53// UFRACVAL = 0.25*16 = 4UBRDIV = 53;UFRACVAL = 4;//设置发送和接受数据的 工作模式: 中断或轮询 0101UCON = 0x05;
}
void uart_send(char ch)
{// while( UTRSTAT & (0x1 << 1) != 0x2 );while( !(UTRSTAT & (0x1 << 1)) );//采用轮询方式阻塞等待发送缓存区清空UTXH = ch;
}
char uart_recv()
{// while( UTRSTAT & (0x1) != 1);while( !(UTRSTAT & (0x1)));//阻塞等待return URXH & 0xff;
}void send(char *p)
{while(*p){uart_send(*p++);}
}
int main()
{gpio_init();uart_init();send("\r\n")// 发送一个换行符while(1){send(uart_recv());  }
}

效果:

详细原理讲解请参考:↓↓↓ 这个讲得好

(1条消息) ARM裸板开发——UART通信方式及使用_跑不了的你的博客-CSDN博客

ARM_UART 串行通讯基础知识及编程相关推荐

  1. 【Arduino】使用C#实现Arduino与电脑进行串行通讯

    在给Arduino编程的时候,因为没有调试工具,经常要通过使用串口通讯的方式调用Serial.print和Serial.println输出Arduino运行过程中的相关信息,然后在电脑上用Arduin ...

  2. 基于51的串行通讯原理及协议详解(uart)

    串行与并行通讯方式 并行:控制简单,传输速度快.线多,长距离成本较高且同时接受困难. 串行:将数据字节分成一位一位的行驶在一条传输线上进行传输.如图: 同步与异步串行通讯方式 同步串行通讯方式:同步通 ...

  3. 单片机的串行通讯就是排成一队走,并行就是排成一列走

    单片机的串行通讯就是排成一队走,并行就是排成一列走 ///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像黑色字体加我地球呺也能领 ...

  4. CAN总线技术 | 物理层02 - CAN总线的异步串行通讯

    文章目录 一.前言 二.如何解决波特率误差带来的通信错误? 三.填充位 一.前言 广州虹科录制的CAN总线技术课程非常不错,建议同学们学习一下.B站的地址:https://www.bilibili.c ...

  5. 异步串行通讯和同步串行通讯对比

    异步串行通讯和同步串行通讯对比 作者:刘洪涛,华清远见嵌入式学院高级讲师,ARM ATC授权培训讲师. 在计算机系统中,CPU和外部通信有两种通信方式:并行通信和串行通信.而按照串行数据的时钟控制方式 ...

  6. 计算机基础知识对编程的重要性

    码农和架构师的差别在哪里 从题目看文章,大家的第一想法是本篇文章是一篇讲述计算机基础知识和编程之间的关系,但是为什么开篇是这样的呢?当然这样的开篇并没有多大的意义,唯一的目的就是吸引读者而已. 纵观计 ...

  7. 痞子衡嵌入式:串行NOR Flash的页编程模式对于量产效率的影响

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是串行NOR Flash的页编程模式对于量产效率的影响. 任何嵌入式产品最终都绕不开量产效率话题,尤其是对于主控是非内置 Flash 型 ...

  8. [转载]Palm 串行通讯GPS数据读取的实现

    Palm 串行通讯GPS数据读取的实现 关于J2ME程序编写的教程,各大网站均有介绍.但是J2ME教程的学习与实际应用毕竟还有一段距离.笔者从事J2ME一年多, 已经成功地开发出基于无线互联网palm ...

  9. 串行通讯 -- IIC通讯原理

    前言 I2C是最常见的串行通讯,广泛应用于芯片之间通讯.常见的有EEPROM,温度传感器,触摸屏等.本文力求简单明了把I2C通讯协议说清楚.后面文章会举一些I2C器件示例,让大家更深入理解I2C. I ...

最新文章

  1. JavsScript与时间相关的函数
  2. 路由器固件下的小试牛刀,与漏洞相关的经验分享
  3. Windows Terminal Preview 1.5 发布
  4. Linux打印cups API及代码范例链接
  5. 极速PyQt5基础教程06:QtDesigner设计软件界面
  6. 2022年烷基化工艺找解析及烷基化工艺考试总结
  7. 格拉姆矩阵(Gram matrix)详细解读
  8. 最新CCF会议|2022-2023顶会会议时间+投稿时间+官网链接(视觉+多媒体+数据挖掘+数据库+通用人工智能)
  9. php 打开word显示无法打开文件,word无法打开文件,因为内容有误怎么办
  10. Android中MaterialSearchView(搜索框)的简单实用
  11. 操作系统原理总结,非科班必看!!!
  12. OpenLayers之 图层
  13. 杰理之杰理音箱方案选型【篇】
  14. 《进击吧!Blazor!》系列入门教程 第一章 3.页面制作
  15. 【语法一】基础语法入门
  16. 华为云王楠楠:分布式云原生全域调度的技术和实践
  17. 关于 LINK : warning LNK4075: ignoring /INCREMENTAL due to /option 的连接警告问题
  18. 快速测量电子体温计方案
  19. 10kv电压互感器型号_高压互感器型号含义
  20. 什么是SIP广播系统

热门文章

  1. C Primer Plus (第五版)中文版——第 10 章 数组和指针
  2. c# 实现2个程序同时操作读写一个文件、一个读一个写
  3. RBA认证培训,RBA验厂致力于改善企业的供应链
  4. Array.Sort()排序的原理
  5. 上穷碧落下黄泉,源码追踪经验谈——侯捷
  6. springMVC开发过程中遇到的404错误的两种情况总结
  7. C练题笔记之:Leetcode-38. 外观数列
  8. 【AI特训营】:柯西分布 Paddle API实现
  9. 块级元素、行内元素及行内块元素
  10. 数据结构课程设计(十一)---关键路径问题