typedef struct
{
uint8_t dstAddr[8]; //!< Dst Address of RX'ed packet
int8_t rssi; //!< rssi of RX'ed packet
uint32_t absTime; //!< Absolute time to turn on Rx when passed
//!< (0 for immediate), Or Absolute time that packet was Rx
//!< when returned.
uint32_t rxTimeout; //!< Relative time in ticks from Rx start to Rx TimeOut
//!< a value of 0 means no timeout
uint8_t len; //!< length of RX'ed packet
uint8_t payload[EASYLINK_MAX_DATA_LENGTH]; //!< payload of RX'ed packet
} EasyLink_RxPacket;
请问这个payload如何在串口上打印?
Viki Shi:
需要自行添加UART功能实现部分,请参考一下这边的类似问题:e2e.ti.com/…/769042
user6254143:
回复 Viki Shi:
uart程序我写了
//#include "board.h"
#include <ti/drivers/uart/UARTCC26XX.h>
#include <ti/drivers/UART.h>
#include "stdio.h"
#include "string.h"
#include "hw_uart.h"
//#include "simple_peripheral.h"
#include "ti_drivers_config.h"
/********************************************************************** LOCAL PARAMETER*/
UART_Handle UARTHandle;
UART_Params UARTparams;
uint8_t Uart_RxTempBuf[200];GY_UartRxBufCallback GY_UartReviceDataCallback;
/********************************************************************** LOCAL FUNCTIONS*/
void Uart_WriteCallback(UART_Handle handle, void *txBuf, size_t size);
void Uart_ReadCallback(UART_Handle handle, void *rxBuf, size_t size);/********************************************************************** @fnUart_ReadCallback** @brief串口读回调** @paramhandle -> 串口通道*rxBuf -> 串口接收数据的指针*size -> 串口接收数据的长度** @returnNone.*/
void Uart_ReadCallback(UART_Handle handle, void *rxBuf, size_t size)
{ //UART_write(UARTHandle, rxBuf, size);//回显打印UART_read(handle, Uart_RxTempBuf, 200);//再次打开一个串口读GY_UartReviceDataCallback(rxBuf, size);//给app任务一个串口读回调
}/********************************************************************** @fnUart_WriteCallback** @brief串口写回调** @paramhandle -> 串口通道*txBuf -> 串口发送数据的指针*size -> 串口发送数据的长度** @returnNone.*/
void Uart_WriteCallback(UART_Handle handle, void *txBuf, size_t size)
{//
}/********************************************************************** @fnGY_UartTask_Init** @brief串口任务初始化** @paramNone** @returnNone.*/
void HwUARTInit(void)
{UART_init();//初始化模块的串口功能UART_Params_init(&UARTparams);//初始化串口参数UARTparams.baudRate = 115200;//串口波特率115200UARTparams.dataLength = UART_LEN_8;//串口数据位8UARTparams.stopBits = UART_STOP_ONE;//串口停止位1UARTparams.readDataMode = UART_DATA_BINARY;//串口接收数据不做处理UARTparams.writeDataMode = UART_DATA_BINARY;//串口发送数据不做处理UARTparams.readMode = UART_MODE_CALLBACK;//串口异步读UARTparams.writeMode = UART_MODE_CALLBACK;//串口异步写UARTparams.readEcho = UART_ECHO_OFF;//串口不回显UARTparams.readReturnMode = UART_RETURN_NEWLINE;//当接收到换行符时,回调UARTparams.readCallback = Uart_ReadCallback;//串口读回调UARTparams.writeCallback = Uart_WriteCallback;//串口写回调UARTHandle = UART_open(CONFIG_UART_0, &UARTparams); //打开串口通道UART_control(UARTHandle, UARTCC26XX_RETURN_PARTIAL_ENABLE,NULL);//允许接收部分回调UART_read(UARTHandle, Uart_RxTempBuf, 200);//打开一个串口读
}/********************************************************************** @fnGY_UartTask_Write** @brief串口写函数** @parambuf -> 需要写的数据指针*len -> 需要写的数据长度** @returnNone.*/
void HwUARTWrite(uint8_t *buf, uint16_t len)
{UART_write(UARTHandle, buf, len);
}/********************************************************************** @fnGY_UartTask_Printf** @brief串口写函数(类似系统printf)** @paramformat -> 不定参数标志位,例如%d,%s等*… -> 不定参数** @returnNone.*/
void HwUARTPrintf(const char* format, …)
{va_list arg;va_start(arg,format);uint8_t buf[200];uint16_t len;len = vsprintf((char*)buf, format, arg);UART_write(UARTHandle, buf, len);
}
/********************************************************************** @fnGY_UartTask_RegisterPacketReceivedCallback** @brief注册串口接收回调任务(将串口接收的数据传给app任务去处理)** @paramcallback -> 串口接收数据回调(包括数据buf及len)** @returnNone.*/
void GY_UartTask_RegisterPacketReceivedCallback(GY_UartRxBufCallback callback)
{GY_UartReviceDataCallback = callback;
}
现在就是不知道怎么将收到的数据打印在串口上
user6254143:
回复 Viki Shi:
void rxDoneCb(EasyLink_RxPacket * rxPacket, EasyLink_Status status)
{if (status == EasyLink_Status_Success){EasyLink_RxPacket rxPacket;len = rxPacket.len;memcpy(payload, rxPacket.payload, len);HwUARTPrintf("%d",payload);/* Toggle RLED to indicate RX */PIN_setOutputValue(pinHandle, CONFIG_PIN_RLED,!PIN_getOutputValue(CONFIG_PIN_RLED));}
我在这里加入了打印功能,但是出现了警告,大致意思是rxpacket在被赋值前就被引用了,而且打印的数字是个定值,并不是随机的。
现在不知道打印功能应该加在哪,以及不清楚payload的值如何获取。
Viki Shi:
回复 user6254143:
可以参考下链接里的代码
user6254143:
回复 Viki Shi:
我仔细看了一下链接中的代码,发现该程序只是对uart的打印功能进行测试,并没有完成打印接收的数据功能,我还是个新手,还望大佬不吝赐教。
Viki Shi:
回复 user6254143:
目前暂无更详细的代码可提供,抱歉