通过UART发送大量数据(DMA使用)

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
15 posts / 0 new
最后一篇
adam.stroz.
离线
最后一次露面:4小时前1周
加入:2020-05-22 07:54
通过UART发送大量数据(DMA使用)

你好,

我有一个小疑问发送很多a by UART using DMA ("UART_OP_DMA"). I tryed to send for example 450 bytes of data (char tab[450]). I recive data on terminal but only about 400 sign is correct. When i use "UART_OP_BLOCKING" everything is correct.

abowe我的测试代码的一部分:

#define size 500 char tab[size]; for(uint32_t x=0;x

和终端上的结果(在此之前,我得到了正确的400标志“B”):

'üřü<0> <0> <0>'ü<0> <0> <0> <0 <0> <0 <0 <0>“×đ@>ü<0> <0> <0> <0> <0℃孔<0℃<0℃<0 <0. <0℃<0. <0> <0>ęń

我的问题是:

我做错了什么?

设备:
PM_DIALOG.
离线
最后一次露面:3 hours 33 min ago
职员
加入:2018-02-08 11:03
嗨adam.stroz,

嗨adam.stroz,

I would recommend first checking the 6.0.14.1114\projects\target_apps\peripheral_examples\uart of the SDK. In my side, I am able to print more than 500 bytes using the uart_send_dma_example(). To do so, please check if you have the same configuration and replace the OUTPUT_STRING with your table.

谢谢,PM_DIALOG.

adam.stroz.
离线
最后一次露面:4小时前1周
加入:2020-05-22 07:54
你好,

你好,

我测试了你的榜样(用Keil,通常是我和智能赛赛工作室一起工作)。在使用我的表(500'b'符号)用我的表替换输出_string时,一切都是正确的(我在终端上返回500'b'签名)。但我的计划仍然不起作用。我注意到,当我插入时(仅用于测试饰品):

而(1);

发送指令后,一切都是正确的(我在终端上召开了500'B'签名)。

你能给我另一个指示吗?

PM_DIALOG.
离线
最后一次露面:3 hours 33 min ago
职员
加入:2018-02-08 11:03
嗨adam.stroz,

嗨adam.stroz,

Could you please clarify what is doesn’t work?

谢谢,PM_DIALOG.

adam.stroz.
离线
最后一次露面:4小时前1周
加入:2020-05-22 07:54
你好,

你好,

当然,主要问题是我在终端上的错误数据(我尝试了2个衍射终端)。我送500签名'B',但只有450个,休息标志是垃圾。当我在发送指令后停止程序时(通过Usign(1)指令)一切正常。我使用SDK的extent_perpiherial_template。

I don't know why my program send some trash to uart.

PM_DIALOG.
离线
最后一次露面:3 hours 33 min ago
职员
加入:2018-02-08 11:03
嗨adam.stroz,

嗨adam.stroz,

你使用的是任何睡眠模式吗?请在调试模式下运行它,并检查它是否陷入了断言等

谢谢,PM_DIALOG.

adam.stroz.
离线
最后一次露面:4小时前1周
加入:2020-05-22 07:54
你好,

你好,

i don't using any sleep modes.

static const sleep_state_t app_default_sleep_mode = ARCH_SLEEP_OFF;
。adv_scenario = def_add_forever,

when i run it in debug mode, program after instructionuart_send继续正常工作。

如果它很重要,我打电话uart_send有趣的user_on_connection func.

PM_DIALOG.
离线
最后一次露面:3 hours 33 min ago
职员
加入:2018-02-08 11:03
嗨adam.stroz,

嗨adam.stroz,

感谢更新。那么,你能打印正确的数据吗?

谢谢,PM_DIALOG.

adam.stroz.
离线
最后一次露面:4小时前1周
加入:2020-05-22 07:54
你好,

你好,

在这一刻不......我不知道什么是错的。也许我应该尝试在另一个项目上发送(对于前方prox_reporter)?你可以在测试板上为我测试这个简单的例子(用DMA发送我的示例数组)吗?

PM_DIALOG.
离线
最后一次露面:3 hours 33 min ago
职员
加入:2018-02-08 11:03
嗨adam.stroz,

嗨adam.stroz,

您使用的是SDK的哪个项目?我在SDK外设示例中遇到了UART项目 - 6.0.14.1114 \ Projects \ target_apps \ peripherall_examples \ uart。我在下面使用的代码段:

谢谢,PM_DIALOG.

adam.stroz.
离线
最后一次露面:4小时前1周
加入:2020-05-22 07:54
我正在使用extent_peripheral.

我正在使用来自target_apps \ template \ extent_peripheral_template的extent_peripheral_template。你能在这个项目中为我测试吗?

PM_DIALOG.
离线
最后一次露面:3 hours 33 min ago
职员
加入:2018-02-08 11:03
嗨adam.stroz,

嗨adam.stroz,

My apologies – forgot to attach the code snippet in my previous comment. I have tested in the empty_peripheral_template using UART2 block. The data is printed in the connection callback.

CFG_UART_DMA_SUPPORT和CFG_PREXTF宏也定义在项目中。

volatile bool uart_send_finished = false;volatile uint16_t data_sent_cnt = 0;静态void UART_SEND_CB(UINT16_T长度){data_sent_cnt =长度;uart_send_finished = true;void UART_SEND_DMA_EXAMPLE(UART_T * UART){#define大小500 char选项卡[size];for(Uint32_t x = 0; x 

谢谢,PM_DIALOG.

adam.stroz.
离线
最后一次露面:4小时前1周
加入:2020-05-22 07:54
你好,

你好,
我测试了你的代码,一切都是正确的。但在我的情况下,我想发送数据并继续执行下一步。所以我必须删除代码的这一部分:

而(!Uart_send_finished);

(I don't want to wait until sending is complete). When i deleted this part from your code, the same problem occurs (trash sign).

Can you delete this part of code and test ?

adam.stroz.
离线
最后一次露面:4小时前1周
加入:2020-05-22 07:54
所以最后......我解决了

所以最后......我解决了这个问题:)这足以声明阵列,

char tab[size];

作为全球。我想,在退出函数后,当我声明我的数组后,数组丢失了,但指向我提供的函数UART_SEND仍然指向表所在的内存区域。因此,程序中的其他指令可以更改此内存区域中的数据。这可能导致发送不良数据。

PM_DIALOG.
离线
最后一次露面:3 hours 33 min ago
职员
加入:2018-02-08 11:03
嗨adam.stroz,

嗨adam.stroz,

很高兴你识上你的问题,谢谢分享修复!

谢谢,PM_DIALOG.