大家好 我是初学者 在做一个i2c驱动收音机芯片的简单程序 直接移植原子例程 但是失败了
时序图如下
i2c选的pb6 pb7
#define SDA_IN() {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=8<<12;}
#define SDA_OUT() {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=3<<12;}
//IO²Ù×÷º¯Êý
#define IIC_SCL PCout(7) //SCL
#define IIC_SDA PCout(6) //SDA
#define READ_SDA PCin(6) //ÊäÈëSDA
void IIC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//RCC->APB2ENR|=1<<4;//ÏÈʹÄÜÍâÉèIO PORTCʱÖÓ
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD ; //ÍÆÍìÊä³ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
IIC_SCL=1;
IIC_SDA=1;
}
我的写寄存器代码
void i2c_write(u8 DEVICE_ID, u8 reg, u8 val)
{
IIC_Start();
IIC_Send_Byte(0b00100000);
IIC_Ack();
IIC_Send_Byte(reg);
IIC_Ack();
IIC_Send_Byte(val);
IIC_Ack();
IIC_Stop();
}
板子没问题 接在Arduino可以用
谢谢大家
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
#define IIC_SCL PCout(7) //SCL
#define IIC_SDA PCout(6) //SDA
#define READ_SDA PCin(6) //ÊäÈëSDA
这里错了 应该是PB
#define IIC_SCL PBout(9) //SCL
#define IIC_SDA PBout(8) //SDA
#define READ_SDA PBin(8) //ÊäÈëSDA
SDA设为PB8
#define SDA_IN() {GPIOB->CRH&=0XFFFFFFF0;GPIOB->CRH|=8;}
#define SDA_OUT() {GPIOB->CRH&=0XFFFFFFF0;GPIOB->CRH|=3;}
读函数始终不对 只有0
u8 i2c_read(u8 DEVICE_ID, u8 reg)
{
u8 c=0;
IIC_Start();
IIC_Send_Byte(DEVICE_ID);
IIC_Ack();
IIC_Send_Byte(reg);
IIC_Ack();
IIC_Stop();
IIC_Start();
IIC_Send_Byte(DEVICE_ID | 1);
u8 e= IIC_Wait_Ack();
Gui_StrCenter(0, 190, BLACK, RED, (e?"Error":"OK") ,16, 0);
c = IIC_Read_Byte();
e=IIC_Wait_Ack();
Gui_StrCenter(0, 210, BLACK, RED, (e?"Error":"OK") ,16, 0);
IIC_Stop();
return c;
}
请高手帮我看看时序 对不对
两个IIC_Wait_Ack 换成 IIC_Ack也不对
一周热门 更多>