OpenEdv-开源电子网

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

有人来一起吐槽一下STM32F7这款芯片吗

[复制链接]

10

主题

32

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2020-5-13
在线时间
21 小时
发表于 2020-12-7 17:29:35 | 显示全部楼层 |阅读模式
最近用stm32f7这款芯片做了个项目,项目对速度的要求很高,用了很多DMA,然后就是各种踩坑。坑1:移植UCOS时,需要关掉Lazy Stackin功能,这个可以简单的理解成FPU的硬件出入栈开关,关掉这个功能后,进中断时不能对FPU寄存器进行现场保护,这意味着,你不能在中断中计算浮点数,否则会影响到主程序中的浮点变量。造成1.1+1.1不等于2.2的问题。。。
坑2:Cache功能,这个功能是最搞人的。我的项目中用了很多DMA,这个功能会影响内核读取数据DMA,找这个问题找了我半个月。我的项目中还用了F7的LTDC功能,LTDC用又了DMA2D功能,现在屏幕时不时闪一下(重影),关了Cache就不闪了,我严重怀疑还是Cache影响了我屏幕的显存数据,但是又找不到解决办法(感觉项目要凉了)。
坑3:HALL库,传说HALL库让调驱动更简单了,但我觉得反而增加了程序的调试难度。比方说串口接收的回调,我使用115200波特率,从中断到应用层的回调函数,不知经过多少层的调用才能来到回调函数,然后我还要再回调中做一些保存串口数据的操作,完犊子,第一个数据没存完,第二个数据发过来了,一个串口接收让我的CPU满负载了,这不是笑话吗。最后我还是用直接操作寄存器的方法来做的。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

84

帖子

1

精华

高级会员

Rank: 4

积分
666
金钱
666
注册时间
2013-10-21
在线时间
88 小时
发表于 2020-12-8 08:07:39 | 显示全部楼层
还是太年轻,关掉D-Cache,只开I-Cache好了,HAL库现在也可以用户自己写驱动啊,串口接收不行就自己写吧,不过重写的话发送接收都需要改,你可以考虑看看ARM的RTE环境的一些外设操作接口
回复 支持 反对

使用道具 举报

10

主题

32

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2020-5-13
在线时间
21 小时
 楼主| 发表于 2020-12-8 14:16:13 | 显示全部楼层
旮旯旭 发表于 2020-12-8 08:07
还是太年轻,关掉D-Cache,只开I-Cache好了,HAL库现在也可以用户自己写驱动啊,串口接收不行就自己写吧,不 ...

我试过关D-Cache,但是关了速度太慢了,和都关了没啥区别
回复 支持 反对

使用道具 举报

4

主题

84

帖子

1

精华

高级会员

Rank: 4

积分
666
金钱
666
注册时间
2013-10-21
在线时间
88 小时
发表于 2020-12-8 14:28:11 | 显示全部楼层
yf530030302 发表于 2020-12-8 14:16
我试过关D-Cache,但是关了速度太慢了,和都关了没啥区别

DMA启用信号量来限制同时访问数量试试,你同时开启太多DMA通道的缘故?
回复 支持 反对

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2020-12-8 15:16:48 | 显示全部楼层
H7没了BitBand是最大的麻烦
回复 支持 反对

使用道具 举报

0

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2020-5-21
在线时间
58 小时
发表于 2020-12-8 15:31:54 | 显示全部楼层
有一个最简单的方法,在MPU里面把一段内存区域设成无Cache保护就好了,把DMA需要的内存变量都定义到那个内存区域。
回复 支持 反对

使用道具 举报

86

主题

567

帖子

0

精华

高级会员

Rank: 4

积分
825
金钱
825
注册时间
2014-9-30
在线时间
139 小时
发表于 2020-12-8 15:58:16 | 显示全部楼层
yf530030302 发表于 2020-12-8 14:16
我试过关D-Cache,但是关了速度太慢了,和都关了没啥区别

俺 只懂 串口 。。【第一个数据没存完,第二个数据发过来了,一个串口接收让我的CPU满负载了,】

这只能说明:你的 串口通信 【总体协议、设计不良】。过份依赖 单一字节 。。

你必须 做出 总体协议改进。。。再有 F7的 CPU 400Mhz 其指令周期 也是

几个纳秒计算,115200的 波特率 收完 一个字节 也要 86.8 微秒 。及时算
其一半时间 也有43微秒 对应 几个纳秒的指令周期,还算是 足够应付了 。。
回复 支持 反对

使用道具 举报

10

主题

32

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2020-5-13
在线时间
21 小时
 楼主| 发表于 2020-12-8 16:07:01 | 显示全部楼层
旮旯旭 发表于 2020-12-8 14:28
DMA启用信号量来限制同时访问数量试试,你同时开启太多DMA通道的缘故?

我有两个DMA,一个是SPI的DMA1,一个是TF卡的DMA2,还有一个应该算是LTDC的DMA2D,不是同一个DMA应该不会有问题吧
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-13 17:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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