EEPROM (IIC)修正版适合AT24C02~AT24C1024

2019-08-21 12:44发布

EEPROM (IIC)修正版适合AT24C02~AT24C1024 根据需要修改
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
doleph
2019-08-21 14:59
楼主的代码有问题,在IIC.h 中,宏定义
#define IIC_SCK_OUT()      {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=0X30000000;}/* 配置其输出*/
#define IIC_SCK_HIGH()    {GPIOB->ODR|=1<<7; }  /* 输出为高*/ 
#define IIC_SCK_LOW()     {GPIOA->ODR|=0<<7;}  /* 输出为低*/

#define IIC_SDA_OUT()    {GPIOB->CRL&=0XF0FFFFFF;GPIOB->CRL|=0X08000000;}
#define IIC_SDA_IN()     {GPIOB->CRL&=0XF0FFFFFF;GPIOB->CRL|=0X03000000;}
#define IIC_SDA_HIGH()   {GPIOB->ODR|=1<<6;}
#define IIC_SDA_LOW()    {GPIOB->ODR|=0<<6;}
#define IIC_SDA_GET()    (((GPIOB->ODR|=1<<6)&(0x01<<6)))

其中的
(1)#define IIC_SCK_LOW()     {GPIOA->ODR|=0<<7;}  /* 输出为低*/应该改为{GPIOA->ODR&=~(1<<7);}
(2)#define IIC_SDA_LOW()    {GPIOB->ODR|=0<<6;}应该改成{GPIOA->ODR&=~(1<<6);}
任何数与0做位或运算语句无效。
(3)#define IIC_SDA_GET()    (((GPIOB->ODR|=1<<6)&(0x01<<6)))
这里的寄存器用错了,应该这样写:((GPIO->IDR&(1<<6))>>6)
     出现这些错误,说明楼主代码没有经过调试,在发布前最好调试好,免得给别人造成误导。不过还得感谢楼主的共享精神,请楼主不要生气,咱们搞技术的就得实事求是,不是吗?

一周热门 更多>