matlab程序调试时遇到的问题,CC2530调试过程中遇到的问题们

应用场景描述:

多个发送端在不同的信道上发送信息(11~26)信道,接收端轮询所有信道(11~26),若有信号,则接收,若无信号则继续轮询。形成多个点对点的收发系统。

一、问题1

Ø 问题现象描述:

Zigbee接收端轮询信道,当发送端正常时

实验一:1.若发送端由A信道发,可正确接收;2.若发送端由A+4信道发,则不可正确接收。

实验二:1.若发送端由A信道发,可正确接收;2若发送端由A+2信道发,可正确接收;.3.若发送端由A+4信道发,可正确接收;

以上现象经确认与发送端无关,且接收端硬件复位无用。

Ø 问题分析

1.经过在接收中断中加入LED灯闪,发现切换信道后没有收到信息的原因是压根没有进入接收中断。

2.没有进入中断,说明在从天线接下信号后的处理中,没有正确分辨出信号。且切换信道主要是切换接收频率。所以问题可能频率有关。

3.点对点的情况下不会出现该问题。

4.在CC2530_userguide中找到frequency calibration相关的寄存器RFST的ISRXON指令。(在代码中为由light_switch.c调用的basicRfReceiveOn()。)其作用Enable and calibrate frequency synthesizerfor RX。所以加入basicRfReceiveOn()与basicRfReceiveOff(),便解决问题。

二、问题2

Ø 问题现象描述:

Zigbee发送正常,当加入了basicRfReceiveOn()后,可以接收到所有信道信息,但是个别信道上信息会发生错误。

Ø 问题分析

1.改为点对点,即接收端不轮询。因为加入了basicRfReceiveOn(),同样也会出现问题,所以问题是由basicRfReceiveOn()引起的,而非轮询等。

2.考虑到basicRfReceiveOn()有校正频偏的作用,所以需要一定的时间,加入Delay问题解决。

三、问题3

Ø 问题现象描述:

Zigbee接收端运行一段时间会接收不到数据,经在中断中加入LED灯闪和在接收while中加入打印,确定程序在运行,但没有收到数据。

Ø 问题分析

1.发送端连续发送数据55 55 BB BB BB BB BB BB BB BB BB BB BB BB BB AA AA。

通过MATLAB仿真Zigbee调制,确定问题为发送序列过于有规律的问题。

bc62fd35b8c011d22062a98c826ea0a0.png

可知,其频谱如下:

f0f7d0a74b9e83d4e5eafceda770063b.png

当改为发送随机信号时,其频谱为

fcc90b69f4f1995538d9fb74c023a803.png

四、附:

A. light_switch.c最终版代码

/***********************************************************************************

Filename: light_switch.c

Description: This application function either as a light or a

switch toggling the ligh. The role of the

application is chosen in the menu with the joystick at initialisation.

Push S1 to enter the menu. Choose either switch or

light and confirm choice with S1.

Joystick Up: Sends data from switch to light

***********************************************************************************/

/***********************************************************************************

* INCLUDES

*/

#include

#include

#include

#include

#include

#include

#include "hal_mcu.h"

#include "hal_button.h"

#include "hal_rf.h"

#include "util_lcd.h"

#include "basic_rf.h"

/***********************************************************************************

* CONSTANTS

*/

// Application parameters

#define RF_CHANNEL 11 // 2.4 GHz RF channel

// BasicRF address definitions

#define PAN_ID 0x2007

#define SWITCH_ADDR 0x2520

#define LIGHT_ADDR 0xBEEF

#define APP_PAYLOAD_LENGTH 18

//#define LIGHT_TOGGLE_CMD 0

// Application states

#define IDLE 0

#define SEND_CMD 1

// Application role

#define NONE 0

#define SWITCH 1

#define LIGHT 2

#define APP_MODES 2

#define LED P1_2 //定义LED为P12口控制

/***********************************************************************************

* LOCAL VARIABLES

*/

static uint8 pTxData[APP_PAYLOAD_LENGTH];

static uint8 pRxData[APP_PAYLOAD_LENGTH];

static basicRfCfg_t basicRfConfig;

unsigned char Recdata[]="CHENGDU JIALI TECH.INC\r\n";

unsigned char Recdata_bak[]="CHENGDU JIALI TECH.INC\r\n";

unsigned char Recdata_consol[];

unsigned char Testdata[];

unsigned char RXTXflag = ;

unsigned char temp=;

unsigned int datanumber = ;

int flag=;

#ifdef SECURITY_CCM

// Security key

static uint8 key[]= {

0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,

0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,

};

#endif

/***********************************************************************************

* LOCAL FUNCTIONS

*/

static void appLight();

static void appSwitch();

void initUART_TX(void);//*************************

void initUART_RX(void);//**************************

void UartTX_Send_String(int8 *Data,int len);//**********************

/****************************************************************

发送ZIGBEE,初始化串口0函数

****************************************************************/

void initUART_TX(void)

{

CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振

while(CLKCONSTA & 0x40); //等待晶振稳定

CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ

PERCFG = 0x00; //位置1 P0口

P0SEL = 0x0c; //P0用作串口

// P0SEL = 0x0c; //P0用作串口

P2DIR &= ~0XC0; //P0优先作为UART0

U0CSR |= 0x80; //串口设置为UART方式

U0GCR |= ;

U0BAUD |= ; //波特率设为115200

UTX0IF = ; //UART0 TX中断标志初始置位1

U0CSR |= 0X40; //允许接收

//IEN0 |= 0x84; //开总中断,接收中断

URX0IE=;

EA=;

}

/****************************************************************

接收ZIGBEE,串口初始化函数

****************************************************************/

void initUART_RX(void)

{

PERCFG = 0x00; //位置1 P0口

P0SEL = 0x0c; //P0_2,P0_3用作串口(外部设备功能)

P2DIR &= ~0XC0; //P0优先作为UART0

U0CSR |= 0x80; //设置为UART方式

U0GCR |= ;

U0BAUD |= ; //波特率设为115200

UTX0IF = ; //UART0 TX中断标志初始置位0

}

/****************************************************************

串口发送字符串函数

****************************************************************/

void UartTX_Send_String(int8 *Data,int len)

{

int j;

for(j=;j

{

U0DBUF = *Data++;

while(UTX0IF == );

UTX0IF = ;

}

}

void Delay(unsigned long n)

{

unsigned long tt;

for(tt = ;tt

for(tt = ;tt

for(tt = ;tt

for(tt = ;tt

for(tt = ;tt

}

/***********************************************************************************

* @fn appLight

*

* @brief Application code for light application. Puts MCU in endless

* loop waiting for user input from joystick. jiali

*

* @param basicRfConfig - file scope variable. Basic RF configuration data

* pRxData - file scope variable. Pointer to buffer for RX data

*

* @return none jaalee

*/

static void appLight()

{

unsigned int i=,j=;

int8 tmp;

#ifdef ASSY_EXP4618_CC2420

halLcdClearLine();

#endif

// Initalise uart

initUART_RX();

UartTX_Send_String("Begin~!!\n",);

// Initialize BasicRF

basicRfConfig.myAddr = LIGHT_ADDR;

basicRfConfig.channel = RF_CHANNEL+i;

if(basicRfInit(&basicRfConfig)==FAILED) {

HAL_ASSERT(FALSE);

}

basicRfReceiveOn();

LED=;

// Main loop

while (TRUE) {

basicRfConfig.myAddr = LIGHT_ADDR;

basicRfConfig.channel = RF_CHANNEL+i;

i=(i++)%;

if(basicRfInit(&basicRfConfig)==FAILED) {

HAL_ASSERT(FALSE);

}

basicRfReceiveOn();//问题1时无此句

Delay();//问题1时无此句

if(basicRfPacketIsReady())

if(basicRfReceive(pRxData, APP_PAYLOAD_LENGTH, NULL)>) {

UartTX_Send_String(pRxData,APP_PAYLOAD_LENGTH);

}

basicRfReceiveOff();//问题1时无此句

}

}

/***********************************************************************************

* @fn appSwitch

*

* @brief Application code for switch application. Puts MCU in

* endless loop to wait for commands from from switch

*

* @param basicRfConfig - file scope variable. Basic RF configuration data

* pTxData - file scope variable. Pointer to buffer for TX

* payload

* appState - file scope variable. Holds application state

*

* @return none

*/

static void appSwitch()

{

// int flag=0;

unsigned int i=;

#ifdef ASSY_EXP4618_CC2420

halLcdClearLine();

#endif

initUART_TX();

UartTX_Send_String("Begin~!!\n",);

// Initialize BasicRF

basicRfConfig.channel = RF_CHANNEL+;

basicRfConfig.myAddr = SWITCH_ADDR;

if(basicRfInit(&basicRfConfig)==FAILED) {

HAL_ASSERT(FALSE);

}

// Keep Receiver off when not needed to save power

basicRfReceiveOff();

datanumber=;

RXTXflag = ;

while()

{

/*

if(RXTXflag == 3) //发送状态

{

U0CSR &= ~0x40;

// UartTX_Send_String(Recdata,datanumber);

U0CSR |= 0x40; //允许接收

RXTXflag = 1; //恢复到接收状态

datanumber = 0; //指针归0

LED=~LED;

Recdata_consol[0]=0xac;

UartTX_Send_String(Recdata_consol,1);//不能收数

flag=1;

for(i=0;i<17;i++)

{

Recdata_bak[i]=Recdata[i];

}

}

*/

if(flag==)

{

basicRfSendPacket(LIGHT_ADDR, Recdata_bak, );

}

}

}

/***********************************************************************************

* @fn main

*

* @brief This is the main entry of the "Light Switch" application.

* After the application modes are chosen the switch can

* send toggle commands to a light device.

*

* @param basicRfConfig - file scope variable. Basic RF configuration

* data

* appState - file scope variable. Holds application state

*

* @return none

*/

void main(void)

{

unsigned int i=;

// Config basicRF

basicRfConfig.panId = PAN_ID;

basicRfConfig.channel = RF_CHANNEL;

basicRfConfig.ackRequest = TRUE;

#ifdef SECURITY_CCM

basicRfConfig.securityKey = key;

#endif

// Initalise board peripherals

halBoardInit();

// Initalise hal_rf

if(halRfInit()==FAILED) {

HAL_ASSERT(FALSE);

}

// Indicate that device is powered

//appSwitch();

appLight();

}

/****************************************************************

串口接收一个字符:一旦有数据从串口传至CC2530,则进入中断,将接收到的数据赋值给变量temp.

****************************************************************/

#pragma vector = URX0_VECTOR

__interrupt void UART0_ISR(void)

{

URX0IF = ; //清中断标志

temp = U0DBUF;

int i;

if(datanumber==)

{

if(temp==0x55)

Recdata[datanumber++] = temp;

else

{

datanumber=;

}

}

else if(datanumber==)

{

if(temp==0x55)

Recdata[datanumber++] = temp;

else

{

datanumber=;

}

}

else if(datanumber==)

{

if(temp==0xaa)

Recdata[+datanumber++] = temp;

else

{

datanumber=;

}

}

else if(datanumber==)

{

if(temp==0xaa)

{

Recdata[+datanumber++] = temp;

Recdata[]=;

RXTXflag = ;

U0CSR &= ~0x40;

// UartTX_Send_String(Recdata,datanumber);

U0CSR |= 0x40; //允许接收

RXTXflag = ; //恢复到接收状态

datanumber = ; //指针归0

LED=~LED;

flag=;

for(i=;i

{

Recdata_bak[i]=Recdata[i];

}

}

else

{

datanumber=;

}

}

else

{

Recdata[+datanumber++] = temp;

}

temp = ;

}

B. ZIGBEE_OQPSK调制MATLAB代码

clear all

% close all

D=[];

Data=[];

% data_hex='5555CCCCCCCCCCCCCCCCCCCCCCCCCCAAAA';

% data_hex='5555BBBBBBBBBBBBBBBBBBBBBBBBBBAAAA';

data_hex='51555086F61C3CA2F7C71A4B4C046ADAAAA';

data_map=[

'';

'';

'';

'';

'';

'';

'';

'';

'';

'';

'';

'';

'';

'';

'';

''];

for i=:length(data_hex)

tmp=hex2dec(data_hex(i));

Data=[Data data_map(tmp+,:)];

end

for i=::length(Data)

t=[Data(i) Data(i+)];

T2=bin2dec(t);

D=[D repmat(T2,,fs/fb)];

end

modObj = modem.oqpskmod;

M1=modulate(modObj,D');

M=M1(:length(M1));

N1=:length(M)/-;

N2=-length(M)/:-;

N=[N1,N2];

figure,plot(N,abs(fft(M)));

figure,plot(real(M),imag(M),'*');

关于火狐浏览器在开发调试过程中,出现javascript&colon;void&lpar;0&rpar;的状态

关于火狐浏览器在开发调试过程中,出现javascript:void(0)的状态 由于火狐浏览器没有安装 Adobe Flash Player 19 NPAPI这个插件 安装好了之后就可以直接运行了

Android APP 调试过程中遇到的问题。

调试过过程中APP安装完启动后有的时候会异常退出,报这个错误.有的时候可以直接启动.查找不到原因.网上说把commit方法替换成commitAllowingStateLoss() 也无效. Andro ...

调试过程中发现按f5无法走进jdk源码

debug 模式 ,在fis=new FileInputStream(file); 行打断点 调试过程中发现按f5无法走进jdk源码 package com.lzl.spring.test; impo ...

C语言调试过程中duplicate symbol错误分析

说明:在我们调试C语言的过程中,经常会遇到duplicate symbol错误(在Mac平台下利用Xcode集成开发环境).如下图: 一.简单分析一下C语言程序的开发步骤. 由上图我们可以看出C语言由 ...

【转】MFC中调试过程中查看输出信息 -- 不错

原文网址:http://blog.sina.com.cn/s/blog_4e24d9c501014o39.html 笔记&&方便查阅. ~~~~~~~~~~~~~~~~~~~~~~~~ ...

Android Studio 调试过程中快捷查看断点处变量值(Ctrl&plus;Shift&plus;I无效)?

当你在做Keymap到Eclipse后,在debug过程中,在Eclipse中我们很喜欢用Ctrl+Shift+I去查看一个运算或者调用的结果,这样用起来很方便.但是keymap到Eclipse后,你 ...

&lbrack;ISE调试&rsqb; 在ISE调试过程中,遇到过的warning以及消除办法

1.在generate的过程中,在Map环节遇到了下面这个warning 意思:告诉你是黑盒子,而且他本来在设计里面就是黑盒子. 解决办法:点击图中的,会弹出一个代码文件,是声明这个IP核的文件,代码 ...

代码调试过程中easy遇到的问题

前两天身体有些不舒服,也没写啥新文章,昨天下了一天的雨.今天阳光明媚,空气也非常新奇.心情大好. 继翻译为什么输出是String而不是Object,今天先写一下调试方面的东西.java中自带的函数调试 ...

IIC通信控制的AD5259------在调试过程中遇到的奇葩问题

首先说一下的遇到的问题: 1.AD5259按照SCL是100KHz的情况下,可以正常接收上位机的数据,但是一段时间后,就不能正确的按照时序来走了 原因在于AD5259在接收到上位机的数据后需要一定的响 ...

随机推荐

jni调试3(线程调试env变量问题)

jni层调试线程死机原因 一,导致死机原因:   jni层中  线程函数中  只要添加调用env 的函数 ,,就会死机     二,解决方法 第一我们应该理解: ①(独立性) JNIEnv 是一个与线 ...

【面试题041】和为s的两个数字VS和为s的连续正数序列

[面试题041]和为s的两个数字VS和为s的连续正数序列 题目一:     输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,输出任意一对即可. ...

cf448D Multiplication Table

D. Multiplication Table time limit per test 1 second memory limit per test 256 megabytes input stand ...

linux添加本地yum源

增加一块硬盘 然后格式化成btrfs格式的文件 mkfs.btrfs /dev/sde 永久挂载 echo "/dev/sde /mnt btrfs defaults 0 0" & ...

Linux 特殊权限 SUID&comma;SGID&comma;SBIT

setuid 和 setgid 分别是 set uid ID upon execution 和 set group ID upon execution 的缩写.我们一般会再次把它们缩写为 suid 和 ...

&lbrack;转帖&rsqb;Gartner预测2019年全球IT支出将达到3&period;8万亿美元

Gartner预测2019年全球IT支出将达到3.8万亿美元 http://server.zhiding.cn/server/2019/0130/3115439.shtml 全球领先的信息技术研究和顾 ...

uva10401Injured Queen Problem(递推)

题目:uva10401Injured Queen Problem(递推) 题目大意:依然是在棋盘上放皇后的问题,这些皇后是受伤的皇后,攻击范围缩小了.攻击范围在图中用阴影表示(题目).然后给出棋盘的现 ...

Android访问php webservice

如果是PHP做的服务端,而我们要用android去访问,怎么办?当然可以用REST,但也可以用点笨的方法,比如可以让PHP的服务端返回JSON或XML数据,而Android端则可以用APACHE的ht ...

C&plus;&plus;字符集问题终极分析(可解决乱码问题)

最近研究vc,windows的东西真是很傻瓜,啥都给你做好,有个好处就是开发方便了. 有个弊端就是完全按微软的一套进行,规则都是它定的,你得知道它的很多api, 开发出来的代码效率不高,不过却可以比较 ...

App设计师常用的10大网页和工具大盘点

1.Adobe Photoshop 老牌的设计工具,不用解释 2.Adobe Illustrator 同上,不解释 3.Balsamiq Mockup 网址:http://balsamiq.com/ ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值