关于IIC读取AT24C02的程序不能优化的问题

2019-07-20 08:54发布

自己做的板子,PB6 接SCL;PB7接SDA;用的IO模拟的方式读取24C02;目前的情况是:
在Keil优化0时读写都正常,
在优化大于0时,只有读正常,写入不正常。
代码基本上是原子的代码,附件是keil5的工程。
请大神帮忙分析一下,该如何修改代码,才能在优化非0的情况下也能写入正常。

多谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
dreong
2019-07-20 19:59
正点原子 发表于 2017-4-11 22:33
参考我们例程,支持-O2优化。

感谢原子的答复。
我的这个程序基本上是参考阿波罗的例程写的,除了在IIC_Init()函数中,将SDA引脚改为开漏输出模式之外(如果不改的话,优化-o0也无法向24C02写入数据)

硬件上SCL 和 SDA均接4.7K上拉到3.3V,和阿波罗开发板一样。

还有一个让我比较疑惑的是,我以前的产品STM32F103ZET6,目前产品升级改为STM32F429ZGT6,以前在103平台下也是IO模拟IIC,可以-O3优化。代码思路也基本相同(IIC初始化时 SCL和SDA都初始化为推挽输出也没有问题)。

//STM32F429 初始化IIC函数
void IIC_Init(void) //与阿波罗开发板不同
{
//        GPIO_Set(GPIOH,PIN4|PIN5,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU);//PH4/PH5设置
//        GPIO_Set(GPIOB,PIN6|PIN7,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU);//PB6/PB7设置
        GPIO_Set(GPIOB, PIN7, GPIO_MODE_OUT, GPIO_OTYPE_OD, GPIO_SPEED_25M, GPIO_PUPD_NONE);//PB7-SDA
        GPIO_Set(GPIOB, PIN6, GPIO_MODE_OUT, GPIO_OTYPE_PP, GPIO_SPEED_25M, GPIO_PUPD_PU);//PB6-SCL

        IIC_SCL=1;
        IIC_SDA=1;
}

一周热门 更多>