4458|13

411

帖子

9

TA的资源

一粒金砂(高级)

楼主
 

stm32串口怎么用DMA接收不定长数据 [复制链接]

 
stm32串口怎么用DMA接收不定长数据,求大神点播
1. 网上查到,空闲中断+DMA可以接收不定长数据,但是看了好多,只是知道空闲中断里面可以得到缓存器剩余数据量,从而可以求出已经接收的数据量。然后就没了,那么怎么实现不定长接收呢?
2. 缓存区并不能从头刷新,比如说,9个数据量的缓存,我传4个数,那么我下次传6个,这时候缓存器并不能从新从第一位开始刷新,而是接着存储,然后数据就乱了,所以并没有实现不定长接收。我想要不管传输多长字节都可以让缓存区从头开始缓存,这样并不知道怎么实现期待大神

3. 或者说我的思路是错的,DMA接收不定长数据应该用别的方式,有懂的大神帮忙说一下
此帖出自stm32/stm8论坛

最新回复

本帖最后由 huo_hu 于 2018-7-29 12:31 编辑 就是那个disable就行,只不过调试的时候有个时间差,实际上是没问题的,停止后dma的cnt不变化. 另外停止dma只是切断adc到dma的触发,如果adc处于连续模式adc并不会停止,你再次启动dma的时候(多通道)可能有个数据对齐的问题.  详情 回复 发表于 2018-7-29 12:29
点赞 关注(2)
 

回复
举报

862

帖子

2

TA的资源

纯净的硅(初级)

沙发
 
空闲中断+DMA   思路是对的,只是你还没有掌握精髓  有时间我分享一个
此帖出自stm32/stm8论坛

点评

那,大神,请问怎么清空DMA的缓存区?要用哪个函数或者哪种思路去清空?额,我用的是stm32标准库  详情 回复 发表于 2018-7-11 09:15
 
个人签名水不撩不知深浅 人不拼怎知输赢
 

回复

44

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
给你推荐个帖子吧,里边讲的很清楚了
STM32CUBE F407ZET6串口1通过DMA方式接收不定长数据
此帖出自stm32/stm8论坛

点评

嗯,谢谢,但是这个库为什么跟我用的不一样?功能一样么?  详情 回复 发表于 2018-7-11 08:40
 
 

回复

411

帖子

9

TA的资源

一粒金砂(高级)

4
 
gyp1 发表于 2018-7-10 22:15
给你推荐个帖子吧,里边讲的很清楚了
STM32CUBE F407ZET6串口1通过DMA方式接收不定长数据

嗯,谢谢,但是这个库为什么跟我用的不一样?功能一样么?
此帖出自stm32/stm8论坛
 
 
 

回复

411

帖子

9

TA的资源

一粒金砂(高级)

5
 
wo4fisher 发表于 2018-7-10 22:11
空闲中断+DMA   思路是对的,只是你还没有掌握精髓  有时间我分享一个

那,大神,请问怎么清空DMA的缓存区?要用哪个函数或者哪种思路去清空?额,我用的是stm32标准库
此帖出自stm32/stm8论坛

点评

清空接收可以disable掉dma然后赋值dma计数再enable,不清空也可以dma设置成循环模式记下上次结束位置就行了. 你说的那个空闲应该是串口中断,高档次的stm32才有,低端可以用定时器来实现.  详情 回复 发表于 2018-7-11 13:25
 
 
 

回复

4008

帖子

0

TA的资源

版主

6
 
本帖最后由 huo_hu 于 2018-7-11 13:31 编辑
shijizai 发表于 2018-7-11 09:15
那,大神,请问怎么清空DMA的缓存区?要用哪个函数或者哪种思路去清空?额,我用的是stm32标准库

清空接收可以disable掉dma然后赋值dma计数再enable,不清空也可以dma设置成循环模式记下上次结束位置就行了,下次接收结束位置之差里的数据就是.
你说的那个空闲应该是串口中断,高档次的stm32才有,低端可以用定时器来实现.
此帖出自stm32/stm8论坛

点评

这是我在空闲中断中的关闭DMA再开启,这里写着,然后调试时就不好使[attachimg]363399[/attachimg]  详情 回复 发表于 2018-7-11 14:17
[attachimg]363395[/attachimg]这是我的DMA中断  详情 回复 发表于 2018-7-11 14:10
不知道为什么,我在主函数中直接disable掉dma然后赋值dma计数再enable就不可以,在DMA中断中就行。所以就只在DMA中断中关掉DMA再开启可以达到清空并重新接收,那么我要在DMA中断以外怎么清空?  详情 回复 发表于 2018-7-11 14:07
 
 
 

回复

411

帖子

9

TA的资源

一粒金砂(高级)

7
 
闂備礁鎼悮顐﹀磿閸愯鑰块柛娑欐綑鐎氬銇勯幒鍡椾壕缂備焦顨嗛敃銏犵暦濡ゅ懎惟闁宠桨绀佹慨銈夋煟閻橀亶妾烽柛鏂跨箻椤㈡瑩骞嬮敂鑺ユ珫閻庡厜鍋撻柛鎰劤濞堬拷闂備浇鐨崱鈺佹缂傚倸绋勯幏锟�闂備胶鎳撻悺銊╂偋閻愬搫鐒垫い鎺戯攻鐎氾拷婵犵數鍋涢ˇ顓㈠礉瀹€鍕埞闁跨噦鎷�
此帖出自stm32/stm8论坛
 
 
 

回复

411

帖子

9

TA的资源

一粒金砂(高级)

8
 
闂備礁鎼悮顐﹀磿閸愯鑰块柛娑欐綑鐎氬銇勯幒鍡椾壕缂備焦顨嗛敃銏犵暦濡ゅ懎惟闁宠桨绀佹慨銈夋煟閻橀亶妾烽柛鏂跨箻椤㈡瑩骞嬮敂鑺ユ珫閻庡厜鍋撻柛鎰劤濞堬拷闂備浇鐨崱鈺佹缂傚倸绋勯幏锟�闂備胶鎳撻悺銊╂偋閻愬搫鐒垫い鎺戯攻鐎氾拷婵犵數鍋涢ˇ顓㈠礉瀹€鍕埞闁跨噦鎷�
此帖出自stm32/stm8论坛
 
 
 

回复

411

帖子

9

TA的资源

一粒金砂(高级)

9
 
闂備礁鎼悮顐﹀磿閸愯鑰块柛娑欐綑鐎氬銇勯幒鍡椾壕缂備焦顨嗛敃銏犵暦濡ゅ懎惟闁宠桨绀佹慨銈夋煟閻橀亶妾烽柛鏂跨箻椤㈡瑩骞嬮敂鑺ユ珫閻庡厜鍋撻柛鎰劤濞堬拷闂備浇鐨崱鈺佹缂傚倸绋勯幏锟�闂備胶鎳撻悺銊╂偋閻愬搫鐒垫い鎺戯攻鐎氾拷婵犵數鍋涢ˇ顓㈠礉瀹€鍕埞闁跨噦鎷�
此帖出自stm32/stm8论坛

点评

你调试一下dma的CMAR是不是也要修改,记不清楚了. 实在不行就不动dma,循环方式,CNDTR的数值和总buffersize做差就是当前数据位置  详情 回复 发表于 2018-7-11 16:03
 
 
 

回复

4008

帖子

0

TA的资源

版主

10
 
闂備礁鎼悮顐﹀磿閸愯鑰块柛娑欐綑鐎氬銇勯幒鍡椾壕缂備焦顨嗛敃銏犵暦濡ゅ懎惟闁宠桨绀佹慨銈夋煟閻橀亶妾烽柛鏂跨箻椤㈡瑩骞嬮敂鑺ユ珫閻庡厜鍋撻柛鎰劤濞堬拷闂備浇鐨崱鈺佹缂傚倸绋勯幏锟�闂備胶鎳撻悺銊╂偋閻愬搫鐒垫い鎺戯攻鐎氾拷婵犵數鍋涢ˇ顓㈠礉瀹€鍕埞闁跨噦鎷�
此帖出自stm32/stm8论坛
 
 
 

回复

4008

帖子

0

TA的资源

版主

11
 
闂備礁鎼悮顐﹀磿閸愯鑰块柛娑欐綑鐎氬銇勯幒鍡椾壕缂備焦顨嗛敃銏犵暦濡ゅ懎惟闁宠桨绀佹慨銈夋煟閻橀亶妾烽柛鏂跨箻椤㈡瑩骞嬮敂鑺ユ珫閻庡厜鍋撻柛鎰劤濞堬拷闂備浇鐨崱鈺佹缂傚倸绋勯幏锟�闂備胶鎳撻悺銊╂偋閻愬搫鐒垫い鎺戯攻鐎氾拷婵犵數鍋涢ˇ顓㈠礉瀹€鍕埞闁跨噦鎷�
此帖出自stm32/stm8论坛

点评

大神,我一直不知道DMA怎么关闭或者打开,很多时候在主函数或者别的中断里执行disable语句,调试的结果显示根本就关闭不了  详情 回复 发表于 2018-7-29 10:45

赞赏

1

查看全部赞赏

 
 
 

回复

411

帖子

9

TA的资源

一粒金砂(高级)

12
 
闂備礁鎼悮顐﹀磿閸愯鑰块柛娑欐綑鐎氬銇勯幒鍡椾壕缂備焦顨嗛敃銏犵暦濡ゅ懎惟闁宠桨绀佹慨銈夋煟閻橀亶妾烽柛鏂跨箻椤㈡瑩骞嬮敂鑺ユ珫閻庡厜鍋撻柛鎰劤濞堬拷闂備浇鐨崱鈺佹缂傚倸绋勯幏锟�闂備胶鎳撻悺銊╂偋閻愬搫鐒垫い鎺戯攻鐎氾拷婵犵數鍋涢ˇ顓㈠礉瀹€鍕埞闁跨噦鎷�
此帖出自stm32/stm8论坛

点评

就是那个disable就行,只不过调试的时候有个时间差,实际上是没问题的. 另外停止dma只是切断adc到dma的触发,如果adc处于连续模式adc并不会停止,你再次启动dma的时候(多通道)可能有个数据对齐的问题.  详情 回复 发表于 2018-7-29 12:29
 
 
 

回复

4008

帖子

0

TA的资源

版主

13
 
闂備礁鎼悮顐﹀磿閸愯鑰块柛娑欐綑鐎氬銇勯幒鍡椾壕缂備焦顨嗛敃銏犵暦濡ゅ懎惟闁宠桨绀佹慨銈夋煟閻橀亶妾烽柛鏂跨箻椤㈡瑩骞嬮敂鑺ユ珫閻庡厜鍋撻柛鎰劤濞堬拷闂備浇鐨崱鈺佹缂傚倸绋勯幏锟�闂備胶鎳撻悺銊╂偋閻愬搫鐒垫い鎺戯攻鐎氾拷婵犵數鍋涢ˇ顓㈠礉瀹€鍕埞闁跨噦鎷�
此帖出自stm32/stm8论坛

点评

哦哦哦  详情 回复 发表于 2018-7-29 13:07
 
 
 

回复

411

帖子

9

TA的资源

一粒金砂(高级)

14
 
闂備礁鎼悮顐﹀磿閸愯鑰块柛娑欐綑鐎氬銇勯幒鍡椾壕缂備焦顨嗛敃銏犵暦濡ゅ懎惟闁宠桨绀佹慨銈夋煟閻橀亶妾烽柛鏂跨箻椤㈡瑩骞嬮敂鑺ユ珫閻庡厜鍋撻柛鎰劤濞堬拷闂備浇鐨崱鈺佹缂傚倸绋勯幏锟�闂備胶鎳撻悺銊╂偋閻愬搫鐒垫い鎺戯攻鐎氾拷婵犵數鍋涢ˇ顓㈠礉瀹€鍕埞闁跨噦鎷�
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
福禄克有奖直播:高精度测温赋能电子制造 报名中!
直播时间:2025年2月28日(周五)上午10:00
直播主题:高精度测温赋能电子制造
小伙伴们儿快来报名直播吧~好礼等你拿!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表