打印

STM32 I2C看不到起始信号

[复制链接]
2078|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
花落辞殇|  楼主 | 2015-8-24 11:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void GPIO_Configuration()
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
                                     
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;       
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;      
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

          GPIO_Init(GPIOB, &GPIO_InitStructure);
}

void IIC_Configuration()
{
        I2C_InitTypeDef    I2C_InitStructure;
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
               
        I2C_InitStructure.I2C_Mode                  = I2C_Mode_I2C;                                                                //IIC模式
        I2C_InitStructure.I2C_DutyCycle   = I2C_DutyCycle_2;
        I2C_InitStructure.I2C_OwnAddress1 = 0x30;                                                                                //器件地址
        I2C_InitStructure.I2C_Ack                  = I2C_Ack_Enable;                                                         //IIC应答使能
        I2C_InitStructure.I2C_AcknowledgedAddress =  I2C_AcknowledgedAddress_7bit;                //应答7位地址
        I2C_InitStructure.I2C_ClockSpeed  = 200000;    //100KHZ                                                                        
        I2C_Init(I2C1, &I2C_InitStructure);

        I2C_Cmd(I2C1, ENABLE);
        I2C_AcknowledgeConfig(I2C1, ENABLE);      //允许应答模式
}
int main(void)
{
   
    SystemInit();
        delay_init(72);                //延时初始化
        GPIO_Configuration();
        IIC_Configuration();

        while(1)
        {       

                I2C_GenerateSTART(I2C1, ENABLE);
                delay_ms(100);

        }       
}


相关帖子

沙发
Desire1| | 2015-8-24 18:44 | 只看该作者
说明你的I2C的初始化就没做好,找个初始化的例子看看。

使用特权

评论回复
板凳
邓布利多| | 2015-8-25 21:49 | 只看该作者
/**
  ******************************************************************************
  * @file    main.c
  * @author  fire
  * @version V1.0
  * @date    2013-xx-xx
  * @brief   I2C EEPROM(AT24C02)测试,测试信息通过USART1打印在电脑的超级终端
  ******************************************************************************
  * @attention
  *
  * 实验平台:野火 iSO STM32 开发板
  
  *
  ******************************************************************************
  */
  
#include "stm32f10x.h"
#include "bsp_usart1.h"
#include "bsP_i2c_ee.h"
#include "bsP_led.h"
#include <string.h>

#define  EEP_Firstpage      0x00
u8 I2c_Buf_Write[256];
u8 I2c_Buf_Read[256];
void I2C_Test(void);

/**
  * @brief  主函数
  * @param  无
  * @retval 无
  */
int main(void)
{
  
  /* 串口1初始化 */
        USART1_Config();
       
        printf("\r\n 这是一个I2C外设(AT24C02)读写测试例程 \r\n");
        //LED_GPIO_Config();

        /* I2C 外设初(AT24C02)始化 */
        I2C_EE_Init();

        printf("\r\n 这是一个I2C外设(AT24C02)读写测试例程 \r\n");       
                  
        I2C_Test();
  
  while (1)
  {      
  }
}

/**
  * @brief  I2C(AT24C02)读写测试
  * @param  无
  * @retval 无
  */
void I2C_Test(void)
{
        u16 i;

        printf("写入的数据\n\r");
   
        for ( i=0; i<=255; i++ ) //填充缓冲
  {   
    I2c_Buf_Write = i;

    printf("0x%02X ", I2c_Buf_Write);
    if(i%16 == 15)   
        printf("\n\r");   
   }

  //将I2c_Buf_Write中顺序递增的数据写入EERPOM中
   //LED1(ON);
        I2C_EE_BufferWrite( I2c_Buf_Write, EEP_Firstpage, 256);
        //LED1(OFF);   
  
  printf("\n\r写成功\n\r");
   
   printf("\n\r读出的数据\n\r");
  //将EEPROM读出数据顺序保持到I2c_Buf_Read中
    //LED2(ON);   
        I2C_EE_BufferRead(I2c_Buf_Read, EEP_Firstpage, 256);
   //LED2(OFF);
   
  //将I2c_Buf_Read中的数据通过串口打印
        for (i=0; i<256; i++)
        {       
                if(I2c_Buf_Read != I2c_Buf_Write)
                {
                        printf("0x%02X ", I2c_Buf_Read);
                        printf("错误:I2C EEPROM写入与读出的数据不一致\n\r");
                        return;
                }
    printf("0x%02X ", I2c_Buf_Read);
    if(i%16 == 15)   
        printf("\n\r");
   
        }
  printf("I2C(AT24C02)读写测试成功\n\r");
}

使用特权

评论回复
地板
北方小榕树| | 2015-8-26 22:03 | 只看该作者
好像你IO的初始化出问题了。

使用特权

评论回复
5
eggbiscuit| | 2015-8-31 21:42 | 只看该作者
找个例程看看,对比下就知道哪里的问题了。

使用特权

评论回复
6
花落辞殇|  楼主 | 2015-9-22 09:16 | 只看该作者
Desire1 发表于 2015-8-24 18:44
说明你的I2C的初始化就没做好,找个初始化的例子看看。

有人说,ST的I2C不好用,不知道真的假的

使用特权

评论回复
7
花落辞殇|  楼主 | 2015-9-22 09:16 | 只看该作者
邓布利多 发表于 2015-8-25 21:49
/**
  ******************************************************************************
  * @file    ma ...

我后来改为IO模拟的了,看看这个例程

使用特权

评论回复
8
花落辞殇|  楼主 | 2015-9-22 09:16 | 只看该作者
北方小榕树 发表于 2015-8-26 22:03
好像你IO的初始化出问题了。

我觉得也是

使用特权

评论回复
9
北方小榕树| | 2015-9-26 23:01 | 只看该作者

据说ST的I2C不好用,你试过没?

使用特权

评论回复
10
Desire1| | 2015-9-29 22:02 | 只看该作者
邓布利多 发表于 2015-8-25 21:49
/**
  ******************************************************************************
  * @file    ma ...

这个例子不错,I2C的初始化的例子。

使用特权

评论回复
11
Micachl| | 2015-9-30 15:54 | 只看该作者
是不是初始化没弄好啊,单步调试一下看看

使用特权

评论回复
12
vivilzb1985| | 2015-10-7 16:17 | 只看该作者
楼主的代码程序是没啥问题的,关键是用万用表的查看追踪下信号的状态。

使用特权

评论回复
13
shenmu2012| | 2015-10-7 17:17 | 只看该作者
这个在启用IIC的时候设置一个小的延时的看下的吧

使用特权

评论回复
14
邓布利多| | 2015-10-24 11:09 | 只看该作者
花落辞殇 发表于 2015-9-22 09:16
我后来改为IO模拟的了,看看这个例程

IO模拟的速度太慢,一般场合用用还好。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

103

帖子

0

粉丝