搜索
查看: 4593|回复: 9

[已解决] 有人在调试STM32F1的时候被硬件I2C坑了吗?为毛一直超时?

[复制链接]

该用户从未签到

2

主题

9

帖子

0

蝴蝶豆

初级会员

最后登录
2021-1-29
发表于 2017-9-16 14:23:02 | 显示全部楼层 |阅读模式
本帖最后由 原同学 于 2017-9-16 14:55 编辑

最近在做一个可穿戴应用,因为ATMEGA328刷屏太慢卡顿明显遂换STM32F103C8T6。
电路比较简单,PA0-3是触摸按键,CubeMX中配置为EXTI0-3;SPI1用于与字库芯片通信,片选是PA4;I2C1上挂有DS3231、BMP280、SSD1306驱动的OLED;串口接ST-Link的VCP,SWD调试,系统只有高速时钟使用了外部8M晶振。
现在问题是操作OLED和DS3231有问题,单步发现是超时导致出错
代码在 http://github.com/XAS-712/MZY7-ZeroWatchProject
麻烦各路大佬帮忙看看是怎么回事,实在不行就换F072C8T6,手里还有两片
还有,新建了个工程读写24C02跟OLED数据寄存器一样的地址,没有任何问题,出错就重新初始化,没作更进一步防爆处理,如果需要稍后把这个工程放上来

因为考虑使用DMA,所以尽量不考虑软件模拟。上面那个程序应该怎么改才能正常运行?
回复

使用道具 举报

该用户从未签到

3

主题

1002

帖子

363

蝴蝶豆

版主

最后登录
2021-4-15
发表于 2017-9-16 16:06:36 | 显示全部楼层
我就不说其他的了,模拟走起!!!
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

9

帖子

0

蝴蝶豆

初级会员

最后登录
2021-1-29
 楼主| 发表于 2017-9-16 16:30:45 | 显示全部楼层
MrJiu 发表于 2017-9-16 16:06
我就不说其他的了,模拟走起!!!

希望能用硬件的。模拟的好像不能Level3优化,并且不能DMA
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

1002

帖子

363

蝴蝶豆

版主

最后登录
2021-4-15
发表于 2017-9-16 17:42:57 | 显示全部楼层
原同学 发表于 2017-9-16 16:30
希望能用硬件的。模拟的好像不能Level3优化,并且不能DMA

只有代码写得不好,才无法经过优化,我的所有代码都是开最高优化,妥妥的!!!至于不能DMA,I2C还能传大量数据了不成?

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

9

帖子

0

蝴蝶豆

初级会员

最后登录
2021-1-29
 楼主| 发表于 2017-9-16 18:37:11 | 显示全部楼层
MrJiu 发表于 2017-9-16 17:42
只有代码写得不好,才无法经过优化,我的所有代码都是开最高优化,妥妥的!!!至于不能DMA,I2C还能传大 ...

IO模拟如果可以最高优化那也可以作为备用方案。主要是唤醒之后要一直刷新OLED上的数据,之前用AVR的时候,刷的很慢,受不了才换stm32的,希望DMA能有用
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

1002

帖子

363

蝴蝶豆

版主

最后登录
2021-4-15
发表于 2017-9-16 22:53:01 | 显示全部楼层
原同学 发表于 2017-9-16 18:37
IO模拟如果可以最高优化那也可以作为备用方案。主要是唤醒之后要一直刷新OLED上的数据,之前用AVR的时候 ...

OLED,点阵屏啊。。。200k的速度,10ms应该可以刷一次。。。模拟也是可以胜任的啊。。。当然了你非要用硬件,那就自己慢慢调喽,我只能说,ST的硬件I2C非常非常坑。。。本人亲自试过。。。不过有什么屏幕是只支持I2C接口,连SPi都不支持???这个屏幕也是牛逼!!!
回复 支持 反对

使用道具 举报

该用户从未签到

18

主题

334

帖子

1

蝴蝶豆

金牌会员

最后登录
2019-7-22
发表于 2017-9-18 09:21:20 | 显示全部楼层
原同学 发表于 2017-9-16 18:37
IO模拟如果可以最高优化那也可以作为备用方案。主要是唤醒之后要一直刷新OLED上的数据,之前用AVR的时候 ...

我做过两块OLED都是SPI接口的,刷屏速率还可以。可以讨论下你们的接口设计。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

9

帖子

0

蝴蝶豆

初级会员

最后登录
2021-1-29
 楼主| 发表于 2017-9-22 20:55:17 | 显示全部楼层
MrJiu 发表于 2017-9-16 22:53
OLED,点阵屏啊。。。200k的速度,10ms应该可以刷一次。。。模拟也是可以胜任的啊。。。当然了你非要用硬 ...

现在终于调通了,中间遇到了不少坑,器件地址要填8位、读写寄存器要按字节来、OLED的数据寄存器在0x40而不是0x20等。现在用硬件I2C,400kHz非常流畅,看不出来卡屏。准备测试DMA模式下100Hz中断打断是否会影响。
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

1002

帖子

363

蝴蝶豆

版主

最后登录
2021-4-15
发表于 2017-9-23 00:37:07 | 显示全部楼层
原同学 发表于 2017-9-22 20:55
现在终于调通了,中间遇到了不少坑,器件地址要填8位、读写寄存器要按字节来、OLED的数据寄存器在0x40而 ...

看来真正的坑你还没遇到!!!等你遇到了,那才叫生不如死!!!
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

9

帖子

0

蝴蝶豆

初级会员

最后登录
2021-1-29
 楼主| 发表于 2017-9-23 08:23:18 | 显示全部楼层
MrJiu 发表于 2017-9-23 00:37
看来真正的坑你还没遇到!!!等你遇到了,那才叫生不如死!!!

貌似已经遇到了,一开DMA就进HF,改了缓冲区又发现总线锁死了,没办法,只能用最普通的了。也许是我不太会用DMA的缘故。
真正的坑还有哪些?望版主指点
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-28 12:03 , Processed in 1.197823 second(s), 43 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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