zigbee基础应用(五)uart串口通信
1.硬件篇

P0.2为RX P0.3为TX
2.芯片篇




用到的芯片的概况
3.计算篇
波特率的计算公式,通过对UxBAUD.BAUD_M和UxGCR.BAUD_E的配置来设置波特率,如
 U0GCR |= 11;       
 U0BAUD |= 216; //波特率设为115200
4.软件篇
实现步骤:
(1)设置时钟源的晶振   通过CLKCONCMD
 等待晶振稳定          通过CLKCONSTA
 设置系统主时钟频率  CLKCONCMD
(2)UART的备用位置   PERCFG
 将要使用的IO口设置为外设IO  P0SEL
         外设优先级设置     P2DIR
(3)设置UART模式      U0CSR
  通过对UxBAUD.BAUD_M和UxGCR.BAUD_E的配置来设置波特率
        UART0 TX中断标志初始置位0   UTX0IF
(4)通过U0DBUF来发送和接收数据
 UTX0IF来判断是否发送完成 ,为1则发送成功
 URX0IF来判断是否接受完成,为1则接收成功
        接收数据时U0CSR |= 0X40; 允许接收
        发送数据时U0CSR &= 0X40;禁止接收
代码:
#include <iocc2530.h>
#include <string.h>
#define uint unsigned int
#define uchar unsigned char

//定义控制灯的端口
#define LED1 P1_0
#define LED2 P1_1

void initUART0(void);
void InitialAD(void);
void UartTX_Send_String(uchar *Data,int len);

uchar Recdata[30]="hello zigbee!\n";
uchar RXTXflag = 1;
uchar temp;
uint  datanumber = 0;
uint  stringlen;

/****************************************************************
串口发送字符串函数
****************************************************************/
void UartTX_Send_String(uchar *Data,int len)
{
  int j;
  for(j=0;j<len;j++)
  {
    U0DBUF = *Data++;
    while(UTX0IF == 0);
    UTX0IF = 0;
  }
}

#if 0
/****************************************************************
初始化串口0函数
****************************************************************/
void initUART0(void)
{
    CLKCONCMD &= ~0x40;                         //设置系统时钟源为32MHZ晶振
    while(CLKCONSTA & 0x40);                    //等待晶振稳定
    CLKCONCMD &= ~0x47;                         //设置系统主时钟频率为32MHZ
   
    PERCFG = 0x00; //位置1 P0口
    P0SEL = 0x3c; //P0用作串口
    P2DIR &= ~0XC0;                             //P0优先作为UART0    
    U0CSR |= 0x80; //串口设置为UART方式
    U0GCR |= 11;
    U0BAUD |= 216; //波特率设为115200
    UTX0IF = 1;                                 //UART0 TX中断标志初始置位1    
    U0CSR |= 0X40; //允许接收
    IEN0 |= 0x84; //开总中断,接收中断
}
/****************************************************************
串口接收一个字符:一旦有数据从串口传至CC2530,则进入中断,将接收到的数据赋值给变量temp.
****************************************************************/
#pragma vector = URX0_VECTOR
 __interrupt void UART0_ISR(void)
 {
  URX0IF = 0; //清中断标志
temp = U0DBUF;                          
 }

#else

/****************************************************************
初始化串口0函数
****************************************************************/
void initUART0(void)
{
    CLKCONCMD &= ~0x40;                         //设置系统时钟源为32MHZ晶振
    while(CLKCONSTA & 0x40);                    //等待晶振稳定
    CLKCONCMD &= ~0x47;                         //设置系统主时钟频率为32MHZ
   
    PERCFG = 0x00; //位置1 P0口
    P0SEL = 0x3c; //P0用作串口
    P2DIR &= ~0XC0;                             //P0优先作为UART0    
    U0CSR |= 0x80; //串口设置为UART方式
    U0GCR |= 11;
    U0BAUD |= 216; //波特率设为115200
    UTX0IF = 1;                                 //UART0 TX中断标志初始置位1    
    U0CSR |= 0X40; //允许接收
//    IEN0 |= 0x84; //开总中断,接收中断
}
/****************************************************************
主函数
****************************************************************/
void main(void)
{
    P1DIR = 0x03; //P1控制LED
    LED1 = 1;
    LED2 = 1; //关LED
    initUART0();
    stringlen = strlen((char *)Recdata);
    UartTX_Send_String(Recdata,stringlen);
    
    
    while(1)
    {
      if(RXTXflag == 1)     //接收状态
      {
        
        if( URX0IF == 1)
        {
            LED2=0;     //接收状态指示
            URX0IF = 0; //清中断标志
   temp = U0DBUF;

if((temp!='#')&&(datanumber<50))     //’#‘被定义为结束字符,最多能接收50个字符
            {          
              Recdata[datanumber++] = temp;
            }
            else
            {
              RXTXflag = 3;                      //进入发送状态
            }
            
            if(datanumber == 50)
            {
              RXTXflag = 3;
            }
            
            temp  = 0;
            
            LED2=1;     //接收状态指示
        }
      }
      if(RXTXflag == 3) //发送状态
      {
        UartTX_Send_String("send:",5);
        
        LED2 = 1;                           //关LED2
        LED1 = 0;        //发送状态指示
        U0CSR &= ~0x40; //不能收数
        UartTX_Send_String(Recdata,datanumber);
        UartTX_Send_String("\n",1);
        U0CSR |= 0x40; //允许接收
        RXTXflag = 1;        //恢复到接收状态
        datanumber = 0; //指针归0
        LED1 = 1;        //关发送指示
        memset(Recdata, 0, sizeof(Recdata));
      }
    }
}

#endif


zigbee基础应用(五)uart串口通信相关推荐

  1. UART串口通信浅谈之(一)--基础概述

    通信按照传统的理解就是信息的传输与交换.UART(Universal Asynchronous Receiver/Transmitter,即通用异步收发器)串行通信是单片机最常用的一种通信技术,通常用 ...

  2. NXP(I.MX6uLL) UART串口通信原理————这个未复习

    参考:Linux NXP (I.MX6uLL) UART串口通信原理 作者:一只青木呀 发布时间: 2020-09-20 16:48:33 网址:https://blog.csdn.net/weixi ...

  3. 基于FPGA的UART串口通信实验(VHDL语言实现)

    一.前言: 最近在做UART串口通信的相关实验时,在网上查了很多资料,发现网上的大部分文章只注重理论,不注重代码,很多代码有错误不说,而且难以理解.故在完成此实验后,起了写一篇博客的心思,以供有想做相 ...

  4. 【蓝桥杯】单片机学习(7)——UART串口通信

    UART串口通信 一.基础知识介绍 1.通信方式的分类 2.RS232通信接口 3.UART模块介绍 (1)串口控制寄存器SCON(可位寻址) (2)电源控制寄存器PCON(不可位寻址) (3)辅助寄 ...

  5. 【FPGA练习】(一): UART串口通信实验

    由于之前学习FPGA的过程中,没有做一个良好的记录,以及已学知识的扩展,所以从今天开始每一个实验例程和扩展应用,都要做文档记录.本实验,是基于正点原子达芬奇xc7a35tfgg484-2开发板.开发板 ...

  6. 【FPGA】UART串口通信

    目录 前言 一丶通信方式 1.串行通信 2.并行通信 二丶UART 串口通信 三丶模块设计 四丶发送模块 1.代码 2.仿真 五丶接收模块 1.代码 2.仿真 六丶顶层模块 1.代码 2.模块原理图 ...

  7. Android 模拟Uart 串口通信

    下载串口工具 1.下载模拟串口工具:模拟串口工具 模拟串口工具用于生成模拟的两个串口,而不需要真实的物理串口. 2.下载串口调试工具:串口调试工具 串口调试工具用于直接通过串口发送数据 我这里有整合过 ...

  8. 【自学51单片机】11 -- UART串口通信

    文章目录 1.串行通信的初步认识 2.USB转串口通信 3.UART串口通信的基本应用 3.1 通信的三种基本类型 3.2 UARM模块介绍 3.3编写UART串口步骤及程序 4.串口调试助手 5.通 ...

  9. 【正点原子MP157连载】 第十六章 UART串口通信实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

最新文章

  1. sqlmap使用_sqlmap从入门到精通第四章47使用EW代理导出和导入MSSQL数据
  2. java arrays.sort() c_正面刚算法-Java中Arrays.sort()(一)
  3. 刷题两个月,从入门到字节offer,这是我的模板 | GitHub 1.2k星
  4. 近100年来全球20家顶尖公司成功原因揭秘
  5. centos7如何安装cloud-init
  6. [转载] JAVA环境变量配置
  7. html5 iframe 属性,html中关于iframe的allowTransparency属性的详解
  8. 千万数据去重_如何在 1 秒内做到大数据精准去重?
  9. Access to the path Library\UnityAssemblies\UnityEngine.xml is denied.
  10. 阶段3 3.SpringMVC·_05.文件上传_6 文件上传之跨服务器上传代码
  11. 【好文翻译】10个免费的压力测试工具(Web)
  12. 世界名着100部简介
  13. iOS录音及播放全解
  14. 3dmax电脑配置要求(3dmax需要什么样的笔记本配置?)
  15. [项目管理] BOT运作模式
  16. 【计算机视觉】简述对MSAA(多尺度注意力融合)的理解
  17. 数据分析报告的通用结构
  18. 【降维打击】希尔伯特曲线
  19. plupload插件的错误SCRIPT601
  20. HDU 4069 Squiggly Sudoku DLX 精确覆盖

热门文章

  1. 剪映专业版 1.2.0 - 一款全能好用的视频编辑工具
  2. 2022年国家高新企业认定申报最全问答-财务数据篇
  3. linux-使用screen后台运行命令,防止断网导致异常退出,命令没运行完成
  4. 【DB宝42】MySQL高可用架构MHA+ProxySQL实现读写分离和负载均衡
  5. jupyter查看python包
  6. PHP高级计算器的过程,PHP基于堆栈实现的高级计算器功能示例
  7. 814 Div2 C
  8. 32java访问(http):国家气象局 免费接口
  9. Nginx+Tomcat 搭建负载均衡、动静分离(tomcat多实例)
  10. 00截断上传绕过_上传绕过总结