OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2558|回复: 2

原子例程i2c驱动收音机芯片AKC6955 失败 求教

[复制链接]

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2018-6-25
在线时间
24 小时
发表于 2018-12-21 19:22:34 | 显示全部楼层 |阅读模式
1金钱
大家好 我是初学者 在做一个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&#178;&#217;×÷&#186;&#175;&#202;&#253;     
#define IIC_SCL    PCout(7) //SCL
#define IIC_SDA    PCout(6) //SDA     
#define READ_SDA   PCin(6)  //&#202;&#228;&#200;&#235;SDA


void IIC_Init(void)
{                        
    GPIO_InitTypeDef GPIO_InitStructure;
    //RCC->APB2ENR|=1<<4;//&#207;&#200;&#202;&#185;&#196;&#220;&#205;&#226;&#201;èIO PORTC&#202;±&#214;&#211;
    RCC_APB2PeriphClockCmd(    RCC_APB2Periph_GPIOB, ENABLE );   
      
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD ;   //&#205;&#198;&#205;ì&#202;&#228;&#179;&#246;
    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可以用



谢谢大家


akc0.jpg
akc1.jpg

AKC6955.pdf

741.44 KB, 下载次数: 18

最佳答案

查看完整内容[请看2#楼]

搞定了 #define IIC_SCL PCout(7) //SCL #define IIC_SDA PCout(6) //SDA #define READ_SDA PCin(6) //ÊäÈëSDA 这里错了 应该是PB
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2018-6-25
在线时间
24 小时
 楼主| 发表于 2018-12-21 19:22:35 | 显示全部楼层
搞定了

#define IIC_SCL    PCout(7) //SCL
#define IIC_SDA    PCout(6) //SDA     
#define READ_SDA   PCin(6)  //&#202;&#228;&#200;&#235;SDA
这里错了 应该是PB
回复

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2018-6-25
在线时间
24 小时
 楼主| 发表于 2018-12-23 19:30:50 | 显示全部楼层
还是不对

#define IIC_SCL    PBout(9) //SCL
#define IIC_SDA    PBout(8) //SDA         
#define READ_SDA   PBin(8)  //&#202;&#228;&#200;&#235;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也不对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 17:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表