我使用CC3220SF中ti驱动uartecho例程。自己修改了sysconfig中uart驱动的Rx和Tx引脚。然后我创建了Txbuf和Rxbuf两个缓冲区,并用杜邦线把RX引脚与Tx引脚相连。以此实现自发自收的目的。
1.我使用uart_write()发送数据给Rx引脚,发现uart_read的始终不能读取到数据?
代码如下:
/*
* ======== uartecho.c ========
*/
#include <stdint.h>
#include <stddef.h>
/* Driver Header files */
#include <ti/drivers/GPIO.h>
#include "UART.h"
/* Driver configuration */
#include "ti_drivers_config.h"
#include "unistd.h"
/*
* ======== mainThread ========
*/
void *mainThread(void *arg0)
{
UART_Handle uart;
UART_Handle uart1;
UART_Params uartParams;
uint8_t TX_data[8] = {0x01,0x03,0x00,0x64,0x00,0x01,0xc5,0xd5};
uint8_t RX_data[8] = {0};
uint8_t count = 0;
/* Call driver init functions */
GPIO_init();
UART_init();
/* Configure the LED pin */
GPIO_setConfig(CONFIG_GPIO_LED_0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
/* Turn on user LED */
GPIO_write(CONFIG_GPIO_LED_0, CONFIG_GPIO_LED_ON);
/* Create a UART with data processing off. */
UART_Params_init(&uartParams);
uartParams.readMode = UART_MODE_BLOCKING;
uartParams.writeMode = UART_MODE_BLOCKING;
// uartParams.writeTimeout = 1000;
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_RETURN_FULL;
uartParams.readTimeout = 1000;
uartParams.baudRate = 9600;
uartParams.dataLength = UART_LEN_8;
uartParams.stopBits = UART_STOP_ONE;
uartParams.parityType = UART_PAR_NONE;
uartParams.readEcho = UART_ECHO_OFF;
uart = UART_open(CONFIG_UART_0, &uartParams);
if (uart == NULL) {
/* UART_open() failed */
while (1);
}
uart1 = UART_open(CONFIG_UART_1, &uartParams);
if (uart1 == NULL) {
/* UART_open() failed */
while (1);
}
/* Loop forever echoing */
while (1) {
UART_write(uart1, TX_data, 8);
count = UART_read(uart1, RX_data, 8);
if(count > 0)
{
GPIO_toggle(CONFIG_GPIO_LED_0);
}
}
}
Kevin Qiu1:
/*!*@briefFunction that reads data from a UART with interrupt enabled.**%UART_read() reads data from a UART controller. The destination is specified*by \a buffer and the number of bytes to read is given by \a size.**In #UART_MODE_BLOCKING, %UART_read() blocks task execution until all*the data in buffer has been read.**In #UART_MODE_CALLBACK, %UART_read() does not block task execution.*Instead, a callback function specified by UART_Params::readCallback*is called when the transfer is finished.*The callback function can occur in the caller's context or in HWI or SWI*context, depending on the device-specific implementation.*An unfinished asynchronous read operation must always be canceled using*UART_readCancel() before calling UART_close().**%UART_read() is mutually exclusive to UART_readPolling(). For an opened*UART peripheral, either %UART_read() or UART_readPolling() can be used,*but not both.**@sa UART_readPolling()**@paramhandleA #UART_Handle returned by UART_open()**@parambufferA pointer to an empty buffer to which*received data should be written**@paramsizeThe number of bytes to be written into buffer**@return Returns the number of bytes that have been read from the UART,*#UART_STATUS_ERROR on an error.*/ extern int_fast32_t UART_read(UART_Handle handle, void *buffer, size_t size);单步运行看程序是否可以执行到UART_read部分,另外看下数据是否已经发出
Lease:
回复 Kevin Qiu1:
数据已经发出了,Rx上也有数据,程序页执行到了uart_read部分。
逻辑分析仪看到的数据如下
程序运到uart_read时程序卡在汇编语言阶段
Kevin Qiu1:
回复 Lease:
看起来是没有使能中断
Lease:
回复 Kevin Qiu1:
使用的是sysconfig配置Rx和Tx引脚,并没有看到引脚配置使能中断,我需要例外定义uart引脚使能中断吗?该如何使能中断?
Kevin Qiu1:
回复 Lease:
看下C:/ti/simplelink_cc32xx_sdk_4_20_00_07/docs/tidrivers/doxygen/html/_u_a_r_t_8h.html中的用法示例
Lease:
回复 Kevin Qiu1:
我测试过了uart的两个例子都实验够了,能够从终端读取数据数据,并在终端显示。
但是,如果我使用另外一块CC3220SF开发版发送数据,接收端还是不能够读取到数据。
Lease:
回复 Lease:
我发现uart _read只能接收我在terminal中输入的数据,如果我给Rx添加输入波形,发现uart_read函数没有响应
Kevin Qiu1:
回复 Lease:
用两块板子一个发送另一个接收可以收到数据吗
Lease:
回复 Kevin Qiu1:
如果是终端输入的话,可以接收到数据。
我现在遇到的问题跟这个帖子是一样的。
e2echina.ti.com/…/130825
Lease:
回复 Lease:
e2e.ti.com/…/785504
e2echina.ti.com/…/367962
但并没有解决我现在遇到的问题