为了更低功耗,cc2640的串口只会在使用时才开启,不使用时就关闭,但发现频繁的开关会导致程序死掉,直接无响应.以下是我使用的串口开关操作程序:
// 串口号
typedef enum{
UART0 = 0,
UARTCOUNT
} UARTName;
// 流控制所需的配置
static const UARTCC26XX_HWAttrsV2 s_UART_CC26XXHWAttrs[UARTCOUNT] = {
{
.baseAddr = UART0_BASE,
.powerMngrId = PowerCC26XX_PERIPH_UART0,
.intNum = INT_UART0_COMB,
.intPriority = ~0,
.swiPriority = 0,
.txPin = UART_TX,
.rxPin = UART_RX,
.ctsPin = PIN_UNASSIGNED,
.rtsPin = PIN_UNASSIGNED
}
};
// 串口目标
static UARTCC26XX_Object s_UART_CC26XXObject[UARTCOUNT];
static const UART_Config s_UART_Config[UARTCOUNT] = {
{
.fxnTablePtr = &UARTCC26XX_fxnTable,
.object = &s_UART_CC26XXObject[UART0],
.hwAttrs = &s_UART_CC26XXHWAttrs[UART0]
},
};
// 串口句柄
static UART_Handle s_UART_Handle;
// 串口参数
static UART_Params s_UART_Params;
开串口:
UART_Params_init(&s_UART_Params);
// 参数设置
s_UART_Params.baudRate = 57600;
s_UART_Params.writeDataMode = UART_DATA_BINARY;
s_UART_Params.readMode = UART_MODE_CALLBACK;
s_UART_Params.readDataMode = UART_DATA_BINARY;
s_UART_Params.readCallback = UART_ReadCallback;
// 打开串口
s_UART_Handle = s_UART_Config[0].fxnTablePtr->openFxn((UART_Handle)&s_UART_Config[0], &s_UART_Params);
//启动串口局部返回功能为了能在串口接收到数据时及时进回调函数如果没有这条语句将会在缓冲区满时才进入。
s_UART_Config[0].fxnTablePtr->controlFxn(s_UART_Handle, UARTCC26XX_CMD_RETURN_PARTIAL_ENABLE, NULL);
// 开始第一次的读取等待
g_UART_WantedRxBytes = UART_MAX_NUM_RX_BYTES;
UART_Receive(g_UART_RxBuf, g_UART_WantedRxBytes);
关串口:
s_UART_Config[0].fxnTablePtr->readCancelFxn(s_UART_Handle);
delay_ms(10);
// 关闭串口
s_UART_Config[0].fxnTablePtr->closeFxn(s_UART_Handle);