Thread 中讨论的其他部件:Z-stack、 CC2538、 CC2538EMK
您好、先生、
我使用的是 Z-stack mesh 1.0 GenericApp 示例
我使用连接到终端设备的2个加速计传感器,需要将传感器数据传输到协调器(使用 UART1)如何启动
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
#define Coordinator
#define ENDDEVICE
#define PACKETSIZE 60
字节 theMessageData[PACKETSIZE];
uint16 TransmitApp_MaxDataLength;
uint16 ui16dmummy;
void GenericApp_Init( uint8 task_id )
{
afDataReqMTU_t MTU;
mtd.kVp = false;
mtu.aps.secure = false;
TransmitApp_MaxDataLength = afDataReqMTU (&MTU);
TransmitApp_MaxDataLength =(TransmitApp_MaxDataLength /99)*PACKETSIZE;
/*代码的某种平静*/
}
uint16 GenericApp_ProcessEvent( uint8 task_id,uint16事件)
{
/*代码的某种平静*/
案例 ZDO_State_change:
GenericApp_NWkState =(devStates_t)(MSGpkt->HDR.status);
// if ((GenericApp_NWKState =DEV_ZB_COord)||
// (GenericApp_NWkState =DEV_router)||
// (GenericApp_NWKState =DEV_END_DEVICE))
#if defined (ENDDEVICE)(如果已定义)
if (GenericApp_NWkState =DEV_END_DEVICE)
{
////////////////////////////////////////////////////////////////////////////////////////////////////////////
dstAddr.addrMode = Addr16Bit;
dstAddr.addr.shortAddr = 0x0000; //NWK_broadcast_SHORTADDR;
ZDP_MatchDescReq (&dstAddr、0x0000、
GENERICAPP_PROFID、
GENERICAPP_MAX_CLUSTERSICS、(CID_t *) GenericApp_ClusterList、
GENERICAPP_MAX_CLUSTERSICS、(CID_t *) GenericApp_ClusterList、
false );
//开始定期发送“该”消息。
/*
OSAL_START_timerEx (GenericApp_TaskID、
GENERICAPP_SEND_MSG_EVT、
GENERICAPP_SEND_MSG_TIMEOUT );
*
}
#endif
中断;
默认值:
中断;
}
//释放内存
OSAL_msg_dealloc((uint8 *)MSGpkt);
//下一步
MSGpkt=(afIncomingMSGPacket_t *) osal_msg_receive (GenericApp_TaskID);
}
//返回未处理的事件
返回(事件^ SYS_EVENT_MSG);
}
//发送消息输出-此事件由计时器生成
// (在 GenericApp_Init()中设置)。
if (事件和 GENERICAPP_SEND_MSG_EVT)
{
HalAdcInit ();
HalAdcSetReference (HAL_ADC_REF_125V);
ui16Dummy = HalAdcRead (HAL_ADC_CHN_AIN7、HAL_ADC_Resolution_12);
//发送“该”消息
GenericApp_SendTheMessage();
OSAL_SET_EVENT (GenericApp_TaskID、GENERICAPP_SEND_MSG_EVT);
//设置以再次发送消息
/*
OSAL_START_timerEx (GenericApp_TaskID、
GENERICAPP_SEND_MSG_EVT、
GENERICAPP_SEND_MSG_TIMEOUT );
*
//返回未处理的事件
返回(事件^ GENERICAPP_SEND_MSG_EVT);
}
#if defined (IAR_ARMCM3_LM)
//接收来自 RTOS 队列的消息
if (事件和 GENERICAPP_RTOS_MSG_EVT)
{
//处理来自 RTOS 队列的消息
GenericApp_ProcessrtosMessage();
//返回未处理的事件
返回(事件^ GENERICAPP_RTOS_MSG_EVT);
}
#endif
//丢弃未知事件
返回0;
}
静态空 GenericApp_ProcessZDOMsgs( zdoIncomingMsg_t *inMsg )
{
switch ( inMsg->clusterID )
{
Case End_Device_Bind_rsp:
if ( ZDO_ParseBindRsp( inMsg )=ZSuccessess )
{
//光 LED
HalLedSet (HAL_LED_4、HAL_LED_MODE_ON);
}
#if defined (blink_LEDs)
其他
{
//闪存 LED 以显示故障
HalLedSet (HAL_LED_4、HAL_LED_MODE_FLASH);
}
#endif
中断;
案例匹配_DESC_rsp:
{
ZDO_ActiveEndpointRsp_t *PRSP = ZDO_ParseEPListRsp( inMsg );
if (减贫战略文件)
{
if ( PRSP--> STATUS =ZSuccessess && PRSP--> cnt )
{
GenericApp_DstAddr.addrMode =(afAddrMode_t) Addr16位;
GenericApp_DstAddr.addr.shortAddr = PRSP->nwkAddr;
//获取第一个端点,可以更改以搜索端点
GenericApp_DstAddr.endpoint = PRSP->epList[0];
#if defined (ENDDEVICE)(如果已定义)
OSAL_START_timerEx (GenericApp_TaskID、
GENERICAPP_SEND_MSG_EVT、
GENERICAPP_SEND_MSG_TIMEOUT);
#endif
//光 LED
HalLedSet (HAL_LED_4、HAL_LED_MODE_ON);
}
OSAL_mem_free ( PRSP );
}
}
中断;
}
}
静态空 GenericApp_HandleKeys (uint8 shift、uint8 key)
{
//zAddrType_t dstAddr;
//移位用于使每个按钮/开关具有双重用途。
如果(SHIFT)
{
if (keys & HAL_key_sw_1)
{
}
if (keys & HAL_key_sw_2)
{
}
if (键& HAL_KEY_SW_3)
{
}
if (keys & HAL_key_sw_4)
{
}
}
其他
{
if (keys & HAL_key_sw_1)
{
#if defined (Switch1_bind)
//对于只有一个开关的器件,我们可以使用 SW1来模拟 SW2,
键|= HAL_KEY_SW_2;
#elif defined (Switch1_match)
//或使用 SW1为只有一个开关的器件模拟 SW4
键|= HAL_KEY_SW_4;
/*
其他
//通常,SW1会更改消息的发送速率
if ( txMsgDelay >100)(如果 txMsgDelay >100)
{
//将消息 TX 延迟减半
txMsgDelay /= 2;
}
其他
{
//重置为默认值
txMsgDelay = GENERICAPP_SEND_MSG_TIMEOUT;
}
*
#endif
}
if (keys & HAL_key_sw_2)
{
HalLedSet (HAL_LED_4、HAL_LED_MODE_OFF);
//为强制端点启动终端设备绑定请求
dstAddr.addrMode = Addr16Bit;
dstAddr.addr.shortAddr = 0x0000;//协调器
ZDP_EndDeviceBindReq (&dstAddr、NLME_GetShortAddr ()、
GenericApp_epDesc.endpoint、
GENERICAPP_PROFID、
GENERICAPP_MAX_CLUSTERSICS、(CID_t *) GenericApp_ClusterList、
GENERICAPP_MAX_CLUSTERSICS、(CID_t *) GenericApp_ClusterList、
false );
}
if (键& HAL_KEY_SW_3)
{
}
if (keys & HAL_key_sw_4)
{
HalLedSet (HAL_LED_4、HAL_LED_MODE_OFF);
//启动匹配描述请求(服务发现)
dstAddr.addrMode = AddrBroadcast;
dstAddr.addr.shortAddr = nwk_broadcast_SHORTADDR;
ZDP_MatchDescReq (&dstAddr、NWK_broadcast_SHORTADDR、
GENERICAPP_PROFID、
GENERICAPP_MAX_CLUSTERSICS、(CID_t *) GenericApp_ClusterList、
GENERICAPP_MAX_CLUSTERSICS、(CID_t *) GenericApp_ClusterList、
false );
}
}
}
/*********
*本地函数
*
/*********
*@fn GenericApp_MessageMSGCB
*
*@简短 的数据消息处理器回调。 此函数处理
* 任何传入数据-可能来自其他设备。 基于
* 在群集 ID 上、执行预期的操作。
*
*@param none
*
*@返回 无
*
静态空 GenericApp_MessageMSGCB (afIncomingMSGPacket_t *pktt)
{
交换机(pkt->clusterid)
{
案例 GENERICAPP_clusterid:
// rxMsgCount += 1; //计算此消息
HalLedSet (HAL_LED_4、HAL_LED_MODE_BLINK); //闪烁 LED
#if defined (LCD_SUPPORTED)
HalLcdWriteString ((char*) pkt->cmd.Data、HAL_LCD_LINE_1);
// HalLcdWriteStringValue(“Rcvd:”,rxMsgCount,10,HAL_LCD_LINE_2 );
#Elif Defined( WIN32 )
WPRINTSTR( pkt->cmd.Data );
#endif
中断;
}
}
/*********
*@fn GenericApp_SendTheMessage
*
*@简短 发送"消息。
*
*@param none
*
*@返回 无
*
静态空 GenericApp_SendTheMessage( void )
{
//char theMessageData[]="I am EDGENODE 12";
uint16 len= TransmitApp_MaxDataLength;
if (AF_DataRequest (&GenericApp_DstAddr、&GenericApp_epDesc、
GENERICAPP_clusterid、
len、//(byte) osal_strlen (theMessageData)+ 1、
(字节*) ui16Dummy、
GenericApp_TransID (GenericApp_TransID)、
AF_DISCV_route、AF_DEFAULT_RADIUS )== afStatus_Success )
{
//已成功请求发送。
}
其他
{
//请求发送时出错。
}
}
您好、先生、
我正在读取 ADC (例如、 正弦波作为端器件的输入)值。
当我给协调器上的电路板加电时、它会显示 在之后发送的 MSP Desc req RSP (我认为协调器已成功加入 n/w)
这在时间结束后的几秒钟内、设备显示 Assoc CONF 失败、并且在发送数据的几分钟后未传输任何 ADC 数据。 我的代码中是否有任何错误?
COM7是 ENDDEVICE
COM18是协调员
正如我在上述帖子中提到的、我的代码是否正确、因为终端设备在不按按钮的情况下加入了 n/w、并且用于 ADC 读取和传输?
我是否可以按如下方式读取 ADC
#define PACKETSIZE 60
字节 theMessageData[PACKETSIZE];
HalAdcInit ();
HalAdcSetReference (HAL_ADC_REF_125V);
MessageData[index1]= HalAdcRead (HAL_ADC_CHN_AIN7、HAL_ADC_Resolution_12);
{
//thesMessageData[index1]=(Int16)(ADCL);
//thesMessageData[index1]|=(Int16)(ADCH << 8);
索引1++;
IF (索引1 =>(PACKETSIZE-1))
{
索引1 = 0;
ADCCON1 &=~HAL_ADC_EOC; //禁用 ADC 转换
}
我认为没有使用彩色的行,因为 functoin HalAdcRead() wil 返回相同的操作值。
您好、先生、
我使用的是来自 cc2538基础固件的 UART 轮询示例,用于 UART1,在终端中,我没有看到任何输出有误
#define Example_PIN_UART_RXD GPIO_PIN_0
#define Example_PIN_UART_TXD GPIO_PIN_1
#define Example_GPIO_base GPIO_A_base
内部
main (空)
{
char cThisChar;
SysCtrlClockSet (false、false、SYS_CTRL_SYSDIV_32MHz);
SysCtrlIOClockSet (SYS_CTRL_SYSDIV_32MHz);
SysCtrlPeripheralEnable (SYS_CTRL_Periph_UART1);
UARTDisable (UART1_base);
UARTIntDisable (UART1_BASE、0x1FFF);
UARTClockSourceSet (UART1_base、UART_CLOCK_PIOSC);
IOCPinConfigPeriphOutput (example_GPIO_base、example_PIN_UART_TXD、IOC_MUX_OUT_SEL_UART1_TXD);
GPIOPinTypeUARTOutput (example_GPIO_base、example_PIN_UART_TXD);
IOCPinConfigPeriphInput (Example_GPIO_base、Example_PIN_UART_RXD、IOC_UARTRXD_UART1);
GPIOPinTypeUARTInput (Example_GPIO_base、Example_PIN_UART_RXD);
UARTConfigSetExpClk (UART1_base、SysCtrlClockGet ()、115200、
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
UARTEnable (UART1_BASE);
UARTCharPut (UART1_base、'!');
操作
{
cThisChar = UARTCharGet (UART1_BASE);
UARTCharPut (UART1_base、cThisChar);
}
while ((cThisChar!='\n')&&(cThisChar!='\r\n');
UARTCharPut (UART1_base、'@');
while (1)
{
}
}
谢谢主席先生,
我使用的是 ZStack mesh hello world 示例而不是 ZNP。
如图所示,我可以确认它是否正确。
ADC 读数
if (事件和 GENERICAPP_SEND_MSG_EVT)
{
HalAdcInit ();
HalAdcSetReference (HAL_ADC_REF_125V);
ui16Dummy = HalAdcRead (HAL_ADC_CHN_AIN6、HAL_ADC_Resolution_12);
我想通过 UART 传输数据(ui16Dummy (0至2047))。 如何传输数据