TI中文支持网
TI专业的中文技术问题搜集分享网站

cc2650 4线串口 无法正常工作

平台: cc2650,

SDK: 2.21.0.06

例程:uartecho_CC2650_launchxl_TI

硬件:cc2650 launchpad 1.2

连线:

boardA   RX <—–>boardB  TX

boardA   TX <—–>boardB   RX

boardA   CTS <—–>boardB   RTS

boardA   RTS <—–>boardB   CTS

配置流控方式工作:

const UARTCC26XX_HWAttrsV2 uartCC26XXHWAttrs[CC2650_LAUNCHXL_UARTCOUNT] = {{.baseAddr= UART0_BASE,.powerMngrId= PowerCC26XX_PERIPH_UART0,.intNum= INT_UART0_COMB,.intPriority= ~0,.swiPriority= 0,.txPin= Board_UART_TX,.rxPin= Board_UART_RX,
#if 0.ctsPin= PIN_UNASSIGNED,.rtsPin= PIN_UNASSIGNED,
#else.ctsPin= Board_UART_CTS,.rtsPin= Board_UART_RTS,
#endif.ringBufPtr= uartCC26XXRingBuffer[0],.ringBufSize= sizeof(uartCC26XXRingBuffer[0])}
};

const PIN_Config BoardGpioInitTable[] = {Board_UART_RX | PIN_INPUT_EN | PIN_PULLDOWN,/* UART RX via debugger back channel */Board_UART_TX | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL,/* UART TX via debugger back channel */Board_UART_CTS | PIN_INPUT_EN | PIN_PULLUP,Board_UART_RTS | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL,PIN_TERMINATE
};

2个lanunchpad一个只收,一个只发。
#define BUF_SIZE1
Void echoFxn(UArg arg0, UArg arg1)
{char input[BUF_SIZE];UART_Handle uart;UART_Params uartParams;const char echoPrompt[] = "\fEchoing characters:\r\n";/* Create a UART with data processing off. */UART_Params_init(&uartParams);uartParams.writeDataMode = UART_DATA_BINARY;uartParams.readDataMode = UART_DATA_BINARY;uartParams.readReturnMode = UART_RETURN_FULL;uartParams.readEcho = UART_ECHO_OFF;uartParams.baudRate = 115200;uart = UART_open(Board_UART0, &uartParams);if (uart == NULL) {System_abort("Error opening the UART");}//UART_write(uart, echoPrompt, sizeof(echoPrompt));/* Loop forever echoing */while (1) {UART_write(uart, &input, 1);//UART_read(uart, &input, 1);}
}

现象:

不配置流控时,使用CCS仿真,在接收处打断点,launchpad接收正常,确定接线没有问题。

当配置为流控方式时,UART_read(uart, &input, 1);无法读出数据,仿真发现,UART_write(uart, &input, 1);返回值为0,没有发送成功。阻塞在

/* Pend on semaphore and wait for Hwi to finish. */
 if (!Semaphore_pend(Semaphore_handle(&(object->writeSem)), object->writeTimeout)) {

测量CTS和RTS都为低,发现在uart_open时被UARTCC26XX_initIO置低
static bool UARTCC26XX_initIO(UART_Handle handle) 
{
...
 if(isFlowControlEnabled(hwAttrs)) {PINCC26XX_setMux(object->hPin, hwAttrs->ctsPin, IOC_PORT_MCU_UART0_CTS);PINCC26XX_setMux(object->hPin, hwAttrs->rtsPin, IOC_PORT_MCU_UART0_RTS);
 }
...
}

疑问:

1. 4线串口如何才能正常工作?有例程吗?

2. 我的4线串口配置有什么问题吗?

3. 网上资料说RTS, CTS, 空闲时应该都为高,为什么open_uart后RTS,CTS就变低了?

4. 为什么硬件没有触发中断,阻塞在Semaphore_pend


YiKai Chen:

RTS, CTS加上pull up電阻試試

Viki Shi:

例程没有,通过uartecho修改是正确的思路。
配置看着没有问题,初始化和UART功能都有了。
按照楼上建议加上上拉电阻试试吧

赞(0)
未经允许不得转载:TI中文支持网 » cc2650 4线串口 无法正常工作
分享到: 更多 (0)