新手上路
- 积分
- 41
- 金钱
- 41
- 注册时间
- 2016-1-27
- 在线时间
- 6 小时
|
1金钱
买了战舰开发板,进行到IIC通信部分,我有个疑问——既然程序用的是模拟IIC,换句话说,我只要更换SDA和SCL引脚,也能实现IIC通信,可是实际却不行~[mw_shl_code=applescript,true]void IIC_Init(void)
{
RCC->APB2ENR|=1<<3; //先使能外设IO PORTB时钟
GPIOB->CRL&=0X00FFFFFF; //PB6/7推挽输出
GPIOB->CRL|=0X33000000;
GPIOB->ODR|=3<<6; //PB6,7输出高
}[/mw_shl_code]
[mw_shl_code=applescript,true]
#define SDA_IN() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;}
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)3<<28;}
#define IIC_SCL PBout(6)
#define IIC_SDA PBout(7)
#define READ_SDA PBin(7) [/mw_shl_code]
以上是myicc.h和myicc.c中,关于引脚的定义,这部分,小弟能懂,然后,我将板上P4短路帽拔掉,外接eeprom的SDA到PA10,SCL到PA9
程序改动如下:
[mw_shl_code=applescript,true]void IIC_Init(void)
{
RCC->APB2ENR|=1<<2;
GPIOA->CRH&=0XFFFFF00F;
GPIOA->CRH|=0X00000330;
GPIOA->ODR|=3<<9;
}[/mw_shl_code]
[mw_shl_code=applescript,true]
#define SDA_IN() {GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=(u32)8<<28;}
#define SDA_OUT() {GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=(u32)3<<28;}
#define IIC_SCL PAout(9)
#define IIC_SDA PAout(10)
#define READ_SDA PAin(10) [/mw_shl_code]
运行后,液晶屏显示"24C02 Check Failed!",一直都无法连上EEPROM,求各位指教,我只修改这部分代码,是修改错误,还是漏了某些地方没修改
另外,我看好多例程都用PB6,PB7做IIC引脚,虽然他们是硬件IIC引脚,但就没人试过用其他脚来模拟?
|
最佳答案
查看完整内容[请看2#楼]
#define SDA_IN() {GPIOA->CRL&=0XFFFFF0FF;GPIOA->CRL|=(u32)8CRL|=(u32)3
|