CC2530,串口通信,收发字符问题。

本人单片机新手。下面的程序是正确可达到目的。
对于这个程序我有2个地方不太理解,望大神不吝赐教。
第一个:【设置发送字符串的函数】这个块儿,不太能理解。特别是我注释的地方。
第二个:【主方法中】接收那部分,有一个注释的地方,搞不懂。求解释。。。

没有金币,,,不知道有大神赐教没。。。跪谢。。。

 /*
设置串口波特率115200bps,8N1
串口调试助手给CC2530发送字符串,开发板则返回同样字符。
*/

#include<ioCC2530.h>
#include<string.h>

typedef unsigned char uchar;
typedef unsigned int uint;

#define SIZE 50

char RxBuf;
char RxData[SIZE];
char UartState;//0为接收状态,1为发送状态
uint count;//计数器

//延时器
void DelayMs(uint msec)
{
  uint i,j;
  for(i=0;i<msec;i++)
    for(j=0;j<1070;j++);
}

//初始化串口
void InitUart()
{
  //配置I/O,使用外部设备功能
  PERCFG=0x00;   //外设控制
  P0SEL=0x0C;   //配置P0端口的2,3为外设

  //配置相应的串口
  P2DIR&=~0x40;   //优先级的控制
  U0CSR|=0x80; //设置为UART模式

  //配置串口的波特率
  U0GCR=11;
  U0BAUD=216;

  U0CSR|=0x40;//接收使能
  IEN0|=0x84;//允许USART0  RX 中断使能,   打开所有中断
}

//设置发送字符串的函数
void UartSendString(char *Data,uint len)
{
  uint i;
  for(i=0;i<len;i++)
  {
    U0DBUF=*Data++;
    //传输开始时,触发TX中断,此时为1。
    while(UTX0IF==0);  //!!!!!!!!!!!!!!!!!?不太懂。
    UTX0IF=0;
  }
}

//接收中断处理函数
#pragma vector=URX0_VECTOR
__interrupt void UART0_ISR()
{
  URX0IF=0;//清中断标志
  RxBuf=U0DBUF;
}

//函数入口
void main()
{
  //首先,设置系统的时钟
  CLKCONCMD&=~0x40;    //把bit 6置为0,系统时钟选择,为32MHz XOSC
  while(CLKCONSTA&0x40);    //等待晶振稳定
  CLKCONCMD&=~0x47;    //设置系统时钟频率为32MHZ

  InitUart();       //初始化端口
  memset(RxData,0,SIZE);    //数据清零
  UartState=0;

  while(1)
  {
    if(UartState==0)   //接收状态
    {
      if(RxBuf!=0)
      {
        //以“#”为结束符,一次最多接收50个字符
        if((RxBuf!='#')&&(count<50))
          RxData[count++]=RxBuf;//接收
        else
        {
          if(count>=50)
          {
            memset(RxData,0,SIZE);
            count=0;
          }
          else
            UartState=1;
        }
       RxBuf=0;
      }
       //RxBuf=0;//!!!!如果把上面的       RxBuf=0;注释,打开这个的话,
            //!!!!在串口调试助手中会输出每次都不同的结果,小弟找不到规律。
    }
    if(UartState==1)//发送状态
    {
      //首先要禁止接收
      U0CSR&=~0x40;
      UartSendString(RxData,count);
      //允许接收字符
      U0CSR|=0x40;
      UartState=0;//回复到接收模式
      count=0;
      memset(RxData,0,SIZE); 
    }
  }
}


谢谢!!!

0

1个回答

这个是判断标志位,发送程序发完数据后产生会修改UTX0IF:

 while(UTX0IF==0);  //!!!!!!!!!!!!!!!!!?不太懂。

第二点,这是根据缓冲数据的字节数来判断是不是要接收数据,如果有数据就接收下来,接收完数据后就要重置字节数为0,不然,下次又重复收取了,逻辑就错乱了。

if(RxBuf!=0){
      ...
      RxBuf=0;
}
1
cskingq
大神带我飞 第二点我明白,但是如果把那句写在if的外边的话,每次运行的结果竟然不相同,我想知道不相同的原因,好奇怪呀。。。
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
《ZigBee开发笔记》第二部分 基础篇-第6章 CC2530串口通讯-发送字符串
1 理论分析rnrnrnrn1.1 CC2530 的 Usart 介绍rnrn首先,我们要知道 CC2530 有几个串行通信口。由图1知,它总共有 2 个串口分别为 Usart0、Usart1。Usart0 和 Usart1 是串行通信接口,它们能够分别运行于异步 UART 模式或者同步 SPI 模式。两个 Usart 具有同样的功能,可以设置在单独的 I/O 引脚。由 CC2530 datasheet 可知...
《ZigBee开发笔记》第二部分 基础篇-第6章 CC2530串口通讯-串口控制LED
1 理论分析rnrnrnrn1.1 Usart 发送rnrn当 USART 收/发数据缓冲器、寄存器 UxBUF 写入数据时,该字节发送到输出引脚TXDx。 UxBUF 寄存器是双缓冲的。当字节传送开始时, UxCSR.ACTIVE 位变为高电平,而当字节传送结束时为低。当传送结束时,UxCSR.TX_BYTE 位设置为 1。 rn当 USART 收/发数据缓冲寄存器就绪,准备接收新的发送数据时,就产生了一个中...
CC2530 实现无线串口
用CC2530实现无线串口可以说是最简单的了,话不多说直接看代码:1.初始化void RF_Init(void){  FRMFILT0  =0x0C;                //静止接收过滤,即接收所有数据包       TXPOWER   =0xD5;                //发射功率为1dBm    FREQCTRL  =0x0B;                //选择通道...
CC2530之UART串口通信
CC2530之UART串口通信利用单片机的串口与计算机通信,可方便对各种实验数据进行观察。个人认为,学习一种新的单片机,除了永恒的LED外,第二个例程该是串口的通信实验。CC2530有两个串口,分别为USART0和USART1。由于采用了引脚复用功能,外设与引脚对应的关系可根据外设控制寄存器PERCFG进行配置,具体对应情况如下: nUART0对应的外部引脚关系,位置1:Rx - P0_2
ZigBee(CC2530)(05) 串口收发数据
串口收发数据nn目录nn一、预备知识: nn什么是LSB/MSB?nn理解单工半双工全双工nnUART发送nnUART接收    nn二、项目实施nn一、预备知识: nn      UART模式提供异步串行接口。在UART模式中,接口使用双线连接方式(含有引脚RXD、 TXD)或者四线连接方式(含有引脚RXD、 TXD、RTS和CTS),其中RTS和CTS引脚用于硬件流量控制。nnnUART模式的...
cc2530串口(网络)通信流程
//串口发送接收流程nnmain: //主函数n ->osal_init_system(); //操作系统初始化n ->osalInitTasks(); //任务初始化 n -->ZDApp_Init(taskID++); //该函数初始化后,协调器建立网络、终端将加入网络n -->ZDOInitDevice(0);
CC2530基础实验四 串口通信
一、任务要求编写程序实现实验板定期向PC机串口发送字符串“Hello ! I am CC2530 。\n”。实验板开机后按照设定的时间间隔,不断地向PC及发送字符串,报告自己的状态,每发送一次字符串消息,LED1闪亮一次。具体工作方式如下:n ① 通电后LED1熄灭。 n ② 设置USART 0使用位置。 n ③ 设置UART工作方式和波特率。 n ④ LED1点亮。 n ⑤ 发送字符串“
CC2530串口UARTo接收、发送字符串
1) 通过实验掌握 CC2530 芯片串口配置与使用 3) 收到 PC 发送过来的数据,然后收到一整串数据之后,通过串口将改数据发送回去。 注:嵌入式开发中,当程序能跑起来后,串口是第一个要跑起来的设备,所有的工作状态,交互信息都会从串口输出。我们用的是世界上最好的串口芯片 FT232,贵的 USB 串口线都用该芯片。
stm32与cc2530串口通信实验
程序1:stm32程序串口2接收串口1发送 程序 改自 扩展实验11 ATK-HC05蓝牙串口模块实验 程序 程序2:zigbee串口通讯-发送字符串 连接方式: cc2530的P02连接stm32的PA2 cc2530的P03连接stm32的PA3 程序2串口一直发送“hello zigbee”字符串 mini版stm32程序1串口2接收后转发串口1原样输出
CC2530 芯片的UART转485通信的实现
应用: UART控制485硬件rnrnrn需求:该485设备是半双工的通信方式,因此需要使用另外的IO口来控制转换芯片MAX3485的收发工作。rn实现原理: 代码贴了。基本方式就是在使用UART发送时,从IO口输出高电平(由电路决定),使得MAX3485处于接收状态。当发送完成产生中断时,将IO输出低电平,等待设备反馈信息。rn遇到的问题: 设备收不到正确的信号,无法正常工作。rn解决办法:rn
《ZigBee开发笔记》第四部分 提高篇-第10章 CC2530 基于GenericApp串口无线控制LED灯
实验设备 rn硬件:PC 机一台;ZB2530(底板、核心板、仿真器、USB 线) 一套 rn软件:win7 系统,IAR 8.20 集成开发环境 rnrn本实验是基于GenericApp串口无线控制LED灯,编者在前面的协议栈已经讲过,本实验是将TI提供的复杂源码改为简单的代码,并将协调器等分离,便于读者朋友深入理解协议栈。本实验只讲解与前面不同的代码。 rn 代码分析 rn rn rn 实验现象 ...
CC2530串口通讯
/*CC2530通过串口发送数据到PC端,由PC端的串口助手打印显示出来*/
《ZigBee杂记》关于Zigbee_CC2530解决串口显示头几个乱码
问题如下图所示: rn rn解决思路: rn本来DS18B20温度采集回来,是通过simpleCollector.c中zb_ReceiveDataIndication函数中的debug_str( (uint8 *)buf );函数实现的。我们要跳过这个函数,用HalUARTWrite()这个函数实现串口功能。 rn解决步骤: rn串口初始化在sapi.c中加入#include “MT_UART.h”头文件,
cc2530-Contiki系统的串口输入问题
在工作中接触到了cc2530,并在上面使用contiki系统。以下是使用串口时遇到的坑。
基于CC2530的温湿度传感器及串口通信设计
基于CC2530的温湿度传感器及串口通信设计 1、设置温度报警值为26度,达到报警值时,红色闪亮,当低于报警值时,停止闪亮,同时,按下按钮,也可以解除报警; 2、将温湿度采集通过串口发送到电脑,上层用串口小助手查看,或者用VC等编程语言读取串口数据。
个人总结之MSP430F5510串口通讯(485)
1.首先先介绍一下USCI模块rn通用串行通信接口(USCI)模块支持多种异步通信模式。不同的rnUSCI 模块支持不同的模式。rn每一个 USCI 模块以不同的字母命名。例如,USCI_Arn不同于 USCI_Brn等等。如果不止一个相同的USCIrn模块被安装在一个设备上,这些模块以不同的数字命名。例如,一个设备有两个 USCI_A模块,它们可以命名rnUSCI_A0 和rnUSCI_A1。参
基于中断的CC2530的收发程序
两个CC2530模块进行射频收发,收发的数据采用中断的方式通过RS232串口与PC通讯 在官方版本的基础上增加uart.c,中断函数为自己编写的
CC2530之串口
本次实验,主要与CC2530的串口相关。 n串口电路图如下所示 n n首先,先介绍一下CC2530的外设I/O引脚映射,如下图所示,每个外设单元对应两组可以选择的I/O引脚。而外设I/O位置的选择使用由寄存器PERCFG来控制,其中bit1和bit0决定UART1和UART0的位置,0表示外设位置1,1表示外设位置2.PERCFG |= 0x00;//设置UART0为外设位置1nP0SEL |= 0
CC2530点对点代码
主要是CC2530点对点代码,适合新手学习!主要有接收发送和发送接收两个
单片机串口收发字符数据的类型
  今天在用51单片机进行串口收发数据的时候遇到了这样一个问题,上位机给单片机的字符数据是什么类型的,单片机又是怎样存储的?串口中断如下/* UART中断服务函数 */nvoid InterruptUART() interrupt 4n{n if (RI) //接收到字节n {n RI = 0; //手动清零接收中断标志位n table1[j] = SBUF; //接收到...
STM32和CC2530串口通信
STM32和CC2530通过串口进行通信,含说明文档。为将来做只能家居网关做好准备
CC2530基于寄存器实现无线收发
/*n 当光照强的时候关闭LED灯 手捂着传感器跑马灯n*/n#include<iocc2530.h>int count=0;nchar output[8];void Delay(unsigned char m)n{n int i=0,j=0;n for(i=0;i<1000;i++)n for(j=0;j<m;j++);n}//定义一个函数用来进行adc转换nunsigned sho
《ZigBee开发笔记》第四部分 提高篇-第9章 CC2530基于GenericApp无线收发实验
实验设备 rn硬件:PC 机一台;ZB2530(底板、核心板、仿真器、USB 线) 一套 rn软件:win7 系统,IAR 8.20 集成开发环境 rnrn本实验是基于GenericApp无线收发,编者在第2讲也有讲过,当时也是用的TI提供的源码改编的,比较完善,而现在编者将带领大家编写较为简单的协议栈,实现个性化订制,下图为该实验的模型。 rn rn 图9-1无线收发LED模型 rn打开工程: rn基...
ZStack-CC2530-2.5.1a 串口使用笔记(一)
在使用 ZStack-CC2530-2.5.1a  协议栈时,协议栈默认使用了串口;在IAR工程配置预处理器设置里有几个宏与使用串口有关:nZTOOL_P1nMT_TASKnn根据这两个宏,编译代码后,协议栈启动过程中会通过UART输出一些信息!nn当我的应用程序不希望在zigbee协议栈启动过程中输出这些信息,即禁用启动过程中的UART输出。但是当协议栈完全启动完成后,n又要使用串
dsp28335串口通信程序
dsp28335串口通信程序,实现七段码的显示程序。
CC2530的串口实验
CC2530的串口实验主要有编程主要有一下几个步骤:一、串口初始化函数(设置时钟频率--&amp;gt;选择用来当做串口的IO--&amp;gt;设置波特率--&amp;gt;发送中断设为0)二、字符串发送函数(U0DBUF填充字符--&amp;gt;等待串口发送完毕--&amp;gt;发送中断标志设为0,准备下次发送代码1:/*******************************************************...
cc2530 uart1接收数据
cc2530 uart1串口初始化,并且通过串口中断接收
CC2530串口发送程序
基于CC2530芯片的串口发送程序,学习zigbee的重要资源
FPGA-基于UART的QVGA显示(一)(实现PC端发送字母数字汉字的分别显示)
基础:由PC通过UART发送数据在VGA显示。数据可以为字母,数字,汉字(任选10个字),VGA分为左右两个区域,输入字母或者数字时在VGA左边显示,输入汉字时在VGA右边显示。nn发挥:有删除功能,可通过按键删除显示的数字,字母或者汉字。左边的按键按下字母或者数字删除,右边的按键按下汉字删除。每次仅可删除一个字符。举例:VGA左侧显示FPGA 时,按下左边的键,VGA显示FPG,再按一下,显示F...
ZIGBEE协议栈的串口实现,接收发送,有说明
ZIGBEE协议栈的串口实现,接收发送,有说明
cc2530收发程序
TI公司,CC2530的收发程序 void main (void) { uint8 appMode; uint8 i=0; appState = IDLE; appStarted = FALSE; // Config basicRF basicRfConfig.panId = PAN_ID; basicRfConfig.ackRequest = FALSE; // Initialise board peripherals halBoardInit(); // Initalise hal_rf if(halRfInit()==FAILED) { HAL_ASSERT(FALSE); } // Indicate that device is powered for (i=0; i<2; i++) { halLedSet(1); halMcuWaitMs(500); halLedClear(1); halLedSet(2); halMcuWaitMs(500); halLedClear(2); } // Print Logo and splash screen on LCD //utilPrintLogo("PER Tester"); // Wait for user to press S1 to enter menu // while (halButtonPushed()!=HAL_BUTTON_1); halMcuWaitMs(350); // halLcdClear(); // Set channel //basicRfConfig.channel = appSelectChannel(); basicRfConfig.channel = 0x0B; //Channel 11, 2405MHz // Set mode //appMode = appSelectMode(); appMode = MODE_RX; // Transmitter application if(appMode == MODE_TX) { // No return from here appTransmitter(); } // Receiver application else if(appMode == MODE_RX) { // No return from here appReceiver(); } // Role is undefined. This code should not be reached HAL_ASSERT(FALSE); }
CC2530基础实验之串口控制LED灯
/**************************************************************n * 文件名称:uart2.cn * 功 能:PC机控制发光二极管亮灭n*************************************************************/n#include "ioCC2530.h"n#include <str
cc2530裸机编程系列笔记4--GPIO口的使用
CC2530的GPIO口的使用与普通51单片机略有不同,主要体现在IO口在使用之前需要进行功能及方向的设定。功能的设置指的是把IO口设置为普通IO口还是当作特殊功能来使用。方向的设定指的是将IO口设为输入或输出。进行这两个设置使用的寄存器分别为PxSEL和PxDIR。rnrnrnrnrn      CC2530 的SFR 中有三类寄存器可用于配置这些IO 口:rn      ①PxSEL(x 为0
《ZigBee开发笔记》第四部分 提高篇-第3章 CC2530协议栈串口实验
实验设备 rn硬件:PC 机一台;ZB2530(底板、核心板、仿真器、USB 线) 一套 rn软件:win7 系统,IAR 8.20 集成开发环境 rnrn上节我们实现了无线LED通讯实验,相信大家对 ZStack 已经有了一定的认识,今天就来一个比较简单的实验,讲解如何在 ZStack 里使用串口功能。本实验并没有实现数据的收发,只是通过实际例子,让大家加深对 ZStack 工作原理的理解。另外,读...
zigbee-cc2530 串口收发
zigbee-cc2530 串口0数据收发,实现在返回串口助手的界面
Linux下串口收发通信
Linux下编程的过程有些固定,很多都是比如打开、配置、关闭等等nn串口通信流程:打开串口ttySn---&amp;gt;初始化串口---&amp;gt;读写(read、write)---&amp;gt;关闭串口nn最合适的指导书:https://www.ibm.com/developerworks/cn/linux/l-serials/nn nn串口设置nn       最基本的设置串口包括波特率设置,效验位和停止位设...
cc2530入门 与串口中断处理
做毕业设计的时候用到了cc2530开发板,用协议栈编程实现智能家居的功能。现在总结一下:n        先从Z_Stack的main()函数开始。 main函数在ZMain.c中,总体来说,它一共做了两项工作,一项是系统初始化,即由启动代码来初始化硬件系统和软件架构需要的各个模块;另外一项就是开始执行操作系统实体。nnnn先引入一下概念性的东西:n端点(EndPoint):是协议栈应
cc2530红外接收发射模块代码
cc2530红外接收发射模块代码;基于zigbee小板 红外接收 通过串口打印
CC2530无线模块设计(含原理图、PCB、部分测试代码)
CC2530无线模块设计(含原理图、PCB、部分测试代码)
ZigBee(CC2530/CC2531)双串口配置(Z-Stack2.5版本以上)
ZStack较(新的版本)支持同时使用两个串行口,不过要求一个是DMA方式另一个是ISR方式,具体操作方法如下:n1)在IAR的编译选项中定义宏,HAL_DMA=TRUE,HAL_UART=TRUE,HAL_UART_DMA=1,HAL_UART_ISR=2。n2)在程序初始化时,HalUARTOpen()打开串行口。n3)正常串行口读写。n有两个需要注意的地方:部分LCD占用了USART控制,这...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 python+串口通信教程 python+串口通信的教程