有人在调试STM32F1的时候被硬件I2C坑了吗?为毛一直超时?
本帖最后由 原同学 于 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,所以尽量不考虑软件模拟。上面那个程序应该怎么改才能正常运行?
我就不说其他的了,模拟走起!!!:lol:lol:lol MrJiu 发表于 2017-9-16 16:06
我就不说其他的了,模拟走起!!!
希望能用硬件的。模拟的好像不能Level3优化,并且不能DMA 原同学 发表于 2017-9-16 16:30
希望能用硬件的。模拟的好像不能Level3优化,并且不能DMA
只有代码写得不好,才无法经过优化,我的所有代码都是开最高优化,妥妥的!!!至于不能DMA,I2C还能传大量数据了不成? MrJiu 发表于 2017-9-16 17:42
只有代码写得不好,才无法经过优化,我的所有代码都是开最高优化,妥妥的!!!至于不能DMA,I2C还能传大 ...
IO模拟如果可以最高优化那也可以作为备用方案。主要是唤醒之后要一直刷新OLED上的数据,之前用AVR的时候,刷的很慢,受不了才换stm32的,希望DMA能有用 原同学 发表于 2017-9-16 18:37
IO模拟如果可以最高优化那也可以作为备用方案。主要是唤醒之后要一直刷新OLED上的数据,之前用AVR的时候 ...
OLED,点阵屏啊。。。200k的速度,10ms应该可以刷一次。。。模拟也是可以胜任的啊。。。当然了你非要用硬件,那就自己慢慢调喽,我只能说,ST的硬件I2C非常非常坑。。。本人亲自试过。。。不过有什么屏幕是只支持I2C接口,连SPi都不支持???这个屏幕也是牛逼!!! 原同学 发表于 2017-9-16 18:37
IO模拟如果可以最高优化那也可以作为备用方案。主要是唤醒之后要一直刷新OLED上的数据,之前用AVR的时候 ...
我做过两块OLED都是SPI接口的,刷屏速率还可以。可以讨论下你们的接口设计。 MrJiu 发表于 2017-9-16 22:53
OLED,点阵屏啊。。。200k的速度,10ms应该可以刷一次。。。模拟也是可以胜任的啊。。。当然了你非要用硬 ...
现在终于调通了,中间遇到了不少坑,器件地址要填8位、读写寄存器要按字节来、OLED的数据寄存器在0x40而不是0x20等。现在用硬件I2C,400kHz非常流畅,看不出来卡屏。准备测试DMA模式下100Hz中断打断是否会影响。 原同学 发表于 2017-9-22 20:55
现在终于调通了,中间遇到了不少坑,器件地址要填8位、读写寄存器要按字节来、OLED的数据寄存器在0x40而 ...
看来真正的坑你还没遇到!!!等你遇到了,那才叫生不如死!!! MrJiu 发表于 2017-9-23 00:37
看来真正的坑你还没遇到!!!等你遇到了,那才叫生不如死!!!
貌似已经遇到了,一开DMA就进HF,改了缓冲区又发现总线锁死了,没办法,只能用最普通的了。也许是我不太会用DMA的缘故。
真正的坑还有哪些?望版主指点
页:
[1]