您好、专家!
我正在尝试通过 CC1352从主 uC 接收数据并通过射频在2.5kbps 远距离设置发送这些数据、然后 CC1352在给定的时间内进入低功耗模式这是整个任务、我已将以下代码用于我的应用、 以下代码未从 UART2_readCancel (UART)退出;、请检查以下代码并帮助解决问题、我们已使用 CC1352R 定制设计板。 以下代码消耗>15mA。
/***** 包括***** /
/*标准 C 库*/
#include
#include
#include
#include
/* TI 驱动程序*/
#include
#include
#include
//#include
/* Driverlib 头文件*/
#Include DeviceFamily_structPath (driverlib/rf_prop_mailbox.h)
/*板头文件*/
#include "ti_drivers_config.h"
#include
/* POSIX 头文件*/
#include
/***** 定义***** /
/*进行功率测量*/
#define power_measurement
/*数据包 TX 配置*/
确定有效载荷长度50.
#ifdef power_measurement
#define packet_interval 1 /*对于功率测量,将数据包间隔设置为5s */
#else
#define packet_interval 500000 //将数据包间隔设置为500000us 或500ms */
#endif
/***** 原型***** /
/***** 变量声明***** /
静态 RF_Object rfObject;
静态 rf_handle rfHandle;
静态 uint8_t packet[PAYLOAD_LENGTH];
//static uint16_t seqNumber;
//static sem_t sem;
Static Volatile size_t numBytesRead;
const size_t RX_size = 128;
静态 uint8_t RX_COM1 [128];
静态 int reset=0;
/*
*=========== callbackFxn=========
*/
void callbackFxn (UART2_handle handle、void *buffer、size_t count、void *userArg、int_fast16_t status)
{
如果(status!= UART2_STATUS_SUCCESS)
{
/* UART2_READ()*/中发生 RX 错误
while (1){}
}
numBytesRead =计数;
}
/***** 函数定义***** /
void *mainThread (void *arg0)
{
RF_Params rfParams;
rf_params_init (&rfParams);
UART2_Handle UART;
UART2_Params uartParams;
// int32_t semStatus;
uint32_t status = UART2_STATUS_SUCCESS;
GPIO_setConfig (CONFIG_GPIO_GLED、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
GPIO_WRITE (CONFIG_GPIO_GLED、CONFIG_GPIO_LED_OFF);
/*在回调读取模式下创建 UART */
UART2_Params_init (&uartParams);
uartParams.readMode = UART2_Mode_callback;
uartParams.readCallback = callbackFxn;
uartParams.baudrate = 9600;
uartParams.readReturnMode = UART2_ReadReturnMode_partial;
// uartParams.readMode = UART2_Mode_Blocking;
uartParams.writeMode = UART2_Mode_blocking;
UART = UART2_OPEN (CONFIG_UART2_0、&uartParams);
如果(UART = NULL)
{
// UART2_OPEN()失败
while (1){}
}
复位=1;
rf_cmdPropTx.pktLen = payload_length;
rf_cmdPropTx.pPkt =数据包;
RF_cmdPropTx.startTrigger.triggerType = TRIG_NOW;
/*请求访问对讲机*/
#IF 已定义(DeviceFamily_CC26X0R2)
rfHandle = rf_open (&rfObject、&rf_prop、(RF_RadioSetup*)&RF_cmdPropRadioSetup、&rfParams);
#else
rfHandle = rf_open (&rfObject、&rf_prop、(RF_RadioSetup*)&RF_cmdPropRadioDivSetup、&rfParams);
#endif// DeviceFamily_CC26X0R2
/*设置频率*/
RF_postCmd (rfHandle、(RF_Op*)和 RF_cmdfs、RF_PriorityNormal、NULL、0);
STATUS = UART2_READ (UART、&RX_COM1、RX_SIZE、NULL);
while (1)
{
GPIO_WRITE (CONFIG_GPIO_GLED、1);
睡眠(1);
GPIO_WRITE (CONFIG_GPIO_GLED、0);
if (reset=0)
{
UART = UART2_OPEN (CONFIG_UART2_0、&uartParams);
如果(UART = NULL)
{
// UART2_OPEN()失败
while (1){}
}
STATUS = UART2_READ (UART、&RX_COM1、RX_SIZE、NULL);
}
//复位=0;
UART2_WRITE (UART、"while _OK\r\n "、sizeof ("while _OK\r\n ")、NULL);
睡眠(1);
if (numBytesRead > 0)
{
UART2_WRITE (UART、RX_COM1、RX_SIZE、NULL);
rf_cmdPropTx.pktLen = numBytesRead;
INT I;
for (i=0;i<numBytesRead;i++)
{
uint8_t* buffer8 =(uint8_t*) RX_COM1;
packet[i]= buffer8[i];
}
/*发送数据包*/
RF_EventMask terminationReason = RF_runCmd (rfHandle、(RF_Op*)&RF_cmdPropTx、
RF_PriorityNormal、NULL、0);
memset (RX_COM1、0x0、sizeof (RX_COM1));
STATUS = UART2_READ (UART、&RX_COM1、RX_SIZE、NULL);
numBytesRead = 0;
交换机(终结状态)
{
案例 RF_EventLastCmdDone:
//独立的无线电操作命令或最后一个无线电
//链中的操作命令已完成。
中断;
案例 RF_EventCmdCanceled:
//命令在启动之前已取消;可能会导致此问题
//通过 RF_cancelCmd ()或 RF_flushCmd ()。
中断;
案例 RF_EventCmdAborted:
//由 RF_cancelCmd ()或引起的命令突然终止
// rf_flushCmd ()。
中断;
案例 RF_EventCmdStopped:
//由 RF_cancelCmd ()或引起的正常命令终止
// rf_flushCmd ()。
中断;
默认值:
//未捕获的错误事件
while (1);
}
uint32_t cmdStatus =((volatile RF_Op*)&RF_cmdPropTx)->status;
switch (cmdStatus)
{
案例 PROP_DONE_OK:
//成功传输数据包
中断;
案例 PROP_DONE_STOPPED:
//在发送数据包并完成时接收到 CMD_STOP
//传输数据包
中断;
案例 PROP_DONE_ABORT:
//发送数据包时收到 CMD_ABORT
中断;
案例 PROP_ERROR_PAR:
//观察到的非法参数
中断;
案例 PROP_ERROR_NO_SETUP:
//命令已发送,但未在受支持的中设置对讲机
//模式使用 CMD_PROP_RADIO_SETUP 或 CMD_RADIO_SETUP
中断;
案例 PROP_ERROR_NO_FS:
//在未对合成器编程的情况下发送命令
中断;
案例 PROP_ERROR_TXUNF:
//运行期间观察到 TX 下溢
中断;
默认值:
//未捕获的错误事件-这些可能来自
// rf_mailbox.h 中定义的状态池
while (1);
}
}
#ifndef power_measurement
GPIO_TOGGLE (CONFIG_GPIO_GLED);
#endif
/*关闭对讲机*/
UART2_WRITE (UART、"send_OK\r\n "、sizeof ("send_OK\r\n ")、NULL);
rf_yield (rfHandle);
/* UART2_WRITE (UART、"RF_OK\r\n"、sizeof ("RF_OK\r\n")、NULL);
UART2_rxDisable (UART);
UART2_WRITE (UART、"RDIS_OK\r\n"、sizeof ("RDIS_OK\r\n")、NULL);
UART2_readCancel (UART);
UART2_WRITE (UART、"RCAN_OK\r\n"、sizeof ("RCAN_OK\r\n")、NULL);
UART2_Close (UART);
UART2_WRITE (UART、"all_OK\r\n "、sizeof ("all_OK\r\n ")、NULL);*/
//GPIO_WRITE (CONFIG_GPIO_GLED、1);
//sleep (1);
//GPIO_WRITE (CONFIG_GPIO_GLED、0);
#ifdef power_measurement
/* packet_interval s 的睡眠*/
睡眠(packet_interval);
#else
/* packet_interval us 的睡眠*/
usleep (packet_interval);
#endif
}
}
此致
Surya.