0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CC2530(zigbee)入门开发: 串口收发配置

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2022-05-28 13:32 次阅读

一、串口协议介绍

串口传输协议是嵌入式开发里比较常见的传输协议,开发阶段用的最多的方式就是将MCU的调试信息打印到PC机串口终端显示,方便调试错误。

一般传输协议分为两种: 并口和串口。

并口传输协议:指数据的各位同时发送或接收,每个数据位使用单独的一条导线。传输速度快、效率高,但需要的数据线较多,成本高。

串口传输协议:指数据一位接一位地顺 序发送或接收。需要的数据线少,成本低,但传输速度慢,效率低。

CC2530一共有两个串口通信接口,分别是USART0和USART1,它们能够配置成异步UART模式或者同步SPI模式。

两个USART接口具有相同的功能,通过PERCFG寄存器可以设置两个USART接口对应外部I/O引脚的映射关系:

	位置1:RX0 --- P0_2   TX0 --- P0_3               RX1 --- P0_5   TX1 --- P0_4
	位置2:RX0 --- P1_4   TX0 --- P1_5               RX1 --- P1_7   TX1 --- P1_6
复制代码

对每个USART串口通信编程,本质是设置相关的5个寄存器:

<1> UxCSR:   USARTx的控制和状态寄存器。
<2> UxUCR:  USARTx的UART控制寄存器。
<3> UxGCR:  USARTx的通用控制寄存器。
<4> UxDBUF:USARTx的接收/发送数据缓冲寄存器。
<4> UxBAUD:USARTx的波特率控制寄存器。
复制代码

在与PC机进行串口通信的时候是,通常需要借助USB转TTL芯片进行电压转换。 所以,在学习串口编程之前,先认识两种电平:TTL电平和RS232电平

TTL电平:    逻辑0----小于0.8V     逻辑1----大于2.4V。
RS232电平:  逻辑0----5~15V        逻辑1---- -5~-15V。
复制代码

串口通信过程中,速度的指标由波特率表示。

常见的波特率设置表如下:

image.png

计算波特率的方法: CC2530的波特率由BAUD_E和BAUD_M共同决定:

image.png

二、原理图数据手册分析

image.pngimage.pngimage.pngimage.pngimage.png

三、串口配置代码示例

3.1编写串口初始化函数,实现串口字符串发送 (CPU频率在16MHZ下,波特率的为9600)


#include 
#include 

//定义LED灯的端口
#define LED1 P1_2
#define LED2 P1_3

//定义KEY按键的端口
#define KEY1 P1_0       //定义按键为P1_0口控制
#define KEY2 P1_1       //定义按键为P1_1口控制

/*
函数功能:LED灯IO口初始化
硬件连接:LED1-->P1_2 , LED2-->P1_3
*/
void LED_Init(void)
{
    P1DIR |=0x3<<2;  //配置P1_2、P1_3为输出模式
    LED1 = 1;
    LED2 = 1;
}

/*
函数功能:按键IO口初始化
硬件连接:KEY1-->P1_0  KEY2-->P1_1  
*/
void KEY_Init(void)
{
    P1SEL&=~(0x3<<0); //配置P1_0,P1_1处于通用GPIO口模式
    P1DIR&=~(0x3<<0); //配置P1_0,P1_1为输入模式
    P1INP|= 0x3<<0;   //上拉   
}


void delay10ms(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=193;c>0;c--)
        for(b=118;b>0;b--)
            for(a=2;a>0;a--);
}


/*
函数功能:按键扫描
返 回 值:按下的按键值
*/
unsigned char Key_Scan(void)
{
    static unsigned char stat=1;
    if((KEY1==0||KEY2==0)&&stat)
    {
       stat=0;
       delay10ms();
       if(KEY1==0)return 1;
       if(KEY2==0)return 2;
    }
    else
    {
        if(KEY1&&KEY2)stat=1;
    }
    return 0;
}

/*
函数功能:串口0初始化
*/
void Init_Uart0(void)
{
  PERCFG&=~(1<<0);  //串口0的引脚映射到位置1,即P0_2和P0_3
  P0SEL|=0x3<<2;   //将P0_2和P0_3端口设置成外设功能
  U0BAUD = 59;     //16MHz的系统时钟产生9600BPS的波特率
  U0GCR&=~(0x1F<<0);//清空波特率指数
  U0GCR|=9<<0;      //配置波特率的指数值
  U0UCR |= 0x80;    //禁止流控,8位数据,清除缓冲器
  U0CSR |= 0x3<<6;  //选择UART模式,使能接收器
}

/*
函数功能:UART0发送字符串函数
*/
void UR0SendString(char *str,unsigned int len)
{
  int j;
  for(j=0;j;j++)>

3.2 编写串口初始化函数,实现串口字符串发送 (CPU频率在16MHZ下,波特率为115200)


#include 
#include 

//定义LED灯的端口
#define LED1 P1_2
#define LED2 P1_3

//定义KEY按键的端口
#define KEY1 P1_0       //定义按键为P1_0口控制
#define KEY2 P1_1       //定义按键为P1_1口控制

/*
函数功能:LED灯IO口初始化
硬件连接:LED1-->P1_2 , LED2-->P1_3
*/
void LED_Init(void)
{
    P1DIR |=0x3<<2;  //配置P1_2、P1_3为输出模式
    LED1 = 1;
    LED2 = 1;
}

/*
函数功能:按键IO口初始化
硬件连接:KEY1-->P1_0  KEY2-->P1_1  
*/
void KEY_Init(void)
{
    P1SEL&=~(0x3<<0); //配置P1_0,P1_1处于通用GPIO口模式
    P1DIR&=~(0x3<<0); //配置P1_0,P1_1为输入模式
    P1INP|= 0x3<<0;   //上拉   
}


void delay10ms(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=193;c>0;c--)
        for(b=118;b>0;b--)
            for(a=2;a>0;a--);
}


/*
函数功能:按键扫描
返 回 值:按下的按键值
*/
unsigned char Key_Scan(void)
{
    static unsigned char stat=1;
    if((KEY1==0||KEY2==0)&&stat)
    {
       stat=0;
       delay10ms();
       if(KEY1==0)return 1;
       if(KEY2==0)return 2;
    }
    else
    {
        if(KEY1&&KEY2)stat=1;
    }
    return 0;
}

/*
函数功能:串口0初始化
*/
void Init_Uart0(void)
{
  PERCFG&=~(1<<0);  //串口0的引脚映射到位置1,即P0_2和P0_3
  P0SEL|=0x3<<2;   //将P0_2和P0_3端口设置成外设功能
  U0BAUD = 216;     //16MHz的系统时钟产生115200BPS的波特率
  U0GCR&=~(0x1F<<0);//清空波特率指数
  U0GCR|=12<<0;      //16MHz的系统时钟产生115200BPS的波特率
  U0UCR |= 0x80;    //禁止流控,8位数据,清除缓冲器
  U0CSR |= 0x3<<6;  //选择UART模式,使能接收器
}

/*
函数功能:UART0发送字符串函数
*/
void UR0SendString(char *str,unsigned int len)
{
  int j;
  for(j=0;j;j++)>

3.3 配置串口中断接收数据

#include 
#include 

//定义LED灯的端口
#define LED1 P1_2
#define LED2 P1_3

//定义KEY按键的端口
#define KEY1 P1_0       //定义按键为P1_0口控制
#define KEY2 P1_1       //定义按键为P1_1口控制

unsigned char dataRecv;
unsigned char Flag = 0;

/*
函数功能:LED灯IO口初始化
硬件连接:LED1-->P1_2 , LED2-->P1_3
*/
void LED_Init(void)
{
    P1DIR |=0x3<<2;  //配置P1_2、P1_3为输出模式
    LED1 = 1;
    LED2 = 1;
}

/*
函数功能:按键IO口初始化
硬件连接:KEY1-->P1_0  KEY2-->P1_1  
*/
void KEY_Init(void)
{
    P1SEL&=~(0x3<<0); //配置P1_0,P1_1处于通用GPIO口模式
    P1DIR&=~(0x3<<0); //配置P1_0,P1_1为输入模式
    P1INP|= 0x3<<0;   //上拉   
}


void delay10ms(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=193;c>0;c--)
        for(b=118;b>0;b--)
            for(a=2;a>0;a--);
}


/*
函数功能:按键扫描
返 回 值:按下的按键值
*/
unsigned char Key_Scan(void)
{
    static unsigned char stat=1;
    if((KEY1==0||KEY2==0)&&stat)
    {
       stat=0;
       delay10ms();
       if(KEY1==0)return 1;
       if(KEY2==0)return 2;
    }
    else
    {
        if(KEY1&&KEY2)stat=1;
    }
    return 0;
}

/*
函数功能:串口0初始化
*/
void Init_Uart0(void)
{
  PERCFG&=~(1<<0);  //串口0的引脚映射到位置1,即P0_2和P0_3
  P0SEL|=0x3<<2;   //将P0_2和P0_3端口设置成外设功能
  U0BAUD = 216;     //16MHz的系统时钟产生115200BPS的波特率
  U0GCR&=~(0x1F<<0);//清空波特率指数
  U0GCR|=12<<0;      //16MHz的系统时钟产生115200BPS的波特率
  U0UCR |= 0x80;    //禁止流控,8位数据,清除缓冲器
  U0CSR |= 0x3<<6;  //选择UART模式,使能接收器
  UTX0IF = 0;       //清除TX发送中断标志
  URX0IF = 0;       //清除RX接收中断标志
  URX0IE = 1;       //使能URAT0的接收中断
  EA = 1;           //使能总中断
}



/*
函数功能:UART0发送字符串函数
*/
void UR0SendString(char *str,unsigned int len)
{
  int j;
  for(j=0;j;j++)>



审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 串口
    +关注

    关注

    14

    文章

    1543

    浏览量

    76188
  • 传输协议
    +关注

    关注

    0

    文章

    78

    浏览量

    11435
  • CC2530
    +关注

    关注

    19

    文章

    221

    浏览量

    57940
收藏 人收藏

    评论

    相关推荐

    CC2530 外部中断配置步骤

    介绍CC2530 外部中断配置步骤。
    的头像 发表于 07-06 14:41 2869次阅读
    <b class='flag-5'>CC2530</b> 外部中断<b class='flag-5'>配置</b>步骤

    【技术精选】嵌入式STM32原创征文活动精选文章

    CC2530(zigbee)入门开发: 串口收发配置CC2530(
    发表于 07-27 18:26

    基于CC2530芯片_zigbee基础实验

    zigbee基础实验,基于CC2530芯片
    发表于 12-11 10:48 49次下载

    cc2530芯片有哪些功能

    CC2530是专门针对IEEE 802.15.4和Zigbee应用的单芯片解决方案,经济且低功耗。 CC2530有四种不同的版本:CC2530-F32 / 64 / 128 / 256
    发表于 11-08 11:05 2.3w次阅读

    cc2530程序设计实例之CC2530 RF部分使用—实现点对点收发

    本文主要介绍了cc2530程序设计实例之CC2530 RF部分使用—实现点对点收发,通过串口调试助手发送字节数据。例如通过串口向设备A发送H
    发表于 12-09 12:22 2.2w次阅读
    <b class='flag-5'>cc2530</b>程序设计实例之<b class='flag-5'>CC2530</b> RF部分使用—实现点对点<b class='flag-5'>收发</b>

    基于CC2530ZigBee协调器节点设计

    本文给出了基于TI新一代芯片CC2530ZigBee协调器节点设计方法,该方法选用TICC2591作为射频前端芯片。
    发表于 01-05 15:25 4.9w次阅读
    基于<b class='flag-5'>CC2530</b>的<b class='flag-5'>ZigBee</b>协调器节点设计

    CC2530芯片的基本特性和CC2530无线模块的设计

    本文介绍了CC2530芯片的基本特性,论述了以CC2530芯片为核心的无线通信模块的硬件设计和调试软件设计,在介绍设计规范和模块结构的基础上,采用TI公司的CC2530芯片作为主控制芯片设计出具
    发表于 02-11 08:00 97次下载
    <b class='flag-5'>CC2530</b>芯片的基本特性和<b class='flag-5'>CC2530</b>无线模块的设计

    ZigBee CC2530串口的数据接收处理机制详细资料讲解

    本文档的主要内容详细介绍的是ZigBee CC2530串口的数据接收处理机制详细资料讲解。
    发表于 08-01 17:34 7次下载
    <b class='flag-5'>ZigBee</b> <b class='flag-5'>CC2530</b><b class='flag-5'>串口</b>的数据接收处理机制详细资料讲解

    如何使用ZigBee TI ZStack CC2530 2.5搭建开发环境

    本文档的主要内容详细介绍的是如何使用ZigBee TI ZStack CC2530 2.5搭建开发环境。
    发表于 05-10 18:14 25次下载
    如何使用<b class='flag-5'>ZigBee</b> TI ZStack <b class='flag-5'>CC2530</b> 2.5搭建<b class='flag-5'>开发</b>环境

    微雪电子ZIGBEE开发CC2530 Eval Kit简介

    ZigBee CC2530 串口透传 开发套件 物联网套件 板载电池插槽 支持多种供电方式 引出所有IO 方便用户功能扩展 板载一个CP2102 方便调试下载 型号
    的头像 发表于 01-09 11:05 2043次阅读
    微雪电子<b class='flag-5'>ZIGBEE</b><b class='flag-5'>开发</b>板 <b class='flag-5'>CC2530</b> Eval Kit简介

    微雪电子ZIGBEE开发CC2530 Eval Kit5简介

    ZigBee CC2530 串口透传 开发套件 XBEE 物联网套件 直插接口兼容Xbee 支持自动组网 支持板载PCB天线及IPEX外接天线 型号
    的头像 发表于 01-10 09:01 2039次阅读
    微雪电子<b class='flag-5'>ZIGBEE</b><b class='flag-5'>开发</b>板 <b class='flag-5'>CC2530</b> Eval Kit5简介

    基于CC2530ZigBee通信网的应用设计.pdf

    基于CC2530ZigBee通信网的应用设计.pdf
    发表于 12-15 18:17 23次下载

    CC2530无线通信模块使用串口通信参考方法

    CC2530无线通信模块使用串口通信参考方法
    发表于 04-24 17:20 13次下载

    CC2530(zigbee)入门开发: 安装IAR开发环境

    CC2530本身是一个51单片机内核,开发过51的搞起来非常容易,也就是多了一个无线射频部分;如果不使用无线射频功能,那么就和一个正常的51单片机一样。要进行CC2530的软件开发,需
    的头像 发表于 05-28 13:38 1.2w次阅读
    <b class='flag-5'>CC2530</b>(<b class='flag-5'>zigbee</b>)<b class='flag-5'>入门开发</b>: 安装IAR<b class='flag-5'>开发</b>环境

    基于CC2530ZigBee通信网络的应用设计

    电子发烧友网站提供《基于CC2530ZigBee通信网络的应用设计.pdf》资料免费下载
    发表于 10-26 09:34 3次下载
    基于<b class='flag-5'>CC2530</b>的<b class='flag-5'>ZigBee</b>通信网络的应用设计