一起学nRF51xx 6 - uart

2023-10-29

前言

通用异步接收器/发送器提供快速,全双工,内置流量控制的异步串行通信(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

 

关注十三公众号

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一起学nRF51xx 6 - uart 的相关文章

  • 【IoT开发】UART通信高频测试

    测试所使用芯片 STM32F103RCT6 UART收发的极限频率 xff1a bytes s 1 发送频率 主程序循环发送一字节u8整型 xff0c 记录次数 while 1 t 43 43 if t 61 61 255 t 61 0 p
  • (十三)STM32——串口通信(UART)

    目录 学习目标 内容 通信方法 并行通信 串行通信 通信方向 通信方式 UART 特点 串口参数 通信流程 寄存器 USART SR USART DR USART BRR 过程 代码 运行结果 运行结果 遇到的问题 总结 学习目标 本节我们
  • 【STM32】UART串口通信详解

    目录 一 数据通信方式 1 串行与并行通信2 全双工 半双工及单工通讯3 同步通讯与异步通讯 二 串口通讯协议 STM32串口简介1 物理层1 RS232标准2 USB转串口 重点 3原生的串口到串口2 协议层1 xff09 通讯的起始和停
  • Uart串口收发回环验证

    Uart串口收发回环验证 接受模块发送模块波特率设置模块顶层模块TBModelsim仿真结果板级验证总结 本次所做的项目比较复杂 xff08 对我本人来讲 xff09 xff0c 设计一个Uart IP核 xff0c 在其基础 xff0c
  • 【verilog】UART串口发送(FPGA)

    简述核心代码仿真测试 简述 串口发送是以一定速率发送单bit数据 xff0c 通常一组数据为10bit 空闲状态为高电平 xff0c 起始位为0 xff0c 中间以低位在前的方式发送8bit数据 xff0c 终止位为1 采用计数器 cnt
  • UART详解

    UART 通用异步收发传输器 xff08 Universal Asynchronous Receiver Transmitter xff0c 通常称作UART 是一种异步全双工串行通信协议 xff0c 它将要传输的资料在串行通信与并行通信之
  • FPGA uart串口收发verilog源码程序,适用于RS232 RS422

    FPGA uart串口收发verilog源码程序 xff0c 适用于RS232 RS422 xff0c 支持修改波特率 xff0c 数据位 xff0c 校验位 ID 3750670799663712
  • UART,SPI,IIC,RS232通信时序和规则

    一 UART 1 串口通信方式 2 串口通信步骤 注意 xff1a 串口协议规定 xff0c 闲置时必须是高电平 校验位 xff1a 是使用奇偶校验 停止位必须高电平 一个0和多个0区分是靠掐时间 异步通信 xff1a 时钟各不一样 二 I
  • 4.RTT-UART-中断接收及轮询发送

    本期博客开始分享RTT的UART xff0c 利用战舰V3的uart2来输入输出一些字符串 UART xff08 Universal Asynchronous Receiver Transmitter xff09 通用异步收发传输器 xff
  • MCU-串口通信协议

    MCU 串口通信协议 一 介绍 串行通信就像单车道 所有数据得一个一个通行 并行就像多车道 一次可以通行多辆车 MCU常用到的串口通信模块主要有两种 UART和USART UART 全称是Universal Asynchronous Rec
  • RT-Thread记录(十一、I/O 设备模型之UART设备 — 源码解析)

    深入理解 RT Thread I O 设备模型 分析 UART设备源码 目录 前言 一 初识 UART 操作函数 应用程序 二 UART 的初始化 2 1 UART 设备初始化位置 2 2 UART 设备初始化函数分析 stm32 uart
  • 嵌入式Linux应用开发笔记:串口

    文章目录 目的 基础说明 开发准备 设备树 应用程序 应用程序与演示 代码 演示 总结 设备树文件 目的 串口 UART 是嵌入式设备中比较常用的功能 这篇文章将记录下应用程序中串口操作相关内容 这篇文章中内容均在下面的开发板上进行测试 新
  • 51单片机串口通信(UART)

    项目描述 1 串口工作方式为1 8位UART 波特率可变 无校验位 2 通信数据格式为 1位起始位 8位数据位 1位停止位 3 上电后MCU给上位机发送问候语 之后等待上位机的信息 MCU和上位机的通信为收发交替进行 MCU接收到的信息会实
  • GD32E23x的USART被断点打断后重新运行,会一直进入中断的问题

    GD32E23x的USART被断点打断后重新运行 会一直进入中断的问题 GD32E230K8单片机USART0连接一个从机芯片 该芯片每100ms发来一串16Bytes的数据 MCU中断接收 没有开启FIFO 只开启了RBNE 接收缓存非空
  • 一起学nRF51xx 16 -  adc

    前言 nRF51的ADC设计得比较简单 它有几个可配置的部分 1 PSEL pinselection nRF51系列芯片有8个模拟输入通道 并且这几个脚是固定的 不能像GPIO那样可以重新映射 PSEL用来选择需要采集模拟电压的通道 当该通
  • 一起学nRF51xx 13 - twi & iic

    前言 在IIC总线是PHILIPS公司推出的一种串行总线 IIC总线有2根信号线SCK 时钟线 和SDA 数据线 NRF51822中所谓的TWI总线跟IIC总线兼容 这里统称为IIC总线 IIC总线规定了不同类型的从机拥有不同的IICADR
  • 英特尔伽利略裸机 UART

    我想编写一些 hello world 程序裸机申请于英特尔伽利略木板 当然 使用 UEFI 打印文本 到 UART 1 效果很好 但我想 手动 访问 UART 而不需要 UEFI 的任何帮助 在 QEMU 中我的代码运行良好 h file
  • 使用 read(...) 时在换行符处停止

    我需要从通过 UART 连接的 GPS 读取 NMEA 语句 操作系统是Debian 语言必须是C 为此 我使用以下命令打开文件open 并读取一个字符串read 但是 这样我必须指定字符串长度 这会分解句子 相反 我想读到 NMEA 句子
  • GATT 配置文件和 UART 服务

    我是开发通过蓝牙连接到外围设备的移动应用程序的新手 我搜索到 GATT 是用于蓝牙LE 通信的相关配置文件 但我们的客户建议我们使用 UART 服务 现在我很困惑 1 这两件事是如何关联的 2 我们是否必须选择其中之一 如果是的话 每一个的
  • 如何在R中从串口读取数据

    我想绘制来自串行端口的实时数据 我认为 R 将是完成这项工作的好工具 我在尝试从串行端口 COM4 读取数据时遇到了困难 我已经验证数据是通过 terra term 传入的 并在尝试 R 之前关闭会话 但我似乎无法在 R 中获取任何内容 我

随机推荐

  • centos7中安装docker,并安装mysql5.7

    参考地址 https www runoob com docker centos docker install html centos7中安装docker Docker从1 13版本之后采用时间线的方式作为版本号 分为社区版CE和企业版EE
  • python做项目管理_python项目实现配置统一管理的方法

    一个比较大的项目总是会涉及到很多的参数 最好的方法就是在一个地方统一管理这些参数 最近看了不少的python项目 总结了两种很有意思的配置管理方法 第一种 基于easydict实现的配置管理 首先需要安装numpy easydict以及ya
  • HCIP第十天作业

    要求及拓扑图 第一步 配IP 给AS2上的路由各配两个环回 其中一个是建邻用的 其他按正常配 第二步 给AS2上的路由配一个OSPF协议 并且将用户环回改成广播通信 第三步 起BGP协议 R1 R8直连 64512跟64513是两个联邦 所
  • 2.比较运算符逻辑运算符

    比较运算符逻辑运算符 比较运算符 比较运算符 gt 大于 lt 小于 等于 gt 大于等于 lt 小于等于 不等于 注 Infinity Infinity NaN NaN 比较结果为true或者false 字符串比较时是比较ASCII码的值
  • SaaS部署和私有化部署的区别及各自的优点

    以前开发一个软件如果想要在企业内运行就必须要安装在本地的服务器上 这就导致企业除了需要支付软件开发的费用之外 还需要支付服务器的费用 但是随着软件开发技术的不断发展 现在很多软件都不需要安装服务器用户通过互联网就能够访问到软件获得服务 这就
  • S7-1500项目案例程序,带5个S7-1200轮询,5个ET200SP

    S7 1500项目案例程序 带5个S7 1200轮询 5个ET200SP 博图软件编程 PTO脉冲模式控制20个轴 100个气缸 与2台机器人联动 采用ModbusRTU 485通讯 PROFINET IO智能通讯 PTP RS232自由口
  • 怎么查服务器的配置信息,怎么查自己服务器的配置信息

    怎么查自己服务器的配置信息 内容精选 换一换 精简视图提供了云服务器资源概况和状态的可视化统计结果 帮助您直观的了解云服务器资源 在精简视图中 您可以快速获取弹性云服务器基本信息 登录信息 配置信息 监控信息 精简视图提供了云服务器资源概况
  • git clone 报错SSL connect error

    在一台centos上搭建frp的时候遇到了这个问题 做下记录 问题提示 fatal unable to access https github com fatedier frp git SSL connect error 原因 缺少相应的库
  • 关于PHPstorm打开laravel的代码提示的工具的方法

    关于PHPstorm打开laravel的代码提示的工具的方法 1 composer 安装 composer require barryvdh laravel ide helper 2 生成模型的工具 php artisan ide help
  • vlc集成c#_c#的一个视频播放库的封装-VLC.DotNet

    VLC的强大是众所周知的 如果你不知道 那你现在就知道了 FFMPEG和VLC的关系 VLC调用了FFMPEG的库 FFMPEG和libav的关系 libav是FFMPEG的开发人员中独立出来一部分后创建的一个新的工程 以上都是段子 没有深
  • QT 鼠标形状设置

    QT提供了十分便捷的设置鼠标形状的方法 在QT界面的根类QWidget中有QCursor cursor void setCursor QCursor void unsetCursor 三个方法 因而对于一切直接或间接继承自QWidget的控
  • Java缓存 @上源码

    用途 提高响应速度 减轻后台处理负担 分类 1 前端 客户端浏览器缓存 CDN加速 代理服务器缓存 nginx 2 后端 本地缓存 Guava Cache Ehcache 分布式缓存 Memcache Redis 数据库缓存 按照存放介质类
  • 奥的斯服务器故障显示m什么意思,奥迪斯电梯故障代码对照表 奥的斯电梯故障解决方法...

    刚从事电梯维保行业 我们除了培训中系统的学习外 实践中总结出来的窍门和技巧同样重要 当我们所见的故障案例和维修的电梯比较多的时候 经验及自然来了 这就是我们经常说熟能生巧 下面是diantijob小编整理的关于奥的斯电梯常见的故障代码和故障
  • h5移动端,通过监听路由回退事件关闭弹窗

    最近在做一个商城项目 项目设计是在移动端浏览器上使用 目前先不内嵌在app内部 在做商品详情页的时候 也调研了其他的app交互 其中有一个交互是在商品详情页 点击当前商品包含的服务详情按钮 会弹窗 点击返回按钮或者手机自带的返回 会关闭弹窗
  • 前后端分离--用户注册功能的实现

    爱旅行 用户注册 Object Obj application getAttribute active itripUser getUserCode 不能 toString 可能obj的值为空 就会出现异常 String activeCode
  • matlab最小分类错误全局二值化算法

    转自 http download csdn net detail hupeng810 1511870 function imagBW kittlerMet imag KITTLERMET binarizes a gray scale ima
  • git clone 遇到问题:fatal: unable to access ‘https://github.comxxxxxxxxxxx‘: Failed to connect to xxxxxxx

    git clone 遇到问题 fatal unable to access https github comxxxxxxxxxxx Failed to connect to xxxxxxxxxxxxx
  • ContOS7镜像下载与安装

    contos7的安装 文章目录 contos7的安装 一 镜像下载 二 安装 一 镜像下载 官网下载链接 http isoredirect centos org centos 7 isos x86 64 阿里云镜像站点 http mirro
  • Vite跨域设置

    Vite跨域设置 步骤一 vite config ts配置 proxy 跨域代理 apis target http env VUE APP BASE API target http url port changeOrigin true re
  • 一起学nRF51xx 6 - uart

    前言 通用异步接收器 发送器提供快速 全双工 内置流量控制的异步串行通信 CTS RTS 在硬件方面支持高达1Mbps波特率 支持奇偶校验和第9位数据生成 用于每个UART接口线的GPIO可从芯片上的GPIO中任选 而且可独立配置 这使得芯