通用全双工异步串口实验demo
UART模块学习记录
- 代码概述
- 代码注释
代码概述
- 功能简述: 将串口2接收到的数据,以0x0D,0x0A结尾,返回给PC
- 硬件说明: UART2引脚为P43、P44,接到TTL-USB芯片,插入USB线与PC通信
代码注释
通用全双工/半双工收发器(USARTx)模块包括波特率发生器(BRG)、数据发送和数据接收这三部分,每个部分都有相应的寄存器设置,主要包括波特率控制寄存器 BRCTLx,发送状态和控制寄存器 TSCTLx 和接收状态和控制寄存器 RSCTLx。
在波特率发生器这部分,通过设置 SYNCx、 HBRGx 和 BxRG16 位来进行选择设置{EUBRGHx: EUBRGLx}寄存器的值来配置波特率。
在数据发送部分,包括全双工异步发送和半双工同步发送,通过发送状态和控制寄存器TSCTLx 来控制实现相应的功能。
在数据接收部分,包括全双工异步接收和半双工同步接收,通过接收状态和控制寄存器RSCTLx 来控制实现相应的功能。
串口初始化函数:
void UART2_Init(void)
{APFCTL12=0x03; //特殊引脚功能复用//TX2、RX2引脚ANS43=0;ANS44=0;/***Usart相关寄存器初始化****///USARTx波特率控制寄存器BRCTLx P274//自动波特率定时器没有溢出 接收空闲 传送非反相数据 使用8位计数器 不考虑唤醒使能BRCTL2=0x40|USART_SourceClk_HFCLK; //{EUBRGHx: EUBRGLx}寄存器的值来配置波特率// 波特率公式=SCLK/(m*y+1),其中SCLK系统时钟,如这里8M,m为倍频数,见手册,y为8位或16位波特率计数值// SYNC=0(全双工异步模式),BRG16=0(使用8位波特率发生器),HBRG=0(低速),Baud=8000000/(64*(12+1))=9615EUBRGH2=0x00; EUBRGL2=0x19; //发送状态和控制寄存器 TSCTLxTSCTL2=0x22; // 8位 发送,使能发送,全双工异步模式SYNC=0,低速模式HBRG=0,发送移位空,不发送同步间隔符//接收状态和控制寄存器 RSCTLxRSCTL2=0x90; // 串口使能(配置引脚为串行口引脚),8位接收,接收使能,无帧错误,溢出错误,不考虑地址识别和第9位TX2IF=0;TX2IE=0;RC2IF=0;RC2IE=1;//接收中断
}
中断函数:
void int_fun0() __interrupt (0)
{volatile uint8 revBuf; // 避免优化下未读取RXSDR2if(RC2IE && RC2IF){if(FRER2){ //FRERx: 帧错误位 1 = 帧错误(可通过读 RXSDRx寄存器刷新该位,并接收下一个有效字节) 0 = 无帧错误revBuf= RXSDR2; //要清除 RCxIF中断,需要读取RXSDRx中的值;通过读 RXSDRx寄存器刷新FRERx位,并接收下一个有效字节}else if(OVFER2){ //溢出错误位 1 = 溢出错误(可通过清 0 CRXENx 位来清 0 该位) 0 = 无溢出错误CRXEN2=0; //CRXENx: 连续接收使能位 1 = 使能接收器 0 = 禁止接收器revBuf= RXSDR2; //读清零RC2IFCRXEN2=1; //接收使能}else{UART2_BUF[Rev_count]=RXSDR2;if(UART2_BUF[Rev_count] == 0x0D){Rev_StopFlag=1;}else{if(Rev_StopFlag){if(UART2_BUF[Rev_count] == 0x0A)Rev_Flag=1;else Rev_StopFlag=0;}else{Rev_StopFlag=0;}}Rev_count++;}}
}
main函数:
UART2_Init();//串口初始化//总中断开启
AIE=1;
PUIE=1;while(1)
{if(Rev_Flag == 1){Rev_Flag=0;for(i=0;i<Rev_count;i++){UART2_SendBuf(UART2_BUF[i]);}Rev_count=0;}
}
通用全双工异步串口实验demo相关推荐
- 13.基础实验(2)异步串口收发的实现
异步串口收发的实现 一.实验内容 实现串口接收来自串口调试助手发送的数据,然后直接通过自己实现的串口程序将数据发送出去 二.系统框图 三.设计分析 从串口接收开始,这个比较容易实现.参考链接串口通信协 ...
- STM32之USART-串口通信(含串口实验详细解析)
STM32之串口通信 - USART(含串口实验详细解析) 开发环境:Window 10 开发工具:Keil uVision5 MDK 硬件:STM32F103 资料参考: [正点原子]STM32F1 ...
- UART 和 USART 的区别 == 通用异步收发传输器 通用同步/异步串行接收/发送器
UART 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器,是电脑硬件的一部分.它将要传输的资料在串 ...
- STM32F103系列实战之通用同步异步收发器(USART)
通用同步/异步收发器(USART) STM32F103xC. STM32F103xD和STM32F103xE增强型系列产品中,内置了3个通用同步/异步收发器(USART1. USART2和USART3 ...
- 8051异步串口的收发原理
8051异步串口的收发原理 <8051异步串口的收发原理> 来自:刘建文 | 学术半·IT歌·文 作者:刘建文 关键字:8051 数字电子 数据通信 永久链接地址:http://artte ...
- 17、STM8S通用同步异步收发器(UART)
文章目录 1.概述 2.串口主要特点 3.UART功能描述 4.UART主要特点 5.异步串行通信的字符格式 6.串行通信的传送速率 1.概述 STM8S 微控制器家族的通用同步异步收发器(UAR ...
- STM32F207串口实验记录和接口
处理器与外部设备通信的两种方式: 并行通信 传输原理:数据的各个位同时传输 优点:速度快 缺点:占用引脚资源多 串行通信 传输原理:数据按位顺序传输 优点:占用引脚资源少 缺点:速度相对较慢 串行通信 ...
- imx6 配置串口波特率_stm32异步串口(uart)通讯基本操作
| 串口是一种全双工通讯方式 单工 数据传输只支持数据在一个方向上传输 半双工 允许数据在两个方向上传输,在同一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信 全双工 允许数据同时 ...
- 实现USB转两个异步串口,USB总线的转接芯片
简述 CH9103是一个USB总线的转接芯片,实现USB转两个异步串口. 每个串口都支持高速全双工,支持奇偶校验,提供部分MODEM联络信号,用于为计算机扩展异步串口,或者将普通的串口设备或者MCU直 ...
最新文章
- web与APP之间的交互---WebViewJavascriptBridge
- 计算机文档里的东西可以删吗,电脑c盘哪些文件可以删除
- OenLDAP 配置记录
- 博客No.1活动暂停公告
- 【QGIS入门实战精品教程】3.1:QGIS如何连接SQL Server数据库?
- vue3 composition-api useRoute useRouter 别混淆
- STC89C52点亮LED
- 萌新的Python练习菜鸟100例(十)暂停一秒输出,并格式化输出当前时间
- phpPgAdmin-5.1安装配置
- python中重要的基础概念
- 自动生成光纤测试资料的软件,光缆测试模板生成工具官方版
- 虚拟地址与物理地址的转换
- WDK安装调试以及注意事项
- openmv和stm32串口通信完成二维码识别
- 织梦php调用模型,织梦dede新建模型中自定义联动类别调用
- 为什么需要工作流调度系统?
- 模拟器链接appium
- python代码运行速度有点慢 ? 教你使用多线程速度飞升
- 官网电子安全证书端口即将到期!新型诈骗短信!
- 2020年薪酬排行榜为何程序员遥遥领先?
热门文章
- JavaScript 格式化数字(格式化为N位补0)
- 怎么将图片旋转45度?
- 高情商的女人都是怎么吃定男人的
- html css js 完整案例,html+css+js实例
- Tampermonkey(油泼狓)插件的安装及使用
- matlab 虚部怎么表示,matlab – 如何绘制与其虚部相关的复杂系统
- Android7.1升级傻瓜教程(以Nexus5为例)
- 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java租房管理信息系统k578i
- spark大数据计算引擎原理深剖(优缺点)-spark简介
- 第7章 生产产出的决策分析