你好,
我对使用DMA(“UART_OP_DMA”)通过UART发送大量数据的问题。我试图发送例如450字节的数据(char选项卡[450])。我在终端上的数据,但只有约400个符号是正确的。当我使用“uart_op_blocking”时,一切都是正确的。
abowe我的测试代码的一部分:
#define size 500 char选项卡[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>ęń
我的问题是:
我做错了什么?
设备:
嗨adam.stroz,
我建议首先检查SDK的6.0.14.1114 \ projects \ target_apps \ peripheral_examples \ uart。在我身边,我能够使用UART_SEND_DMA_EXAMPLE()打印超过500个字节的字节。为此,请检查您是否具有相同的配置并使用表替换output_string。
谢谢,PM_DIALOG.
你好,
我测试了你的榜样(用Keil,通常是我和智能赛赛工作室一起工作)。在使用我的表(500'b'符号)用我的表替换输出_string时,一切都是正确的(我在终端上返回500'b'签名)。但我的计划仍然不起作用。我注意到,当我插入时(仅用于测试饰品):
发送指令后,一切都是正确的(我在终端上召开了500'B'签名)。
你能给我另一个指示吗?
嗨adam.stroz,
你能澄清什么是不起作用的吗?
谢谢,PM_DIALOG.
你好,
当然,主要问题是我在终端上的错误数据(我尝试了2个衍射终端)。我送500签名'B',但只有450个,休息标志是垃圾。当我在发送指令后停止程序时(通过Usign(1)指令)一切正常。我使用SDK的extent_perpiherial_template。
我不知道为什么我的程序向UART发送一些垃圾。
嗨adam.stroz,
你使用的是任何睡眠模式吗?请在调试模式下运行它,并检查它是否陷入了断言等
谢谢,PM_DIALOG.
你好,
我不使用任何睡眠模式。
当我以调试模式运行时,指令后的程序UART_SEND.继续正常工作。
如果它很重要,我打电话UART_SEND.有趣的user_on_connection func.。
嗨adam.stroz,
感谢更新。那么,你能打印正确的数据吗?
谢谢,PM_DIALOG.
你好,
在这一刻不......我不知道什么是错的。也许我应该尝试在另一个项目上发送(对于前方prox_reporter)?你可以在测试板上为我测试这个简单的例子(用DMA发送我的示例数组)吗?
嗨adam.stroz,
您使用的是SDK的哪个项目?我在SDK外设示例中遇到了UART项目 - 6.0.14.1114 \ Projects \ target_apps \ peripherall_examples \ uart。我在下面使用的代码段:
谢谢,PM_DIALOG.
我正在使用来自target_apps \ template \ extent_peripheral_template的extent_peripheral_template。你能在这个项目中为我测试吗?
嗨adam.stroz,
我的道歉 - 忘了在我以前的评论中附加代码段。我已经使用UART2块在empty_peripheral_template中进行了测试。数据在连接回调中打印。
CFG_UART_DMA_SUPPORT和CFG_PREXTF宏也定义在项目中。
谢谢,PM_DIALOG.
你好,
我测试了你的代码,一切都是正确的。但在我的情况下,我想发送数据并继续执行下一步。所以我必须删除代码的这一部分:
(我不想等到发送完成)。当我从代码中删除此部件时,发生相同的问题(垃圾符号)。
您能删除这部分代码和测试吗?
所以最后......我解决了这个问题:)这足以声明阵列,
作为全球。我想,在退出函数后,当我声明我的数组后,数组丢失了,但指向我提供的函数UART_SEND仍然指向表所在的内存区域。因此,程序中的其他指令可以更改此内存区域中的数据。这可能导致发送不良数据。
嗨adam.stroz,
很高兴你识上你的问题,谢谢分享修复!
谢谢,PM_DIALOG.