你好,
我有一个关于通过UART发送大量数据使用DMA(“UART_OP_DMA”)的小问题。例如,我试图发送450字节的数据(char tab[450])。我收到终端的数据,但只有大约400个标志是正确的。当我使用“UART_OP_BLOCKING”一切是正确的。
下面是我的部分测试代码:
#define size 500 char tab[size];(uint32_t x = 0; x <大小;x + +){选项卡(x) = ' b ';} uart_send(UART1, (const uint8_t*)tab,size,UART_OP_DMA);
在终端上的结果(在此之前我已经得到了正确的400个符号“b”):
´uŘu < 0 > < 0 > < 0 > < 0 >´u < 0 > < 0 > < 0 > < 0 > < 0 > < 0 > < 0 > < 0 >“×đ@;u < 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中,我通常与smart snippers工作室合作)。在你的例子中,当我用我的表(500 'b'符号)替换OUTPUT_STRING时,一切都是正确的(我在终端上收到500 'b'符号)。但是我的程序还是不能运行。我注意到,当我插入(仅用于测试目的):
发送指令后,一切都是正确的(我收到500 'b'在终端上签字)。
你能给我另一个指示吗?
嗨adam.stroz,
你能解释一下什么不起作用吗?
谢谢,PM_Dialog
你好,
当然,主要的问题是我收到错误的数据在终端(我尝试2不同的终端)。我发送了500个符号'b',但只收到450个,其余的符号都是垃圾。当我停止程序后发送指令(使用while(1)指令)一切工作正常。我使用SDK中的empty_perpiherial_template工作。
我不知道为什么我的程序发送一些垃圾到uart。
嗨adam.stroz,
你有使用任何一种睡眠模式吗?你能不能在调试模式下运行它,并检查它是否陷入断言等?
谢谢,PM_Dialog
你好,
我没有使用任何睡眠模式。
当我运行它在调试模式,程序后的指令uart_send继续正常工作。
如果有关系,我会打电话的uart_send函数在user_on_connection函数.
嗨adam.stroz,
谢谢你的更新。那么,你能打印正确的数据吗?
谢谢,PM_Dialog
你好,
此刻不…我不知道怎么了。也许我应该试着发送另一个项目(如ex.prox_reporter) ?您能在您的测试板上为我测试这个简单的示例(发送我的示例数组,使用DMA)吗?
嗨adam.stroz,
您使用的是SDK的哪个项目?我在UART项目中运行它,从SDK外设示例- 6.0.14.1114\projects\target_apps\peripheral_examples\ UART。我使用了下面的代码片段:
谢谢,PM_Dialog
我使用了target_apps\template\empty_peripheral_template中的empty_peripheral_template。你能在这个项目中帮我测试一下吗?
嗨adam.stroz,
我的道歉-忘记在我之前的评论中附加代码片段。我已经在empty_peripheral_template中使用UART2块进行了测试。数据在连接回调中打印。
CFG_UART_DMA_SUPPORT和CFG_PRINTF宏也在项目中定义。
谢谢,PM_Dialog
你好,
我测试了你的代码,一切都是正确的。但在我的例子中,我希望发送数据并继续执行下一步。所以我必须删除这部分代码:
(我不想等到发送完成)。当我从你的代码中删除这部分时,同样的问题发生了(垃圾符号)。
你能删除这部分代码和测试吗?
所以最后…我解决了这个问题:)声明数组就足够了,
随着全球。我认为,当我声明我的数组退出函数后,数组丢失了,但是我提供给函数uart_send的指针仍然指向表所在的内存区域。所以程序中的其他指令可以改变这个存储区的数据。这可能会导致发送错误数据。
嗨adam.stroz,
很高兴你解决了你的问题,谢谢分享解决方案!
谢谢,PM_Dialog