[ZigBee] 7、ZigBee之UART剖析(ONLY串口发送)
综述:USART0和USART1是串行通信接口,它们能够分别运行于异步UART模式或者同步SPI 模式。两个USART具有同样的功能,可以设置在单独的I/O 引脚。
1、UART 模式
UART 模式提供异步串行接口。在UART 模式中,接口使用2 线或者含有引脚RXD、TXD、可选RTS 和CTS 的4 线。
UART 模式的操作具有下列特点:
● 8 位或者9 位负载数据
● 奇校验、偶校验或者无奇偶校验
● 配置起始位和停止位电平
● 配置LSB 或者MSB 首先传送
● 独立收发中断
● 独立收发DMA 触发
● 奇偶校验和帧校验出错状态
UART 模式提供全双工传送,接收器中的位同步不影响发送功能。传送一个UART 字节包含1 个起始位、8个数据位、1 个作为可选项的第9 位数据或者奇偶校验位再加上1 个或2 个停止位。注意,虽然真实的数据包含8 位或者9 位,但是,数据传送只涉及一个字节。
UART操作由USART控制寄存器UxUCR和状态寄存器UxCSR来控制。这里的x 是USART的编号,其数值为0 或者1。
当UxCSR.MODE 设置为1 时,就选择了UART 模式。
1.1、UART 发送
当USART 收/发数据缓冲器、寄存器UxBUF 写入数据时,该字节发送到输出引脚TXDx。UxBUF 寄存器是双缓冲的。
当字节传送开始时, UxCSR.ACTIVE 位变为高电平,而当字节传送结束时为低。当传送结束时,UxCSR.TX_BYTE 位设置为1。当USART 收/发数据缓冲寄存器就绪,准备接收新的发送数据时,就产生了一个中断请求。该中断在传送开始之后立刻发生,因此,当字节正在发送时,新的字节能够装入数据缓冲器。
1.2、UART 接收
当1 写入UxCSR.RE 位时,在UART 上数据接收就开始了。然后UART 会在输入引脚RXDx 中寻找有效起始位,并且设置UxCSR.ACTIVE 位为1。当检测出有效起始位时,收到的字节就传入到接收寄存器,UxCSR.RX_BYTE 位设置为1。该操作完成时,产生接收中断。同时UxCSR.ACTIVE 变为低电平。
通过寄存器UxBUF 提供收到的数据字节。当UxBUF 读出时,UxCSR.RX_BYTE 位由硬件清0。
注意:当应用程序读UxDBUF,很重要的一点是不清除UxCSR.RX_BYTE。
1.3、UART 硬件流控制
当UxUCR.FLOW 位设置为1,硬件流控制使能。然后,当接收寄存器为空而且接收使能时,RTS 输出变低。在CTS 输入变低之前,不会发生字节传送。
1.4、UART 特征格式
如果寄存器UxUCR 中的BIT9 和奇偶校验位设置为1,那么奇偶校验产生而且检测使能。奇偶校验计算出来,作为第9 位来传送。在接收期间,奇偶校验位计算出来而且与收到的第9 位进行比较。如果奇偶校验出错,则UxCSR.ERR 位设置为高电平。当读取UxCSR 时,UxC-SR.ERR 位清除。
要传送的停止位的数量设置为1 或者2,这取决于寄存器位UxUCR. SPB。接收器总是要核对一个停止位。如果在接收期间收到的第一个停止位不是期望的停止位电平,就通过设置寄存器位UxCSR.FE 为高电平,发出帧出错信号。当读取UxCSR 时,UxCSR.FE 位清除,当UxCSR.SPB 设置为1 时,接收器将核对两个停止位。
注意:当检测到第一个停止位正确时,将设置RX 中断。如果第二个停止位不正确,设置帧误码时将有一个延迟。这个延迟与波特率有关(位持续时间)。
2、SPI 模式
本节描述了同步通信的SPI 模式。在SPI 模式中,USART 通过3 线接口或者4 线接口与外部系统通信。接口包含引脚MOSI、MISO、SCK 和SS_N。参见GPIO节中有关如何将USART 引脚指派到I/O 引脚的描述。
SPI 模式包含下列特征:
[ZigBee] 7、ZigBee之UART剖析(ONLY串口发送)的更多相关文章
- [ZigBee] 8、ZigBee之UART剖析·二(串口收发)
前言:上一节讲UART基本知识介绍完了,并深入剖析了一个串口发送工程,本节将进一步介绍串口收发! 1.初始化 在串口初始化部分,和上一节不同的地方是: 51 U0CSR |= 0x40; //允许接收 ...
- ZigBee学习四 无线+UART通信
ZigBee学习四 无线+UART通信 1) 协调器编程 修改coordinator.c文件 byte GenericApp_TransID; // This is the unique messag ...
- AVR单片机教程——串口发送
本文隶属于AVR单片机教程系列. 到目前为止,我们的开发板只能处理很小量的数据:读取几个引脚电平,输出几个LED,顶多用数码管显示一个两位数字.至于输入一个指令.输出一条调试信息,甚至用scanf ...
- C#串口通信—向串口发送数据,同步接收返回数据
最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接 ...
- 89c52串口发送接收小示例
//串口发送 void sendChar(char *p)//调用前关中断,调用完成后关中断 { while(*p != '\0') { SBUF = *P while(!TI); TI = 0; p ...
- 纠错:基于FPGA串口发送彩色图片数据至VGA显示
今天这篇文章是要修改之前的一个错误,前面我写过一篇基于FPGA的串口发送图片数据至VGA显示的文章,最后是显示成功了,但是显示的效果图,看起来确实灰度图,当时我默认我使用的MATLAB代码将图片数据转 ...
- 【Debug】串口发送数据时部分字节被拉长,出现帧错误,原因MCU进入低功耗模式导致串口时钟停了!
串口发送数据时部分字节被拉长,出现帧错误,原因MCU进入低功耗模式导致串口时钟停了!
- 基于Verilog的带FIFO写入缓冲的串口发送接口封装
一.模块框图及基本思路 tx_module:串口发送的核心模块,详细介绍请参照前面的“基于Verilog的串口发送实验” fifo2tx_module:当fifo不为空时,读取fifo中的数据并使能发 ...
- 基于Verilog的串口发送程序
一.模块框图及基本思路 tx_bps_module:波特率时钟产生模块 tx_control_module:串口发送的核心控制模块 tx_module:前两个模块的组合 control_module: ...
- 串口发送端verilog代码分析
串口发送端verilog代码分析 `timescale 1ns / 1ps ////////////////////////////////////////////////////////////// ...
随机推荐
- PHP获取当前服务器信息的基本语句
下面是PHP获取当前服务器信息的基本语句. PHP程式版本: <?PHP echo PHP_VERSION; ?> ZEND版本: <?PHP echo zend_version() ...
- 数据库.bak文件还原报错的处理办法
今天从网上下了个Demo,里面有个.bak文件,就试着还原了一下,结果发现报了错.是了两种方式导入,都不行. 最终找到了解决办法: 可以直接用sql语句对.bak文件进行还原. RESTORE DAT ...
- C#开发Android环境搭建
目前破解比较稳定的版本(我亲自尝试过的)是4.2. wuleba上的4.6,4.8,4.10 破解均会出现各种问题. 1 当前电脑账户最好是使用英文账号,而不要使用汉字,否则路径会出现乱码问题. 2 ...
- iOS 单例模式
主要用于做应用程序的资源共享控制.用途很多⋯⋯ 实质为,单例是在程序声明周期里 有且仅有 被实例化过一次的类.为确保实例化的唯一,利用类的 类(static)方法来生成和访问对象. 至此,你便可以在程 ...
- 【12-JDBC编程】
JDBC编程 JDBC概述 •通过使用JDBC API,Java程序可以非常方便地操作各种主流数据库,这是使Java语言的巨大 魅力所在.而且由于Java语言的跨平台特性,所以使用JDBC API所编 ...
- MATLAB 画出三个通信小区cell边界示意图
d=1000; %两个小区中心间距离的一半 rcell=2*d/sqrt(3); %小区半径 ncell=3; %小区个数 cellposition=zeros(ncell,2); %初始化小区中心位 ...
- 关于netty
现在我们一般使用应用程序或者链接库相互进行通信.例如,我们经常通过一个使用http协议的客户端链接库,从网站服务器中获得信息,并且通过网站服务,调用一些远程程序. 然而,一些通用协议或者它们的实现方式 ...
- 微信小程序免费SSL证书https、TLS版本问题的解决方案
微信小程序与第三方服务器通讯的域名5个必要条件1.一个已备案的域名,不是localhost.也不是127.0.0.1,域名不能加端口2.加ssl证书,也就是https://~~~4.HTTPS 服务器 ...
- AutoVue ISDK学习总结(一)
这段时间,断断续续花了2,3周时间,研究AutoVue ISDK.貌似这个东西用的人很少,网上只搜到了一篇中文文档.自己英文水平差,Java水平也差,看Oracle官网文档,进展非常慢.到现在,终于对 ...
- NGUI 3.0.7的新锚点系统设置不好就会造成显示错误的错觉
每次设置NGUI控件的锚点时,都需要刷新一下窗口,不然就会造成显示错误的错觉. 同时,NGUI控件设置锚点的参考对象为一个物体时还需要调整其控件大小,不然也会造成显示错误的错觉.