综述: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串口发送)的更多相关文章

  1. [ZigBee] 8、ZigBee之UART剖析·二(串口收发)

    前言:上一节讲UART基本知识介绍完了,并深入剖析了一个串口发送工程,本节将进一步介绍串口收发! 1.初始化 在串口初始化部分,和上一节不同的地方是: 51 U0CSR |= 0x40; //允许接收 ...

  2. ZigBee学习四 无线+UART通信

    ZigBee学习四 无线+UART通信 1) 协调器编程 修改coordinator.c文件 byte GenericApp_TransID; // This is the unique messag ...

  3. AVR单片机教程——串口发送

    本文隶属于AVR单片机教程系列.   到目前为止,我们的开发板只能处理很小量的数据:读取几个引脚电平,输出几个LED,顶多用数码管显示一个两位数字.至于输入一个指令.输出一条调试信息,甚至用scanf ...

  4. C#串口通信—向串口发送数据,同步接收返回数据

    最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接 ...

  5. 89c52串口发送接收小示例

    //串口发送 void sendChar(char *p)//调用前关中断,调用完成后关中断 { while(*p != '\0') { SBUF = *P while(!TI); TI = 0; p ...

  6. 纠错:基于FPGA串口发送彩色图片数据至VGA显示

    今天这篇文章是要修改之前的一个错误,前面我写过一篇基于FPGA的串口发送图片数据至VGA显示的文章,最后是显示成功了,但是显示的效果图,看起来确实灰度图,当时我默认我使用的MATLAB代码将图片数据转 ...

  7. 【Debug】串口发送数据时部分字节被拉长,出现帧错误,原因MCU进入低功耗模式导致串口时钟停了!

    串口发送数据时部分字节被拉长,出现帧错误,原因MCU进入低功耗模式导致串口时钟停了!

  8. 基于Verilog的带FIFO写入缓冲的串口发送接口封装

    一.模块框图及基本思路 tx_module:串口发送的核心模块,详细介绍请参照前面的“基于Verilog的串口发送实验” fifo2tx_module:当fifo不为空时,读取fifo中的数据并使能发 ...

  9. 基于Verilog的串口发送程序

    一.模块框图及基本思路 tx_bps_module:波特率时钟产生模块 tx_control_module:串口发送的核心控制模块 tx_module:前两个模块的组合 control_module: ...

  10. 串口发送端verilog代码分析

    串口发送端verilog代码分析 `timescale 1ns / 1ps ////////////////////////////////////////////////////////////// ...

随机推荐

  1. 接收新信息,在会话中看不到(thread表数据插入/更新失败)

    分析原因:收到短信,sms表插入信息,触发器会自动更新thread表,更新失败导致一直有一条未读信息数量显示,但在会话列表中却看不到. (偶现,低概率. 解决方法:接收新信息插入后,立即查询threa ...

  2. CSS自适应布局(包括两边宽度固定中间宽度自适应与中间宽度固定两边宽度自适应)

    1.两边宽度固定,中间宽度自适应 (1)非CSS3布局,浮动定位都可以(以下用浮动) css样式: #left { float: left;width: 200px; background: lime ...

  3. php生成网页桌面快捷方式

    本文将介绍使用PHP生成网页桌面快捷方式的代码,并添加图标及解决不同浏览器保存出现的乱码问题. 我们访问网站时,如果网站的内容很有吸引,一般我们都会使用浏览器的收藏夹功能,收藏此网站. 在浏览器收藏的 ...

  4. CSS实现完美垂直居中

    之前看到很多人一直都问这个问题,不过当时我没当一回事,因为在 CSS 中要垂直居中,多数是在有高度的情况下,或者容器高度不定的情况下才用,看上去比较舒服,而且实现的方法也不少,不一定要拘泥于和 tab ...

  5. css3之景深

    perspective属性:(目前仅仅支持-webkit-perspective属性,视点距离) 值:number perspective-origin属性:(视点位置) 值:number% numb ...

  6. Stack Overflow is a question and answer site

    http://stackoverflow.com/ _ Stack Overflow is a question and answer site for professional and enthus ...

  7. Unity加载模块深度解析(Shader)

    作者:张鑫链接:https://zhuanlan.zhihu.com/p/21949663来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 接上一篇 加载模块深度解析(二 ...

  8. Vim自动补全神器–YouCompleteMe

    YouCompleteMe的特别之处 基于语义补全 总所周知,Vim是一款文本编辑器.也就是说,其最基础的工作就是编辑文本,而不管该文本的内容是什么.在Vim被程序员所使用后,其慢慢的被肩负了与IDE ...

  9. MATLAB-octave中3维向量场图的可视化

    quiver3,空间向量场图 [x, y] = meshgrid(-2:0.2:2, -1:0.1:1); z = x.*exp(-x.^2-y.^2); [u, v, w] = surfnorm(x ...

  10. R语言中的logical(0)和numeric(0)以及赋值问题

    logical(0) 不等于 numeric(0).两者都不等于NULL值,即is.null(logical(0))和is.null(numeric(0))返还值都是FALSE.这很有意思,说明长度为 ...