一起学nRF51xx 6 - uart

1 篇文章 0 订阅

前言

通用异步接收器/发送器提供快速,全双工,内置流量控制的异步串行通信(CTS,RTS),在硬件方面支持高达1Mbps波特率。支持奇偶校验和第9位数据生成。

用于每个UART接口线的GPIO可从芯片上的GPIO中任选,而且可独立配置。这使得芯片引线十分灵活,有效利用印制电路板空和信号通路。

从上图可知,UART发送寄存器TXD有一个,当要发送数据的时候把数据放入TXD,然后启动发送TASK就可以发送了。接收寄存器RXD带FIFO,总共有6级,在数据被覆盖前可以接收6个字节。

 

UART的任务:

STARTRX:使能这个TASK以后,UART将会接收RXD引脚发送过来的数据,并且将数据移入接收FIFO中。

STOPRX:使能这个TASK以后,接收将会被停止。

STARTTX:使能这个TASK以后,TXD寄存器里面的数据将通过TXD引脚被发送出去。

STOPTX:使能这个TASK,UART将停止发送数据。

 

UART的事件:

RXDRDY:UART每接收完一个字节的数据,将会产生RXDRDY事件。

TXDRDY:当TXD寄存器中的数据被发送完,将会产生这个事件,这时候我们可以往TXD寄存器放新的数据。

EEROR:当UART检测到有错误发生会产生这个事件。

 

UART的引脚配置:

nRF51系列SOC设计得比较有特色,以下引脚可以为任意的一个GPIO。

PSELRXD:配置将用作为RX引脚的GPIO。

PSELCTS:配置将用作为CTS引脚的GPIO。

CTS只用在有硬件流控的场合,这个信号是来自于数据接收端,用来通知发送端可以发送数据了。当这个信号有效(一般为低电平),说明接收端已经准备就绪,比如说接收缓冲区已经清空,可以正常接收数据。这个时候我们可以启动发送。每发送完一个字节,再发送下一个字节之前我们都要检测CTS这个信号。当CTS信号无效,数据发送将会被暂停。

PSELRTS:配置将用作为RTS引脚的GPIO。

RTS只用在有硬件流控的场合,这个信号是发送自数据发送端,用来通知数据接收端,准备完毕,可以发送数据。

PSELTXD:配置将用作为引脚的GPIO。

 

本节将在NRF51822芯片是使用UART模块实现串口收发操作。

 

示例详解

基于硬件平台:nrf51822ek_tm开发板。

 

 

本示例所用的最小系统板原理图:

 

 

    1. 工程创建:
      1. 打开KEIL,新建一个空工程:Project->NewuVisionProject

工程名为nrfxx-uart确认后按下图选择芯片为nrf51822_xxAA->ok

在弹出的对话框中勾选CMSIS中的CORE;Device中的Startup(后面有nrf51Series字样的);在nrf_device中勾选nrf_gpio,nrf_gpiote,nrf_delay,nrf_ppi,nrf_error,nrf_uart并在nrf_Libraries中勾选app_error,nrf_assert模块。

 

OK之后工程自动生成如下代码:

新建一个空白文档,保存为main.c,并加入工程中:

配置工程,选择使用MicroLIB库,可以减小程序体积:

加入NRF51定义,并选择化等级3,可以减小程序体积,但仿真运行时可能会出现与代码顺序不一致现象:

 

调试工具选择J-LINK,并将接口设置为SW口勾选下载程序后自动复位及运行:

 

 

 

    1. 工程代码
      1. OK之后在man.c中加入如下代码:

上图中代码的基本功能是在主函数中实现LED灯500ms亮500ms灭循环控制,同时LED第翻转一次串口打印输出一次信息“hello zhangshisan this is nrf51822 uart Demo…”,同时如果串口接收到数据则直接通过串口回发回去,实现输入数据回显功能,串口引脚TX是P0_9,Rx是P0_11,波特率是115200,无校验,使能接收和发送,使能数据接收中断。关于串口的更多接口函数可以在nrf_uart.h中查看,或去网官https://infocenter.nordicsemi.com/index.jsp 查看相应的接口说明文档。

 

    1. 编译工程,下载程序,可以看到开发板的蓝灯实现了500ms亮500ms灭循环效果,同时将开发板上的串口端口与电脑连接,打开PC上串口调试助手(串口驱动已成功安装),打开对应的串口后可以看到串口成功输出以下数据。

在串口调试助手中的发送窗口输入一些内容,按发送后可以看到在接口窗口也可接口到串口回发的内容,说明串的接收功能正常,中断功能正常。

本示串口示例程序基于nrf官方库编写实现,如果需要寄存器实现版本的,在本示例源码中也有相应的参考实现给出。

OK,本期实验完成!下期见!同时如果大家有什么疑问或是有想了解的其它内容,也欢迎大家留言!!最后喜欢这个公众号的同学们记得加关注了,会有不定期技术干货推出!!

文中源码资料下载,在公众号里给十三发消息:

下载|一起学nRF51xx 6

 

关注十三公众号

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值