/* #define SYSCLK_FREQ_HSE HSE_VALUE */
// #define SYSCLK_FREQ_24MHz 24000000
// #define SYSCLK_FREQ_36MHz 36000000
// #define SYSCLK_FREQ_48MHz 48000000
//#define SYSCLK_FREQ_56MHz 56000000
#define SYSCLK_FREQ_72MHz 72000000
在主程序中,这样设置72M的话,iic就能正常使用,应答信号等都正常,只要改成36M
/* #define SYSCLK_FREQ_HSE HSE_VALUE */
// #define SYSCLK_FREQ_24MHz 24000000
#define SYSCLK_FREQ_36MHz 36000000
// #define SYSCLK_FREQ_48MHz 48000000
//#define SYSCLK_FREQ_56MHz 56000000
//#define SYSCLK_FREQ_72MHz 72000000
IIC就不能正常运行了,应答信号都不对,请问是什么原因,
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
//初始化IIC
void IIC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//RCC->APB2ENR|=1<<4;//先使能外设IO PORTB时钟
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11); //PE.5 输出高
IIC_SCL=1;
IIC_SDA=1;
}
这个是跟原子的例程上一样的
原子哥的程序,不一定是对的呀.不是开漏的 I2C 通用性不强..易出怪问题.
这个配置应该没问题吧?哪个引脚要开漏?我看到的都是推挽输出
也就是说我能直接更改为开漏吗?像这样改?
//初始化IIC
void IIC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//RCC->APB2ENR|=1<<4;//先使能外设IO PORTB时钟
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11;
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; //推挽输出
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_OD;//开漏输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11); //PE.5 输出高
IIC_SCL=1;
IIC_SDA=1;
}
一周热门 更多>