大家有没有做过CC2640之间的串口通信的实验,或者同一个芯片自己TX传自己的RX。最近这个问题就是搞不通。
现在我把实验简化到同一个CC2650芯片的UART的TX和RX连续收发,TX端发电脑的RX能收到,RX端收电脑的TX也能收到,互相连一块就是不通,各自连回电脑的线又通,互相连回来又不通。所以我基本可以排除软件问题。配置UART的问题我也查过了(附下面)。我注意到互相连的时候,write callback能被运行,但信号没收到,我用的是smartRF6开发板接电脑USB电源,我想是不是RX的上拉电阻太小,自己的TX电压拉不下来?
另外,有人建议我用HWREG()来测试下硬件还是软件的问题,想请问大家HWREG()怎么用?有什么资料能学习下。
//UART INIT
UART_Params_init(&SbpUartParams);
SbpUartParams.baudRate = 115200;
SbpUartParams.writeDataMode = UART_DATA_BINARY;
SbpUartParams.readDataMode = UART_DATA_BINARY;
SbpUartParams.writeMode = UART_MODE_CALLBACK;
SbpUartParams.writeCallback = writeCallback;
SbpUartParams.readMode = UART_MODE_CALLBACK;
SbpUartParams.readCallback = readCallback;
SbpUartParams.readEcho= UART_ECHO_OFF;
SbpUartHandle = UART_open(CC2650_UART0, &SbpUartParams);
UARTHS_slave_init();
Albin Zhang:
要是怀疑物理问题,拿示波器抓一下就明白了吧。特别是你说的驱动力问题,看一下就知道了。
BR.AZ
Kai Zhao:
回复 Albin Zhang:
谢谢,我用示波器观察了果然是我说的问题。
芯片TX连自己的RX时,传数据时,低电平只拉低了不到20%,难怪收不到。换连PC的RX时能拉低80%的电平,就能正常接收到了。如果TX悬空,低电平就能拉到底了。
请问RX线的PULL UP是怎么控制的?因为我另外还设了两个PIN的INPUT用PULL UP配置,用芯片自己的GPIO OUTPUT拉低时是可以拉到底的。而且,我查CC2650EM的board.c,没发现UART 的RX的配置
PIN_Config BoardGpioInitTable[] = {
Board_LED1 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */ Board_LED2 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */ Board_LED3 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */ Board_LED4 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */ Board_KEY_SELECT | PIN_INPUT_EN | PIN_PULLUP | PIN_HYSTERESIS, /* Button is active low */ Board_KEY_UP | PIN_INPUT_EN | PIN_PULLUP | PIN_HYSTERESIS, /* Button is active low */ Board_KEY_DOWN | PIN_INPUT_EN | PIN_PULLUP | PIN_HYSTERESIS, /* Button is active low */ Board_KEY_LEFT | PIN_INPUT_EN | PIN_PULLUP | PIN_HYSTERESIS, /* Button is active low */ Board_KEY_RIGHT | PIN_INPUT_EN | PIN_PULLUP | PIN_HYSTERESIS, /* Button is active low */ Board_3V3_EN | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL, /* 3V3 domain off initially */ Board_LCD_MODE | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL, /* LCD pin high initially */ Board_LCD_RST | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL, /* LCD pin high initially */ Board_LCD_CSN | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL, /* LCD pin high initially */ Board_UART_TX | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL, /* UART TX pin at inactive level */ PIN_TERMINATE /* Terminate list */};
我想知道RX怎么改动下可以修复这个bug,如果像我现在RX肯定不悬空,是否可以去掉RX的PULL UP?还有在哪设置呢?
user4726549:
您好!
我最近也在学习CC26XX的串口程序~~ 官方的例程感觉太乱了,光是初始化那段就看的好晕~~您能给我指导下吗?我要写个自己的串口程序~都不知道怎么下手了~
能给我看下你的完整的串口程序就最好不过了~~嘻嘻