初级会员

- 积分
- 61
- 金钱
- 61
- 注册时间
- 2014-1-19
- 在线时间
- 6 小时
|
发表于 2014-1-19 19:29:31
|
显示全部楼层
楼主的代码有问题,在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)
出现这些错误,说明楼主代码没有经过调试,在发布前最好调试好,免得给别人造成误导。不过还得感谢楼主的共享精神,请楼主不要生气,咱们搞技术的就得实事求是,不是吗? |
|