几次尝试后,UART读取失败

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
5个帖子/ 0新
最后一篇
Ainwood87.
离线
最后一次露面:2年8个月前
加入:2017-08-21 21:10
几次尝试后,UART读取失败

我正在尝试创建一个负责从UART1串行读取的任务.I发现在调用AD_UART_READ几次后,最终ad_uart_read()将永远阻止。我正在使用USB到TTL适配器,我可以使用逻辑分析仪探测,所以我知道消息在线上出现,但ad_uart_read()仍未返回。

通过添加打印,我知道AD_UART_READ()在此行中阻止:
OS_EVENT_WAIT(设备 - > BUS_DATA-> EVENT_READ,超时);

有关我如何配置UART的详细信息(UART1用于通信,用于PRINTF的UART2)

在Main.c:
static const gpio_config gpio_cfg [] = {
HW_GPIO_PINCONFIG(HW_GPIO_PORT_1,HW_GPIO_PIN_3,输出,UART2_TX,FALSE),
hw_gpio_pinconfig(hw_gpio_port_2,hw_gpio_pin_3,输入,uart2_rx,false),
hw_gpio_pinconfig(hw_gpio_port_3,hw_gpio_pin_2,输出,uart_tx,false),
hw_gpio_pinconfig(hw_gpio_port_3,hw_gpio_pin_3,输入,uart_rx,false),
hw_gpio_pinconfig_end.
};

..
hw_gpio_configure(gpio_cfg);

在custom_config_qspi.h中:

#define config_retarget.
#define config_retarget_uart hw_uart2.

#define dg_configuart_adapter(1)

//#define dg_configuart_software_fifo(1)
#define dg_configuart_rx_circular_dma(1)

#define dg_configuart1_rx_circular_dma_buf_size(100)
//#定义dg_configuart1_software_fifo_size(100)

请注意,我尝试在使用软件FIFO和DMA之间切换,我可以获得相同的行为。

在platform_device.h:
UART_BUS(UART1,Serial1,HW_UART_BAUDRATE_19200,HW_UART_DATABITS_8,HW_UART_PARITY_NONE,
hw_uart_stopbits_1,1,1,hw_dma_channel_1,hw_dma_channel_0,0,0)

UART_BUS(UART2,Serial2,HW_UART_BAUDRATE_115200,HW_UART_DATABITS_8,HW_UART_PARITY_NONE,
HW_UART_STOPBITS_1,0,1,HW_DMA_CHANNEL_3,HW_DMA_CHANNEL_2,0,0)

在mytask.c:

ad_uart_init();

UART_DEVICE UART = AD_UART_OPEN(SERIAL1);

为了 (;;) {
int len = ad_uart_read()
......
}

关键词:
设备:
PM_DIALOG.
离线
最后一次露面:10小时18分钟前
职员
加入:2018-02-08 11:03
嗨Ainwood87,

嗨Ainwood87,

我相信您经历的问题是由于使用延长睡眠而导致。当您使用扩展睡眠时,设备不会通过UART RX引脚的流量自动唤醒。仅从睡眠唤醒的这种功能仅从UART2使用CTS引脚来支持。UART1不支持任何流量控制,因此无法在不使用位的情况下从睡眠中唤醒。我们通过测试您发布的代码来复制您的问题,我们得出结论,您代码停止的原因是睡眠配置问题。强烈建议更改缓冲区大小,以便比DMA圆形缓冲区大小为1。

意见建议:

  1. 使用UART时,请禁用扩展睡眠模式。UART不适用于节省电量。
  2. 请使用UART2为您的数据并使用CTS唤醒
  3. 有一个单独的引脚以唤醒您的系统,以便在通过UART发送数据之前唤醒您的设备。

谢谢,PM_DIALOG.

Ainwood87.
离线
最后一次露面:2年8个月前
加入:2017-08-21 21:10
嗨对话框,

嗨对话框,

您能解释如何配置电路板以使用CTS引脚吗?是我需要手动分配给GPIO引脚的东西,或者内置于USB连接中?

Ainwood87.
离线
最后一次露面:2年8个月前
加入:2017-08-21 21:10
嗨对话框,

嗨对话框,

您提到FIFO大小应为1小于DMA圆形缓冲区大小。但是,当我尝试使用两个选项启用的选项时,我收到以下警告:
#error uart2无法配置为同时使用软件FIFO和圆形DMA FIFO

这似乎与您的建议相矛盾。

PM_DIALOG.
离线
最后一次露面:10小时18分钟前
职员
加入:2018-02-08 11:03
嗨Ainwood87,

嗨Ainwood87,

根据DA14680数据表,UART2使用16个字节深度的FIFO实现硬件流控制,因此您无法将其配置为软件UART。只有UART1支持软件实现。对于完整的UART功能,您应该在RTS - P1_5和CTS - P1_6之间添加跳线(J15)。强烈建议看看5.3.4 HCI / UART标题(J15)段落的«DA1468X / DA1510x Prodevelopment Kit UM-B-060»用户手册文档。请注意,CTS引脚通过跳线J8与K1按钮复用。然后,您应该在periph_init()函数中配置CTS引脚,如下所示:

hw_gpio_configure_pin(hw_gpio_port_1.hw_gpio_pin_6.hw_gpio_mode_input_pullup.

hw_gpio_func_uart2_ctsn.,1);

谢谢,PM_DIALOG.