04_CC2530+Uart串口通信

04_CC2530+UART串口通信

串口通信基本概念

  • 串行通信: 数据字节一位位地依次传送的通信方式, 串行通信的速度慢, 但用的传输线条数少, 成本低适用于远距离的数据传送
  • 并行通信: 数据字节的各位同事传送的通信方式, 优点是数据传送速度快, 缺点是占用的传输线条数多, 适用于近距离通信, 远距离通信的成本较高
  • 异步通信: 一次通信传送一个字符帧, 发送的字符之间的时间间隔可以是任意的, 优点是通信设备简单、价格低廉, 但因为具有起始位和停止位, 传输效率较低

  • 同步通信: 进行通信前先建立同步, 发送频率和接受方的接受频率要同步。在发送信息时, 将多个字符加上同步字符组成一个信息帧, 有一个统一的时钟控制发送端的发送, 接收端识别到同步字符后, 就认为开始一个信息帧, 此后位数作为实际传输信息处理。优点: 传输速度较快, 可用于点对多点 缺点: 需要使用专用的时钟控制线实现同步, 对于长距离通信成本较高, 通信速率也会降低。一般用于同一PCB上芯片级之间的通信

USART和UART的区别

  • UART(universal asynchronous receiver and transmitter) 通用异步收/发器

  • USART(universal synchronous asynchronous receiver and transmitter) 通用同步/异步收/发器

  • USARTUART增强型

  • CC2530芯片有USART0USART1串行通信接口, 它们能够分别运行于异步UART模式或者同步SPI 模式,两个USART具有同样的功能

UART串口参数及时序(串行异步通讯)

  • 波特率: 串口通信的速率,通讯双方的波特率需要一致
  • 起始位: 标志一个数据帧的开始, 固定为低电平
  • 数据位: 数据帧的有效载荷, 1为高电平, 0为低电平, 低位先行
  • 校验位: 用于数据验证, 根据数据位计算得来
  • 停止位: 用于数据帧间隔, 固定为高电平

硬件电路与CH340 USB转串口芯片

  • 简单双向串口通信有两根通信线(发送端TX和接受端RX)
  • TX与RX需要交叉连接
  • 当只需单向的数据传输时, 可以只接一根通信线
  • 当电平标准不一致时, 需要加电平转换芯片
  • 由于单片机UART外设电脑USB接口采用的电平标准不同,通常需要通过CH340芯片进行电平转换,且电脑上需要安装相应的CH340驱动程序

在这里插入图片描述

  • Note: 若开发板上有电平转换芯片,一般只需用数据线直接将电脑开发板上USB接口连接。若开发板上没有电平转换芯片,则需找到对应串口的引脚, 通过外置的USB转TTL模块与电脑相连接

CC2530 UART通信

CC2530USART0USART1两个串行通信接口,它们能够分别运行于异步UART模式或者同步SPI 模式。两个USART具有同样的功能,可以设置在单独的 I/O 引脚。

UART模式

UART模式提供异步串行接口。在UART模式中,接口使用2线或者含有引脚RXDTXD可选RTSCTS的4线。UART模式具有以下特点:

  • 8位或者9位负载数据
  • 奇校验、偶校验或者无奇偶校验
  • 配置起始位和停止位电平(默认起始位低电平,停止位高电平)
  • 配置LSB或者MSB首先传送
  • 独立收发中断
  • 独立收发DMA触发
  • 奇偶校验和帧校验出错状态
UART发送
  • 当往UxBUF(USART 收/发数据缓冲器寄存器) 写入数据时,该字节发送到输出引脚 TXDx
  • 当字节传送开始时,UxCSR.ACTIVE位变为高电平,而当字节传送结束时为低。当传送结束时, UxCSR.TX_BYTE位设置为 1
UART接收
  • 当1写入 UxCSR.RE 位时,在UART上数据接收就开始了。(开启接收,需要配置完UART所有参数后)
  • UART会在输入引脚RXDx中寻找有效起始位,当检测出有效起始位时,收到的字节就传入到接收寄存器,并将UxCSR.RX_BYTE位设置为 1,接收完一个字节后会产生一个中断
  • 通过寄存器UxBUF提供收到的数据字节。当UxBUF读出时,UxCSR.RX_BYTE位由硬件清 0
USART中断

​ 每个USART都有两个中断:URXx(接收完成中断)UTXx(发送完成中断)USART0相关中断使能和中断标志如下:

  • USART0 RX:IEN0.URX0IE
  • USART0 TX:IEN2.UTX0IE
  • USART0 RX:TCON.URX0IF
  • USART0 TX:IRCON2.UTX0IF
波特率的产生

​ 由寄存器 **UxBAUD.BAUD_M[7:0]**和 UxGCR.BAUD_E[4:0]定义波特率。公式如下:
波特率 = ( 256 + B A U D _ M ) ∗ 2 B A U D _ E 2 28 ∗ F \begin{aligned} 波特率=\frac{(256+BAUD\_M)*2^{BAUD\_E}}{2^{28}}*F\\ \end{aligned} 波特率=228(256+BAUD_M)2BAUD_EF
​ 其中: F
系统时钟频率

UART通信相关寄存器
端口配置相关寄存器

​ 由于CC2530USART0有两个可选位置(如下图所示),因此需要配置相关寄存器,来选择USART0所用的引脚。

在这里插入图片描述

​ 需要配置的寄存器有:

  • PERCFG:外设I/O控制寄存器
  • P2DIR:端口2方向和端口0外设优先级控制
  • P0SEL:端口0功能选择
UART串口参数配置相关寄存器

​ 在使用UART通讯前,要将USART配置成UART模式,并设置通讯时的串口参数(见UART串口参数及时序小节)。需要配置的寄存器有:

  • U0CSRUSART0控制和状态寄存器
  • U0UCRUSART0 UART控制寄存器
  • U0BAUDUSART0波特率控制
  • U0GCRUSART0通用控制
USART中断配置相关寄存器

​ 一般只用到接收中断,用于接收信息。无特殊情况,不需要用到发送中断。与USART0接收中断相关寄存器有:

  • URX0IFUSART0接收中断标志

  • URX0IEUSART0接收中断使能

  • IEN0.EA: 全局中断使能

    配置完上述寄存器后,还需重写putchar函数,即可用printf函数将信息从串口中发送出去。在接收中断服务函数中,完成信息的接受,并做出相应的回答。

具体代码讲解

项目结构

Serial.c用于实现UART通信SystemTimer中的源文件,主要用于实现Delay_ms函数,下面将重点讲解serial.c中的代码。Delay_ms函数相关代码在基础篇03中有详细介绍,不在赘述。
在这里插入图片描述

Serial.c
#include <ioCC2530.h>
#include "serial.h"
#include <stdio.h>unsigned char RxBuf;   // 接收缓存
unsigned char RxData[RXLEN];  // 数据保存
unsigned char RxState = 0;  // 接收状态  0 等待包头'@'   1 接收数据
/**
* @brief 初始化串口 UART0
*/
void Serial_Init(void)
{// 端口配置PERCFG = 0x00;  // 选用UART0默认位置 P0_2 Rx  P0_3 TxP2DIR &= 0x3f;  // 选用UART0作为第一优先级指派给端口0P0SEL |= 0x0C;  // P0端口 2、3引脚设置为外设功能// UART 配置U0CSR |= 0x80;  // 选择UART模式U0UCR |= 0x02;  // 8bit 无校验 1bit停止位// 波特率设置 Baud = (256 + BAUD_M)*2^(BAUD_E) / 2^28 * F    F为系统时钟频率 32MHz// 若波特率要设置成9600 则BAUD_M = 44   BAUD_E = 8U0BAUD |= 0x2C;  // 44U0GCR |= 0x08;  // 8// 配置接收中断URX0IF = 0;   // 清除接收中断标志URX0IE = 1;   // 使能接受中断EA = 1;   // 开启全局中断U0CSR |= 0x40;  // 接收器使能 需要先配置完USART所有参数
}/**
* @brief 重写 putchar函数 UART0 printf函数底层调用的就是该函数 重写过后,调用printf会通过串口发送信息
*/
__ATTRIBUTES int putchar(int c)
{UTX0IF = 0;   // 清除发送标志位U0DBUF = (char)c;while(UTX0IF == 0);  // 等待发送成功  发送成功时 发送标志位复位return(c);
}/**
* @brief UART0 接收中断服务函数
*/
#pragma vector = URX0_VECTOR
__interrupt void USAT0_ISR(void)
{static unsigned int idx = 0;  // 接收数组下标 static关键字只初始化一次if(U0CSR&0x04 != 0)   // 接收到数据{RxBuf = U0DBUF;   // 从UART寄存器中读取数据if(RxState == 0)   // 等待包头{if(RxBuf == '@'){RxState = 1;  // 切换状态为接收信息idx = 0;  // 重置下标}}else if(RxState == 1) // 读取数据{if(idx < RXLEN && (RxBuf != '\n'))  // 接收数据{RxData[idx++] = RxBuf;  //从接收缓存区中读取信息,放到接收数组中}else    // 数据超过限制 或者 收到包尾{idx = 0;  // 重置下标RxState = 0;  // 切换状态为等待包头printf("Get Info:%s\n", RxData);  // 回复消息}  }}URX0IF = 0;  // 清除中断标志
}
  • UART0接收中断服务函数:实现接收包头为'@'的消息,并在接收到包尾\n时,发送接收数组RxData中的数据作为回复。
  • 具体实现看代码,非常详细
Serial.h
#ifndef __SERIAL_H
#define __SERIAL_H
#define RXLEN 256   // 接收数据最大长度
void Serial_Init(void);
#endif
main.c
#include <ioCC2530.h>
#include "delay.h"
#include <stdio.h>
#include "serial.h"void main(void)
{Delay_Init();  // 初始化延时函数, 基于定时器3实现Serial_Init(); // 初始化串口while(1){printf("%s\n", "hello zigbee!\n");  // 每过五秒向上位机发送消息Delay_ms(5000);}
}
  • NoteDelay_ms()相关代码见基础篇03

实验现象

发送消息

​ 大约每隔5s上位机收到从单片机串口发来的消息
在这里插入图片描述

接收消息

​ 根据回复内容,可以判断单片机正确接受到上位机的消息

在这里插入图片描述

参考资料

STM32入门笔记10_USART串口通信+案例:上位机控制LED亮灭(USART串口通信、TIM定时器、EXTI综合案例)-CSDN博客

CC2530中文数据手册完全版

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/464879.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM社区便民服务管理系统JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统&#xff1a;Window操作系统 2、开发工具&#xff1a;IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

CSS画icon图标系列(一)

目录 前言&#xff1a; 一、向右箭头 1.原理&#xff1a; 2.代码实现 3.结果展示&#xff1a; 二、钟表 1.原理&#xff1a; 2.代码展示&#xff1a; 3.最终效果&#xff1a; 三、小手机 1.原理&#xff1a; 2.代码展示&#xff1a; 3.最后效果&#xff1a; 四、结…

直播系统搭建教程安装说明

需要安装的软件(宝塔【软件商店】中查找安装): 1.PHP7.0 ~ PHP7.3 需要安装的扩展:(宝塔【PHP管理】【安装扩展】中安装) *PDO PHP Extension * MBstring PHP Extension * CURL PHP Extension * Mylsqi PHP Extension * Redis PHP Extension * fileinfo PHP Extension …

linux笔记(nginx)

一、Nginx 概念 Nginx 是一款轻量级的高性能 Web 服务器、反向代理服务器以及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器。它可以在大多数 Unix/Linux 操作系统上运行&#xff0c;也有 Windows 版本。主要用于处理高并发连接&#xff0c;能够快速、高效地为用户提供…

103 - Lecture 1

Introduction to Database 一、Introduction to Database Systems 1. 数据的定义 What is Data? EX: data could be a docx file storing your project status report; data could be a spreadsheet containing information • 数据只有在设计的场景中才有意义。&#xff…

微信公众号绑定设计-WeChat public platform bing and send message

一 WeChat bind ui 二、message style 三、 consume style 四、send log 五、temp setting

基于Python的乡村居民信息管理系统【附源码】

基于Python的乡村居民信息管理系统 效果如下&#xff1a; 系统主页面 系统登录页面 管理员主页面 居民管理页面 政务学习页面 土地信息管理页面 个人信息管理页面 居民登陆页面 村委人员主页面 研究背景 随着信息技术的飞速发展和乡村振兴战略的深入实施&#xff0c;传统的乡…

MySql中索引为什么用B+树,他有什么特点?时间复杂度是多少?能存多少数据?是不是只能三层?他与B-树有什么不同?还有其它的树你是是否知道?

平衡二叉树 平衡二叉树又被称为AVL树平衡二叉树是一颗空树或者它的左右两个子树的高度差的绝对值不超过1&#xff0c;并且左右子树也是平衡树非叶子节点值大于左子节点值而小于右子节点值非叶子节点最多拥有两个子节点 平衡二叉树的不足之处及时间复杂度 如果每次插入的数据都…

【初阶数据结构篇】链式结构二叉树(续)

文章目录 须知 &#x1f4ac; 欢迎讨论&#xff1a;如果你在学习过程中有任何问题或想法&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习。你的支持是我继续创作的动力&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;觉得这篇文章对你有帮助吗&#xff1…

VMWARE ESXI VMFS阵列故障 服务器数据恢复

1&#xff1a;河南用户一台DELL R740 3块2.4T硬盘组的RAID5&#xff0c;早期坏了一个盘没有及时更换&#xff0c;这次又坏了一个&#xff0c;导致整组RAID5处于数据丢失的状态&#xff0c; 2&#xff1a;该服务器装的是VMware ESXI 6.7&#xff0c;用户把3块硬盘寄过来进行数据…

使用docker安装zlmediakit服务(zlm)

zlmediakit安装 zlmediakit安装需要依赖环境和系统配置&#xff0c;所以采用docker的方式来安装不容易出错。 docker pull拉取镜像(最新) docker pull zlmediakit/zlmediakit:master然后先运行起来 sudo docker run -d -p 1935:1935 -p 80:80 -p 8554:554 -p 10000:10000 -p …

uni-app跨域set-cookie

set-cookie的值是作为一个权限控制的 首先&#xff0c;无论什么接口都会返回一个set-cookie&#xff0c;但未登录时&#xff0c;set-cookie是没有任何权限的 其次&#xff0c;登录接口请求时会修改set-cookie&#xff0c;并且在后续其他接口发起请求时&#xff0c;会在请求头…

【论文速读】| PathSeeker:使用基于强化学习的越狱攻击方法探索大语言模型的安全漏洞

基本信息 原文标题: PathSeeker: Exploring LLM Security Vulnerabilities with a Reinforcement Learning-Based Jailbreak Approach 原文作者: Zhihao Lin, Wei Ma, Mingyi Zhou, Yanjie Zhao, Haoyu Wang, Yang Liu, Jun Wang, Li Li 作者单位: Beihang University, Nany…

黑马官网2024最新前端就业课V8.5笔记---HTML篇

Html 定义 HTML 超文本标记语言——HyperText Markup Language。 标签语法 标签成对出现&#xff0c;中间包裹内容<>里面放英文字母&#xff08;标签名&#xff09;结束标签比开始标签多 /拓展 &#xff1a; 双标签&#xff1a;成对出现的标签 单标签&#xff1a;只有开…

NXP Zigbee JN5169 开发环境软件 文档和支持资源打包下载

NXP Zigbe JN5169软件、文档和支持资源下载 从NXP官网下载https://www.nxp.com.cn/pages/jn516x-7x-zigbee-3-0:ZIGBEE-3-0&#xff0c;有点蛋疼网站&#xff0c;要注册会员&#xff0c;所以我打包好所有NXP Zigbe JN5169所需的 软件、文档和支持资源打包好&#xff0c;以供开…

基于matlab的语音识别系统

一&#xff0e;设计任务及要求 1.1设计任务 作为智能计算机研究的主导方向和人机语音通信的关键技术&#xff0c;语音识别技 术一直受到各国科学界的广泛关注。以语音识别开发出的产品应用领域非常广泛&#xff0c;有声控电话交换、语音拨号系统、信息网络查询、家庭服务、宾馆…

使用WebStorm开发Vue3项目

记录一下使用WebStorm开发Vu3项目时的配置 现在WebStorm可以个人免费使用啦&#xff01;&#x1f929; 基本配置 打包工具&#xff1a;Vite 前端框架&#xff1a;ElementPlus 开发语言&#xff1a;Vue3、TypeScript、Sass 代码检查&#xff1a;ESLint、Prettier IDE&#xf…

Ansys HFSS:外壳的屏蔽效果演示

欢迎回来&#xff01;随着电子系统变得越来越复杂和集成&#xff0c;确保适当的屏蔽以减轻电磁干扰 &#xff08;EMI&#xff09; 变得越来越重要。 继续讨论屏蔽效果&#xff0c;我们现在将重点转移到另一个强大的工具上&#xff1a;Ansys HFSS&#xff08;高频结构仿真器&am…

Python基于TensorFlow实现双向循环神经网络GRU加注意力机制分类模型(BiGRU-Attention分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 随着深度学习技术的发展&#xff0c;循环神经网络&#xff08;RNN&#xff09;及其变种如门控循环…

【C++】C++的单例模式

二十四、C的单例模式 1、C的单例模式 本小标题不是讨论C的语言特性&#xff0c;而是一种设计模式&#xff0c;用于确保一个类在任何情况下都只有一个实例&#xff0c;并提供一个全局访问点来获取这个实例。即C的单例模式。这种模式常用于资源管理&#xff0c;如‌线程池、‌缓…