完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32串口怎么用DMA接收不定长数据,求大神点播
1. 网上查到,空闲中断+DMA可以接收不定长数据,但是看了好多,只是知道空闲中断里面可以得到缓存器剩余数据量,从而可以求出已经接收的数据量。然后就没了,那么怎么实现不定长接收呢? 2. 缓存区并不能从头刷新,比如说,9个数据量的缓存,我传4个数,那么我下次传6个,这时候缓存器并不能从新从第一位开始刷新,而是接着存储,然后数据就乱了,所以并没有实现不定长接收。我想要不管传输多长字节都可以让缓存区从头开始缓存,这样并不知道怎么实现期待大神 3. 或者说我的思路是错的,DMA接收不定长数据应该用别的方式,有懂的大神帮忙说一下 |
|
相关推荐
5个回答
|
|
串口就是串口,串口不能使用DMA传输的,DMA传输要求部件能接管CPU的总线
|
|
1 条评论
|
|
1.进入空闲中断后,先关闭DMA
2.读取数据长度, 3.重新设置重新设置DMA传输数据数量 4.开启DMA if(USART_GetITStatus(USART6, USART_IT_IDLE) != RESET)//如果为空闲总线中断 { USART_ReceiveData(USART6); USART_ClearITPendingBit(USART6, USART_IT_IDLE); DMA_Cmd(DMA2_Stream2, DISABLE);//关闭DMA,防止处理其间有数据 usart6_dma_receive_len = USART6_DMA_RCE_MAX_LENGHT - DMA_GetCurrDataCounter(DMA2_Stream2); //数据长度 usart6_dma_receive_flg = 0x01; DMA_SetCurrDataCounter(DMA2_Stream2, USART6_DMA_RCE_MAX_LENGHT); //重新设置DMA传输数据数量 DMA_Cmd(DMA2_Stream2, ENABLE);//开启DMA } |
|
|
|
1 DMA收发数据不一定非要用中断吧?DMA本身就是和程序无关的,设置好了硬件自动传输。
2 首先你确定不定长数据最大可能长度,按这个长度设置数据长度。然后,DMA读取时用SR寄存器空标志控制。 另外,数据传输顺序的问题,不知道你用的是数组还是指针,一般来说都没有问题,传输的时候要用地址控制。指针方便些。 3 如果数据太大,你有必要用外部存储器 |
|
|
|
可以一个字节一个字节的接收,并判断是不是一帧完了
|
|
|
|
也可以使用串口的空闲中断进行处理
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2093 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1931 浏览 3 评论
4526 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2076 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2587 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 10:04 , Processed in 0.934899 second(s), Total 92, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号