stm32 I2C问题 I2C_CheckEvent()
2011-09-22 16:35
537 查看
STM32的IIC接口写的比较复杂,稍不注意,很多地方都会搞错,如果是用GPIO模拟的IIC,问题应该不大,无非应答不不应答的问题。
但是既然STM32自带IIC,并且有接口函数,干嘛不用呢
问题1:
I2C_CheckEvent() 检查时停在此处:
/* Test on EV5 and clear it */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
问题2:
第一次读写正确后再运行程序停在此处:
/* Test on EV6 and clear it */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
其他问题:
这基本上就是该应答时没有应答造成
解决方法:
针对问题1,多数是因为IIC接口没有配置好,RCC设置中只设置了如下
/* I2C1 Periph clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
却没有设置:
/* GPIOB Periph clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
以上两者都是必须的
针对问题2,一般是由于从设备速度不够快造成的
一般在IIC各个读写操作中加入一定的延时即可:
I2C_8601_ByteWrite(0x02,0x01);
afxCounterMs=1;
while(afxCounterMs);
I2C_8601_ByteWrite(0x03,0x02);
afxCounterMs=1;
while(afxCounterMs);
但是既然STM32自带IIC,并且有接口函数,干嘛不用呢
问题1:
I2C_CheckEvent() 检查时停在此处:
/* Test on EV5 and clear it */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
问题2:
第一次读写正确后再运行程序停在此处:
/* Test on EV6 and clear it */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
其他问题:
这基本上就是该应答时没有应答造成
解决方法:
针对问题1,多数是因为IIC接口没有配置好,RCC设置中只设置了如下
/* I2C1 Periph clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
却没有设置:
/* GPIOB Periph clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
以上两者都是必须的
针对问题2,一般是由于从设备速度不够快造成的
一般在IIC各个读写操作中加入一定的延时即可:
I2C_8601_ByteWrite(0x02,0x01);
afxCounterMs=1;
while(afxCounterMs);
I2C_8601_ByteWrite(0x03,0x02);
afxCounterMs=1;
while(afxCounterMs);
相关文章推荐
- stm32 I2C问题 I2C_CheckEvent()
- STM32 I2C 总线占用问题解析
- STM32 I2C上拉电阻的选择问题
- I2C上拉电阻问题分析(基于stm32 HAL库)
- STM32_I2C,不稳定,死在I2C_CheckEvent解决办法
- STM32关于触摸芯片 BS8112A-3 BS8116A-3 I2C 源程序 及问题
- STM32串口空闲中断问题
- arm中stm32中矩阵键盘的问题
- I2C上拉电阻取值问题
- .NET Micro Framework STM32的移植的问题
- 浅谈 STM32 硬件I2C的使用 (中断方式 无DMA 无最高优先级)
- STM32 USART3可以接收无法发送问题(Tx一直为高电平)
- 解决STM32不能模拟仿真的问题
- STM32的存储分配问题
- STM32 关于GPIO的问题集锦
- I2C上拉电阻取值问题
- STM32的PWM波产生的问题总结
- I2C上拉电阻问题
- STM32-外部中断常见问题记录
- STM32F1系列 调试硬件I2C应注意的问题