打印

stm32f407 IIC 死在while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY));!!!

[复制链接]
340|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
第三章|  楼主 | 2018-7-9 14:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序很简单,就是先初始化GPIO,然后模式设置,结果程序就卡在while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY));一直不出来。麻烦大家帮我分析一下!
#include <stm32f4xx.h>
static void IIC1_GPIO_Configuration(void)
{
        GPIO_InitTypeDef        GPIO_InitStructure;
        //打开B口的时钟,PB6->SCL,PB7->SDA
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
        //先将对应寄存器配置为缺省值
        GPIO_StructInit(&GPIO_InitStructure);
        //选中6,7管脚
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;
        //复用功能
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
        //IIC最大速度为400K
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        //开漏输出
        GPIO_InitStructure.GPIO_OType=GPIO_OType_OD;
        //不带上拉
        GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
        //将IO配置应用于对应寄存器
        GPIO_Init(GPIOB,&GPIO_InitStructure);
        //管脚映射
        GPIO_PinAFConfig(GPIOB,GPIO_Pin_6,GPIO_AF_I2C1);
        GPIO_PinAFConfig(GPIOB,GPIO_Pin_7,GPIO_AF_I2C1);
}
static void IIC1_MODE_Configuration(void)
{
        I2C_InitTypeDef                I2C_InitStrycture;
        //打开IIC1时钟
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
        //典型IIC速度为100K
        I2C_InitStrycture.I2C_ClockSpeed=100000;
        //IIC模式
        I2C_InitStrycture.I2C_Mode=I2C_Mode_I2C;
        //
        I2C_InitStrycture.I2C_DutyCycle=I2C_DutyCycle_2;
        //在STM32作为从机时的应答地址,做主机时不需理会
        I2C_InitStrycture.I2C_OwnAddress1=0x00;
        //使能IIC应答
        I2C_InitStrycture.I2C_Ack=I2C_Ack_Enable;
        //应答地址为7位(从机)
        I2C_InitStrycture.I2C_AcknowledgedAddress=I2C_AcknowledgedAddress_7bit;
        //使能IIC
        I2C_Cmd(I2C1,ENABLE);
        //配置寄存器
        I2C_Init(I2C1,&I2C_InitStrycture);
        //允许一字节一应答的时序
        I2C_AcknowledgeConfig(I2C1, ENABLE);
}
void IIC1_Init(void)
{
        IIC1_GPIO_Configuration();
        IIC1_MODE_Configuration();
}
主程序很简单(串口程序就不贴出来了)
        USART1_Init();
        IIC1_Init();
        printf("
开始测试        

");
        while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY));
        printf("写入数据

");
就这么简短的几句话,卡在那里了。配置检查了很久都没有看出问题来!

使用特权

评论回复

相关帖子

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

本版积分规则

380

主题

380

帖子

0

粉丝