(十六)串口UART

news2024/11/17 15:48:51

文章目录

  • UART简介
  • 传输数据帧和波特率
  • 定时器1作为串口1波特率发生器
    • 串口部分相关寄存器
    • TMOD
    • AUXR
    • PCON
    • SCON
    • SBUF
  • 串口1工作模式1:8位UART,波特率可变总体工作原理
  • 如何简单接收一个字符和发送数据
  • 一步之遥的设置
  • 现象演示


UART简介

通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器。是一种串行、异步、全双工的通信协议,并且只要一对传输线就可以实现双向通信,大大降低了成本,但传送速度较慢

传输数据帧和波特率

在这里插入图片描述

1. 波特率
异步通讯中由于没有时钟信号所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码,图中用虚线分开的每一格就是代表一个码元。常见的波特率为4800、9600、115200等。

单位bit/s–所以波特率就是传输数据速度快慢的反应,比如9600波特率,那就是1s传输9600bit(位)

2. 通讯的起始和停止信号
串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑0的数据位表示,而数据包的停止信号可由0.5、1、1.5或2个逻辑1的数据位表示,只要双方约定一致即可

3. 有效数据
在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为5、6、7或8位长。

4. 数据校验
在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验(odd)、偶校验(even)、0校验(space)、1校验(mark)以及无校验(noparity),它们介绍如下:

  1. 奇校验要求有效数据和校验位中"1"的个数为奇数,比如一个8位长的有效数据为:01101001,此时总共有4个"1",为达到奇校验效果,校验位为"1",最后传输的数据将是8位的有效数据加上1位的校验位总共9位。
  2. 偶校验与奇校验要求刚好相反,要求帧数据和校验位中"1"的个数为偶数,比如数据帧:11001010,此时数据帧"1"的个数为4个,所以偶校验位为"0"。
  3. 0校验是不管有效数据中的内容是什么,校验位总为"0",1校验是校验位总为"1"。
  4. 在无校验的情况下,数据包(帧)中不包含校验位。

注意:这里我们暂不关心校验以及波特率怎么算的,借用isp软件,进行波特率的生成,因为硬件在收发自己会自动补全数据包(数据流),所以只要关心有效数据位,重点学习对一帧有效数据的解码

定时器1作为串口1波特率发生器

借助isp生成定时器1作为串口1的波特率发生器

在这里插入图片描述

1. 波特率9600,
2. 串口1工作方式8位UART,波特率可变,
3. 定时器1(1T)工作在模式0(16位自动重载),
4. 开启串口1的中断,

void UartInit(void)		//115200bps@12.000MHz
{
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x40;		//定时器时钟1T模式
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设置定时器模式
	TL1 = 0xE6;		//设置定时初始值
	TH1 = 0xFF;		//设置定时初始值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//定时器1开始计时
	
	ES = 1;			//串口1中断
	EA  = 1; 		//允许所用中断
}

为啥生成代码是这样???为什么这么设置呢????

串口部分相关寄存器

在这里插入图片描述
在这里插入图片描述

TMOD

在这里插入图片描述

这里设置定时器1为 16位自动重载(方便后面哦)的定时器

AUXR

在这里插入图片描述
在这里插入图片描述

bit6(T1x12):设置串口1为 1T模式
bit0(S1ST2):这里选择定时器1作为串口1(UART1)的波特率发生器

PCON

在这里插入图片描述
因为PCON复位值就是不加倍,所以就没配置

SCON

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1. SCON可位寻址,也就是可以单独对位操作
2. 配合PCONbit6使用的,这里由于我们设置了PCONbit6为0,所以SM0和SM1用于选择串口1的工作模式,选择8位UART波特率可变(8位有效数据),然后提到了定时器1工作模式,我们之前设置定时器1为模式0(16位自动重载)这里就不要考虑PCON中bit7(SMOD)位,波特率加倍问题了
3. 开启内部串行接收器,这接收器,就会自动把数据搬到串行口数据缓冲寄存器SBUF里面

SBUF

在这里插入图片描述
这是两个寄存器,一个是放发送数据的,一个是放接收的数据的

另外串口1中断向量号为(查手册):
在这里插入图片描述

串口1工作模式1:8位UART,波特率可变总体工作原理

在这里插入图片描述

如何简单接收一个字符和发送数据

发送:

void SendByte(char bat)
{
	SBUF = bat;
	while(!TI);
	TI = 0;
}

void SendString(char *str)
{
	while(*str != '\0'){
		SendByte(*str);
		str++;
	}
}

用串口中断接收

void Uart1Handler()interrupt 4
{
	char tmp;
	
	if(RI){
		RI = 0;
		tmp = SBUF;
		SendByte(tmp);
		SendByte(' ');
		SendString("recive\r\n");
		
	}
	if(TI){
		TI = 0;
	}
}

一步之遥的设置

不选对,在考场里,你就等着哭吧

在这里插入图片描述

还有一个编码问题,有时候串口打印中文会乱码,推荐直接用GB232或者UTF-8

在这里插入图片描述
最后一个调试设置选择文本模式,波特率(匹配就行),和不选自动发送结束符

在这里插入图片描述

现象演示

(十六)串口Uart



----- 如有错误欢迎大家批评指正!!!

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

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

相关文章

程序员每天会阅读哪些技术网站来提升自己?

我有一个很特别的习惯……每周会固定一天去看一下接单网站上的高薪单子,不完全是为了接单,而是看现在稀缺的岗位是什么…… 其实很多程序员对外包接单都有误解,觉得外包接单平台上的项目都是一些边缘的、没人愿意干的项目,虽然这类…

好用的制造业项目管理工具推荐:提升生产效率与项目成功的关键利器

有什么好用的制造业项目管理工具?制造业作为传统行业,经常会采用项目制管理模式,项目管理对制造业的重要性不言而喻。2024年制造业企业面对国内依然激烈的竞争,想要进一步发展,不仅要对外谋取,也要对内优化…

【LLM多模态】Cogview3、DALL-E3、CogVLM、CogVideo模型

note 文章目录 noteVisualGLM-6B模型图生文:CogVLM-17B模型1. 模型架构2. 模型效果 文生图:CogView3模型DALL-E3模型CogVideo模型网易伏羲-丹青模型Reference VisualGLM-6B模型 VisualGLM 是一个依赖于具体语言模型的多模态模型,而CogVLM则是…

2024年【中级消防设施操作员(考前冲刺)】考试题及中级消防设施操作员(考前冲刺)考试报名

题库来源:安全生产模拟考试一点通公众号小程序 中级消防设施操作员(考前冲刺)考试题参考答案及中级消防设施操作员(考前冲刺)考试试题解析是安全生产模拟考试一点通题库老师及中级消防设施操作员(考前冲刺…

[PHP]严格类型

PHP: 类型声明 - Manual

如何有效获取 Go 变量类型?探索多种方法

嗨,大家好!本文是系列文章 Go 小技巧第九篇,系列文章查看:Go 语言小技巧。 文章目录 Go 的类型系统类型获取使用 fmt.Printf类型选择类型选择反射 reflect.TypeOf 其他注意点错误处理性能考量 总结 在 Python 中,可以使…

SpringBoot项目logback日志配置

Session 认证和 Token 认证 过滤器和拦截器 SpringBoot统一返回和统一异常处理 SpringBoot项目logback日志配置 程序运行出现错误时,第一时间想到的是甩锅还是日志?通过查看日志定位出问题的位置,才能更好的甩锅,今天就来学习…

Mastercam 2024 下载安装教程,流程简单,小白也能轻松搞定,附安装包和工具

前言 Mastercam是一款高效专业的实用型CAD/CAM设计辅助工具,集二维绘图、三维实体造型、曲面设计、体素拼合、数控编程、刀具路径模拟及真实感模拟等多种功能于一身,能够帮助用户轻松设计各种复杂的曲线、曲面零件、刀具路径等。 准备工作 1、Win10及…

Python爬虫:数据获取requests

1. 基本用法 1.1. 安装requests库 pip3 install requests 1.2. 发送HTTP请求 requests.request(method, url, **kwargs) 1.3. 发送GET请求 requests.get(url, paramsNone, **kwargs) 1.4. 发送POST请求 requests.post(url, dataNone, jsonNone, **kwargs) 1.5. 发送PU…

传感器类总结(一)MPU9250 3-2程序关于IIC的底层程序

关于IIC的逻辑和底层协议可以看之前总结的 #IIC 通信协议 1、读写数据 1.1、写数据 发送N个字节程序的流程: 1、发送起始信号 2、发送从机地址和写 3、等待从机发回应答信号 4、发送第一字节数据 等待应答 5、发送下一字节数据 等带应答或非应答信号 6、发送停止信号停止发送…

Kafka核心概念、数据存储设计及Partition数据文件 生产者负载均衡策略、批量发送技巧、消息压缩手段、消费者设计

关注公众号,发送 “面试题” 即可免费领取一份超全的面试题PDF文件!!!! 1、kafka的概念 Kafka 是一个开源的分布式流处理平台,最初由LinkedIn开发,后来成为Apache软件基金会的一个顶级项目。它…

【解决】Unity 工程无法正常打开而崩溃问题

开发平台:Unity 2022.3.17f1c1 一、问题描述 访问 Unity 工程等待 Open Projet(busy for 时间),出现崩溃、闪退等情况,导致无法正常进入Unity编辑页面。 二、问题分析 笔者在 URP 渲染管线下处理 Obi Fluid 流体插件 D…

detectron2的read_image方法

在看代码的时候,看到一行注释:use PIL, to be consistent with evaluation 说是用PIL方法加载,却又看见了BGR这种表述,后面的调用也都是cv2格式: 那我就要看下这里面是怎么实现的了,找到了read_image函数&…

知识点积累系列(一)golang语言篇【持续更新】

云原生学习路线导航页(持续更新中) 本文是 知识点积累 系列文章的第一篇,记录golang语言相关的知识点 1.结构体的mapstructure是什么 mapstructure:"default" mapstructure是一个Go语言的库,用于将一个map中的值映射到…

通过手写简易版RPC理解RPC原理

RPC是什么 所谓的RPC其实是为了不同主机的两个进程间通信而产生的,通常不同的主机之间的进程通信,程序编写需要考虑到网络通信的功能,这样程序的编写将会变得复杂。RPC就来解决这一问题的,一台主机上的进程对另外一台主机的进程发…

【2024程序员必看】鸿蒙应用开发行业分析

鸿蒙操作系统沉浸四年,这次终于迎来了破局的机会,自从2023年华为秋季发布会上宣布鸿蒙 Next操作系统不在兼容Android后,就有不少大厂开始陆续与华为达成了鸿蒙原生应用的开发合作,据1月18日华为官方宣布110多天的产业合力“突进”…

log4j2 无垃圾稳态日志 Garbage-free Steady State Logging

无垃圾稳态日志 垃圾收集暂停是导致延迟峰值的常见原因,对于许多系统来说,需要花费大量精力来控制这些暂停。 许多日志库,包括以前版本的Log4j,在稳态日志记录期间分配临时对象,如日志事件对象、字符串、char数组、字…

RocksDB是如何实现存算分离的

核心参考文献: Dong, S., P, S. S., Pan, S., Ananthabhotla, A., Ekambaram, D., Sharma, A., Dayal, S., Parikh, N. V., Jin, Y., Kim, A., Patil, S., Zhuang, J., Dunster, S., Mahajan, A., Chelluri, A., Datye, C., Santana, L. V., Garg, N., & Gawde,…

基于YOLOv7算法的高精度实时安全帽和背心目标检测系统(PyTorch+Pyside6+YOLOv7)

摘要:基于YOLOv7算法的高精度实时安全帽和背心目标检测系统可用于日常生活中检测与定位安全帽和安全背心,此系统可完成对输入图片、视频、文件夹以及摄像头方式的目标检测与识别,同时本系统还支持检测结果可视化与导出。本系统采用YOLOv7目标…

B样条基函数

​定义:令U{u0,u1,…,um}是一个单调不减的实数序列,即ui≤ui1,i0,1,…,m-1。其中,ui称为节点,U称为节点矢量,用Ni,p(u)表示第i个p次(p1阶)B样条基…