
本人一直觉得I2C有点难用,特别是ST的,其实我也只用过ST的 哈哈- ]& B5 Y* b' A) V% p 虽然现在公司的项目上有用到I2C,但是我对STM32F030的I2C还是有些敬畏、果不其然芯片未搞定(当然只是暂时的),于是退而求其次,用I/O模拟试试,整整弄了两个晚上才读到数据,然而当我找到问题所在时 ,我又一次的无语了……) C' G. _# T& S" E! J( h9 K! Z [ 下面和大家一起分享下原因:- k: s/ C. Z6 D* w+ w( a #define SDA_READ (GPIOA->IDR & GPIO_Pin_10) >> 109 {% t# F$ p! e4 O% d0 ~ 错误的接收字节代码:0 ^5 ]* C. M/ Y& W" C <span style="color: #000000">INT8U I2C_RecByte(void)4 p( H5 w' K y: S# l& T1 B( u {+ i4 ?; i4 |8 t% {3 i' G INT8U i,dat=0;, r& M( P/ M5 d0 I INT16U uwTemp =0; I2C_SDA_IN();/ ~/ v) b, ]3 [; j for(i=0;i> 10)这样至少可有保证相对于其他的语句,这是一个原子操作。 扯了这么多 自己都不知道主题在什么地方,写出了和大家分享下,同时自己今后也可以看看,可有起到温故知新作用!6 D% r. D8 a. L% V% s$ ?+ O2 e 哎 固件的I2C还没有实现呢,等实现了,再来续更哈…… 呵呵 I2C弄好有一段时间了,但是各种原因一直没有上传,现在上传,有些地方还有些模糊,还请大家一起讨论下: D6 y. W8 c% P4 s6 ^4 F3 ~, p5 U |
I2C_uWriteData(0XA0,0x00,16,Bufin);
for(i=0;i<16;i++)Bufr[i]=0;
Delayms(1000);
I2C_uReadData(0XA1,0x00,16,Bufr);
Delayms(1000);
: {4 u1 N. `: P2 z6 t. g
SLAVER ADDRESS个人觉得应该换个名字,并不是器件的地址,而是功能代码吧~
可以呀
RE: 三创电子(Tcreate)-STM32F030调试之I2C篇
: ], S9 _. I0 w/ P+ r
继续阅读原创汇总:: @- Z& N- y) W; a: c6 l5 j, @1 b4 R I
STM32F030探索套件开发日志,中文教程,使用问答80篇
回复: 三创电子(Tcreate)-STM32F030调试之I2C篇
回复: 三创电子(Tcreate)-STM32F030调试之I2C篇
只能说是宏定义不够合理吧,我是在使用时如果要表达一个运算习惯在最外层加一个括弧,不过楼主能把遇到的问题与大家分享是比较好的,大家多多少少会在编程上有些小问题。
. |5 Z. n; \( n3 ]
学习了 还是要养成良好的习惯
RE: 三创电子(Tcreate)-STM32F030调试之I2C篇
直接在初始化的时候设置为复用AF模式就可以了吧。我与24c32通讯采用的开漏输出
void I2C_uConfiguration(void)
{
GPIO_InitTypeDef GPIO_uInitStructure; l$ A) G/ X0 L* K( ]- D$ ]" e
1 A% D- s+ w3 P$ H
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);
$ k% ]. ?9 K U0 q
GPIO_uInitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;! z2 V. r+ p/ g2 V0 f* x. N0 ~
GPIO_uInitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_uInitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_uInitStructure.GPIO_Speed = GPIO_Speed_Level_3; // 10M" J+ p8 f+ s7 F y, D- E
GPIO_Init(GPIOA,&GPIO_uInitStructure);
}
谢谢你的分享,我好好看看,谢了