完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我发现串口发送时,最多128被字节。。。HAL_UART_DMA_RX_MAX 128;#define HAL_UART_DMA_TX_MAX HAL_UART_DMA_RX_MAX
我现在想在一次发送大于128个字节改怎么操作? |
|
相关推荐
6 个讨论
|
|
Hi wengo
前面你自己也提到过了,DMA的缓存是128字节,而我们调用函数NPI_WriteTransport(“Hello”,sizeof(“Hello”)-1);其实只是把数据写入到DMA的缓冲中,并不代表已经发送完成(实际的数据是通过串口按一定的波特率一个一个输出的)。 1.DMA搬运数据时需要时间的; 2.串口发送数据也是需要时间的——这个取决于你的波特率; 3. 你这么循环写入50次,总字节 = 6*50 = 300Byte。缓冲时不够用的。因为DMA搬运数据及串口发送的速度跟不上的写入的速度(进的快,出的慢),这样你的缓存最终就会爆满,我们这边称作数据阻塞(不知道你们叫什么)。 4.我不明白你为什么要这么做: for(uint16 cnt=0;cnt<50;cnt++) [ NPI_WriteTransport("Hello",sizeof("Hello")-1); ] 5.如果你真的需要打印50个Hello,我建议你使用其他的方法。 |
|
|
|
|
|
Hi wengo
NPI_WriteTransport("Hello",sizeof("Hello")-1); while(sendOKFlag==0); ]为什么加while不能进入回调函数,一直挺在while里面。。一去掉while 就能进入发送完成的回调函数里面了?? 可能你对器件的DMA传输还不是很了解,为何加while不能进入到回调函数呢?先看看回调函数在哪里被调用: 1.OSAL.C文件中,void osal_run_system(void)有这么一个函数 Hal_ProcessPoll(); 2.点进去,可以找到 HalUARTPoll(); 3.再点进去可以找到 HalUARTPollDMA(); 4.再点进去可以找到 if ((evt != 0) && (dmaCfg.uartCB != NULL))//调用回调函数并发送事件通知 [ dmaCfg.uartCB(HAL_UART_DMA-1, evt); ] 这里调用的dmaCfg.uartCB正是你注册的回调函数。 也就是说,DMA串口传输的回调函数是放在主循环里面轮询的,你用while(sendOKFlag == 0);Hold住CPU,代码得不到执行,当然不会执行回调函数啦。 OK,我能帮你的就这么多了,深入的还是请教TI的专家吧。 |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
532 浏览 1 评论
386 浏览 1 评论
584 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
831 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
689 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
137浏览 29评论
720浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
294浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
249浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
100浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-12 02:56 , Processed in 0.916029 second(s), Total 53, Slave 47 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号