OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2178|回复: 0

DMA 在初始化的时候应该要注意的一点

[复制链接]

13

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
431
金钱
431
注册时间
2017-9-24
在线时间
81 小时
发表于 2019-4-12 15:54:29 | 显示全部楼层 |阅读模式
本帖最后由 gongzq666 于 2019-4-13 16:59 编辑

在使用stm32f103zet6的时候    应该要注意在DMA的环节  初始化DMA的时候  应该将总线延时5毫秒左右  待总线上的DMA稳定的时候才能进一步底下的操作。至于其他的问题,在下面的学习中  如果遇到  比较关键的问题的时候  我会在下面继续补充出来  供大家一起学习参考:-)

还有就是发现  在声明一下的数组的时候  最好将它编程全局变量  否则就会出现死循环   不相信的话可以将一下的程序放进main函数中 可以试试:
u8 SendBuff[SEND_BUF_SIZE];        //发送数据缓冲区
const u8 TEXT_TO_SEND[]={"ALIENTEK WarShip STM32F1 DMA 串口实验"};         


这个问题我也不知道为什么  先记着 :-)  谁知道的话可以在底下留言哦。
回复上面的问题:因为我在main函数里面声明的较大的数组,而在stm32f10x提供的启动文件中,它的栈预设的大小是0x0000 0400  所以它的栈的大小只有1k,如果想要解决的话  就在启动文件当中修改这个栈的大小,使它能够足够容纳这么大的局部变量。至此这个问题就能够解决了。  还是很谢谢论坛里面的大佬的帮助的。。。
在main函数中声明的数组在编译器进行编译的时候并不会提前分配好内存,它只在启动文件中的栈中存储,因为函数中声明的变量作为局部变量,在程序跳转出函数以后,这个函数中的所有变量在栈中就会释放,就不会存在 ,只有将其定义为全局变量以后,在编译器编译过后就会提前分配好这块的内存,变量的大小不会受到设置的栈的大小的影响。

DMA如果还遇到问题我也会在底下列出来的:-)   大家一起学习,共同进步!!!



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 16:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表