stm32f103 iic源码怎么做为从器件

查看: 1390|回复: 7
stm32f0 IIC通讯,单片机做从机。
主题帖子精华
新手上路, 积分 31, 距离下一级还需 19 积分
在线时间1 小时
网上的教程都是IIC做主机的,现在要写单片机做从机,400K的,怎么野写不成,大家有没有历程?稍后贴代码和问题现象
主题帖子精华
初级会员, 积分 119, 距离下一级还需 81 积分
在线时间9 小时
据说单片机做从机很难搞,以前想弄来着,看看太难弄,就放弃了。
主题帖子精华
高级会员, 积分 760, 距离下一级还需 240 积分
在线时间224 小时
都是解码,有什么难的呢,你一条线用中断就好办了。
主题帖子精华
在线时间406 小时
没搞过从机,帮顶。
主题帖子精华
新手上路, 积分 31, 距离下一级还需 19 积分
在线时间1 小时
从机我是做出来了,但是主机发送5次数从机才会返回1次,丢数据严重啊。。。
主题帖子精华
新手上路, 积分 31, 距离下一级还需 19 积分
在线时间1 小时
从机我是做出来了,但是主机发送5次数从机才会返回1次,丢数据严重啊。。。
大神们,肿麽办???做不出来就被赶出公司了
主题帖子精华
新手上路, 积分 15, 距离下一级还需 35 积分
在线时间52 小时
大神们,肿麽办???做不出来就被赶出公司了
用中断做不会丢失数据的,只不过比做主机麻烦些。我之前用中断虚拟spi通信都搞定了,IIC比SPI要容易多了。
原子哥是不是又要出黑科技了呀。^_^...
主题帖子精华
初级会员, 积分 194, 距离下一级还需 6 积分
在线时间1 小时
大神们,肿麽办???做不出来就被赶出公司了
这么狠,好好研究I2C吧,加油
爱我所爱!
Powered by&&&&STM32与AVR的IIC通信例程
&STM32与AVR的IIC通信例程
STM32F103作为主机,AVR的Mega8A作为从机惊醒通信,已验证没有问题,可以直接使用。
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
Q.为什么我点的下载下不了,但积分却被扣了
A. 由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。
Q.我的积分不多了,如何获取积分?
A. 获得积分,详细见。
完成任务获取积分。
论坛可用分兑换下载积分。
第一次绑定手机,将获得5个C币,C币可。
关注并绑定CSDNID,送10个下载分
下载资源意味着您已经同意遵守以下协议
资源的所有权益归上传用户所有
未经权益所有人同意,不得将资源中的内容挪作商业或盈利用途
CSDN下载频道仅提供交流平台,并不能对任何下载资源负责
下载资源中如有侵权或不适当内容,
本站不保证本站提供的资源的准确性,安全性和完整性,同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
开发技术下载排行
您当前C币:0&&&可兑换 0 下载积分
兑换下载分:&
消耗C币:0&
立即兑换&&
兑换成功你当前的下载分为 。前去下载资源
你下载资源过于频繁,请输入验证码
如何快速获得积分?
你已经下载过该资源,再次下载不需要扣除积分
STM32与AVR的IIC通信例程
所需积分:5
剩余积分:0
扫描微信二维码精彩活动、课程更新抢先知
VIP会员,免积分下载
会员到期时间:日
剩余下载次数:1000
STM32与AVR的IIC通信例程
剩余次数:&&&&有效期截止到:
你还不是VIP会员VIP会员享免积分 . 专属通道极速下载
VIP下载次数已满VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员
你的VIP会员已过期VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员21ic官方微信-->
后使用快捷导航没有帐号?
查看: 5211|回复: 38
STM32有硬件IIC,为什么很多应用,还要模拟IIC?
&&未结帖(20)
主题帖子积分
高级技术员, 积分 814, 距离下一级还需 186 积分
高级技术员, 积分 814, 距离下一级还需 186 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
高级技术员, 积分 814, 距离下一级还需 186 积分
高级技术员, 积分 814, 距离下一级还需 186 积分
看到很多STM32应用,使用I2C接口,明明STM32有硬件I2C,但不知为什么这些应用还要用GPIO来模拟I2C。这是为什么呢?
主题帖子积分
实习生, 积分 35, 距离下一级还需 15 积分
实习生, 积分 35, 距离下一级还需 15 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 35, 距离下一级还需 15 积分
实习生, 积分 35, 距离下一级还需 15 积分
那个硬件IIC是有BUG的 所以大家都虚拟IIC
主题帖子积分
实习生, 积分 21, 距离下一级还需 29 积分
实习生, 积分 21, 距离下一级还需 29 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 21, 距离下一级还需 29 积分
实习生, 积分 21, 距离下一级还需 29 积分
那个硬件IIC是有BUG的 所以大家都虚拟IIC
楼上能分享下他的BUG在哪里不?&&我现在就准备用硬件IIC,但是一直调试不通
主题帖子积分
高级技术员, 积分 580, 距离下一级还需 420 积分
高级技术员, 积分 580, 距离下一级还需 420 积分
主题帖子积分
专家等级:结帖率:92%
主题帖子积分
高级技术员, 积分 580, 距离下一级还需 420 积分
高级技术员, 积分 580, 距离下一级还需 420 积分
虚拟I2C更好移植性,不同的芯片未必 有 或者 有那么多I2C 可以供开发者使用
一般情况,如果一直用着一块芯片,建议就用寄存器的I2C.
主题帖子积分
初级技术员, 积分 97, 距离下一级还需 3 积分
初级技术员, 积分 97, 距离下一级还需 3 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
初级技术员, 积分 97, 距离下一级还需 3 积分
初级技术员, 积分 97, 距离下一级还需 3 积分
本帖最后由 神的兄弟 于
15:45 编辑
并不是IIC硬件有问题,是ST提供的库函数在设置IIC的API函数中出现了错误而且模拟的IIC同样很好用也有很多源代码,就不用再去改库函数里的BUG了
所以用模拟IIC的多
主题帖子积分
高级技术员, 积分 559, 距离下一级还需 441 积分
高级技术员, 积分 559, 距离下一级还需 441 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级技术员, 积分 559, 距离下一级还需 441 积分
高级技术员, 积分 559, 距离下一级还需 441 积分
我也想知道BUG在哪里?这么多人都说BUG,难道ST不会知道么?到底有没有改呢?如果没有改肯定有他的道理呀。我HW,没配过IIC的程序。
主题帖子积分
中级技术员, 积分 183, 距离下一级还需 117 积分
中级技术员, 积分 183, 距离下一级还需 117 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级技术员, 积分 183, 距离下一级还需 117 积分
中级技术员, 积分 183, 距离下一级还需 117 积分
ST为了防止侵权,把硬件IIC整得有点复杂,还有BUG
主题帖子积分
实习生, 积分 38, 距离下一级还需 12 积分
实习生, 积分 38, 距离下一级还需 12 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 38, 距离下一级还需 12 积分
实习生, 积分 38, 距离下一级还需 12 积分
我的系统里有几个芯片是IIC接口,刚开始用官方的库函数也花了挺长时间调试,好不容易调通了,可是待正式小批量使用时,出现了偶尔死机的情况,后来断点查看,是卡在了IIC处理上,具体在哪里也说不清楚。于是花了段时间,用模拟IIC接口方式,程序基本就稳定了。我的理解是这样的:1.硬件IIC的时序不能出差错,如果你在读写IIC时,此时若正好碰上两根线上有了干扰,时序就不对了,它等不到回信也就卡在了哪里;2.模拟IIC即使出了干扰,也只是此时读写出错,数据都不出来或写不进去,但程序还会继续运行,待下次轮到时再读写,最大的好处是不影响整个程序运行。3.至于运行时间,应该比硬件IIC要慢(慢多少我也没测过),但是慢这点时间,基本对程序没什么影响。
主题帖子积分
技术达人, 积分 9623, 距离下一级还需 377 积分
技术达人, 积分 9623, 距离下一级还需 377 积分
主题帖子积分
专家等级:结帖率:100%打赏:2.70受赏:93.10
主题帖子积分
技术达人, 积分 9623, 距离下一级还需 377 积分
技术达人, 积分 9623, 距离下一级还需 377 积分
晴天响霹雳,平地一声雷。
主题帖子积分
资深技术员, 积分 493, 距离下一级还需 7 积分
资深技术员, 积分 493, 距离下一级还需 7 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
资深技术员, 积分 493, 距离下一级还需 7 积分
资深技术员, 积分 493, 距离下一级还需 7 积分
我的系统里有几个芯片是IIC接口,刚开始用官方的库函数也花了挺长时间调试,好不容易调通了,可是待正式小 ...
受教了 谢谢 大神
主题帖子积分
实习生, 积分 38, 距离下一级还需 12 积分
实习生, 积分 38, 距离下一级还需 12 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 38, 距离下一级还需 12 积分
实习生, 积分 38, 距离下一级还需 12 积分
本帖最后由 casn 于
21:15 编辑
再补充一下,为什么会卡死,硬件IIC中程序要等接口芯片的应答电平,等不到就死等,所以会卡死(估计未加超时处理所致),模拟IIC中的等待电平是cpu自己产生的,错过了就错过了,下次再来。如果说移植性,那完全在你的程序是否写得好了,和接口形式没关系。
主题帖子积分
资深技术员, 积分 368, 距离下一级还需 132 积分
资深技术员, 积分 368, 距离下一级还需 132 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
资深技术员, 积分 368, 距离下一级还需 132 积分
资深技术员, 积分 368, 距离下一级还需 132 积分
主端加超时处理就可以了
主题帖子积分
资深技术员, 积分 368, 距离下一级还需 132 积分
资深技术员, 积分 368, 距离下一级还需 132 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
资深技术员, 积分 368, 距离下一级还需 132 积分
资深技术员, 积分 368, 距离下一级还需 132 积分
/forum.php?mod=viewthread&tid=1218016&mobile=2
主题帖子积分
高级技术员, 积分 867, 距离下一级还需 133 积分
高级技术员, 积分 867, 距离下一级还需 133 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级技术员, 积分 867, 距离下一级还需 133 积分
高级技术员, 积分 867, 距离下一级还需 133 积分
IIC的硬件没有问题,而是IIC的库函数存在BUG,建议你用模拟的IIC;需要的话,我有IIC的例程发你看看。
不会是因为你懒
主题帖子积分
初级技术员, 积分 90, 距离下一级还需 10 积分
初级技术员, 积分 90, 距离下一级还需 10 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
初级技术员, 积分 90, 距离下一级还需 10 积分
初级技术员, 积分 90, 距离下一级还需 10 积分
IIC的硬件没有问题,而是IIC的库函数存在BUG,建议你用模拟的IIC;需要的话,我有IIC的例程发你看看。 ...
你是STM32硬件IIC的例程?
主题帖子积分
高级技术员, 积分 867, 距离下一级还需 133 积分
高级技术员, 积分 867, 距离下一级还需 133 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级技术员, 积分 867, 距离下一级还需 133 积分
高级技术员, 积分 867, 距离下一级还需 133 积分
你是STM32硬件IIC的例程?
没太明白“你是STM32硬件IIC的例程?”什么意思?
不会是因为你懒
主题帖子积分
实习生, 积分 18, 距离下一级还需 32 积分
实习生, 积分 18, 距离下一级还需 32 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 18, 距离下一级还需 32 积分
实习生, 积分 18, 距离下一级还需 32 积分
IIC的硬件没有问题,而是IIC的库函数存在BUG,建议你用模拟的IIC;需要的话,我有IIC的例程发你看看。 ...
能发个例程给我吗?
主题帖子积分
高级技术员, 积分 867, 距离下一级还需 133 积分
高级技术员, 积分 867, 距离下一级还需 133 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级技术员, 积分 867, 距离下一级还需 133 积分
高级技术员, 积分 867, 距离下一级还需 133 积分
能发个例程给我吗?
可以,你把邮箱给我。
不会是因为你懒
主题帖子积分
高级技术员, 积分 867, 距离下一级还需 133 积分
高级技术员, 积分 867, 距离下一级还需 133 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级技术员, 积分 867, 距离下一级还需 133 积分
高级技术员, 积分 867, 距离下一级还需 133 积分
能发个例程给我吗?
可以,你把邮箱给我。
不会是因为你懒
主题帖子积分
助理工程师, 积分 1610, 距离下一级还需 390 积分
助理工程师, 积分 1610, 距离下一级还需 390 积分
主题帖子积分
专家等级:结帖率:45%
主题帖子积分
助理工程师, 积分 1610, 距离下一级还需 390 积分
助理工程师, 积分 1610, 距离下一级还需 390 积分
模拟的时序更好控制 也更方便移植&&
不同单片机&&也就改改io配置&&还有那个delay
己所不欲,勿施于人,争渡争渡
希望之星奖章
等级类勋章
技术新星奖章
人才类勋章
时间类勋章
甘甜之泉水
发帖类勋章
时间类勋章
涓涓之细流
发帖类勋章
技术奇才奖章
人才类勋章
时间类勋章
欢快之小溪
发帖类勋章
社区建设奖章
等级类勋章基于华清远见STM32f051的 IIC从模式实现方法 --嵌入式学院(华清远见旗下品牌)
基于华清远见STM32f051的 IIC从模式实现方法
作者:卢老师,讲师。
在大多情况下,我们使用MCU控制传感器,节点以及相关从设备,但在较为复杂的系统中,有时候也会使用MCU做为从设备。
下面是关于stm32f051的从模式实现方法,主要思路为从设备从中断里面接受 IIC主设备发送的数据,并加以处理。
下图为STM32F051的最小系统:
IIC从模式 GPIO的配置
根据原理图查ST32F051的datasheet
配置引脚:
void I2C_GPIO_Configuration(void)
&&&&&&&&&&&&&&&&GPIO_InitTypeDefGPIO_InitS
&&&&&&&&&&&&&&&&/* Enable
GPIOA clock */
&&&&&&&&&&&&&&&&RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
&&&&&&&&&&&&&&&&/*!< sEE_I2C Periph clock enable */
&&&&&&&&&&&&&&&&RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1 , ENABLE);
&&&&&&&&&&&&&&&&/*!< GPIO configuration */
&&&&&&&&&&&&&&&&/*!< Configure sEE_I2C pins: SCL */
&&&&&&&&&&&&&&&&GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
&&&&&&&&&&&&&&&&GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;//GPIO_Mode_IN
&&&&&&&&&&&&&&&&GPIO_InitStruct.GPIO_Speed = GPIO_Speed_Level_3;
&&&&&&&&&&&&&&&&GPIO_InitStruct.GPIO_OType = GPIO_OType_OD;//open-drain
&&&&&&&&&&&&&&&&GPIO_Init(GPIOB , &GPIO_InitStruct);
&&&&&&&&&&&&&&&&/*!< Configure sEE_I2C pins: SDA */
&&&&&&&&&&&&&&&&GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
&&&&&&&&&&&&&&&&GPIO_Init(GPIOB , &GPIO_InitStruct);
&&&&&&&&&&&&&&&&/* Connect PXx to I2C_SCL*/
&&&&&&&&&&&&&&&&GPIO_PinAFConfig( GPIOB , GPIO_PinSource8, GPIO_AF_1);
&&&&&&&&&&&&&&&&/* Connect PXx to I2C_SDA*/
&&&&&&&&&&&&&&&&GPIO_PinAFConfig( GPIOB ,GPIO_PinSource9, GPIO_AF_1);
IIC从模式配置,在配置时,需要设置地址,在这里设置为0XA0,而从设备的时钟属于被动模式,有IIC的主端确定。
void I2C_Configuration(void)
&&&&&&&&&&&&&&&&I2C_InitTypeDef
&&&&&&&&&&&&&&&&/* I2C configuration */
&&&&&&&&&&&&&&&&I2C_InitStruct.I2C_Mode = I2C_Mode_I2C;
&&&&&&&&&&&&&&&&I2C_InitStruct.I2C_AnalogFilter = I2C_AnalogFilter_E
&&&&&&&&&&&&&&&&I2C_InitStruct.I2C_DigitalFilter = 0x00;
&&&&&&&&&&&&&&&&I2C_InitStruct.I2C_OwnAddress1 =0xA0;
&&&&&&&&&&&&&&&&I2C_InitStruct.I2C_Ack = I2C_Ack_E
&&&&&&&&&&&&&&&&I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7
&&&&&&&&&&&&&&&&I2C_InitStruct.I2C_Timing = 0xb0420f13;//100Kbits
&&&&&&&&&&&&&&&&/* I2C Peripheral Enable */
&&&&&&&&&&&&&&&&I2C_Cmd(I2C1, ENABLE);
&&&&&&&&&&&&&&&&/* Apply I2C configuration after enabling it */
&&&&&&&&&&&&&&&&I2C_Init(I2C1, &I2C_InitStruct);
下面是IIC中断函数的实现
void I2C1_IRQHandler(void)
&&&&&&&&&&&&&&&&I2C_ClearITPendingBit(I2C1, I2C_ISR_ADDR|I2C_ISR_STOPF );
&&&&&&&&&&&&&&&&if(I2C_GetITStatus( I2C1, I2C_IT_RXNE));
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&I2Cbuf[I2C_IT_FLAG++]=I2C_ReceiveData(I2C1);
&&&&&&&&&&&&&&&&}
中断函数里面,清中断为2种,一种为IIC从地址校验成功,一种是数据传输过程中停止。对于从设备,接受数据中断才是我们最需要的,这里我们将IIC接受的数据存入定义好的数组中,这样以备后用,同是,在读取接受数据时,硬件已经将接受数据的中断清楚掉。stm32的I2C为什么会有bug?
你用着只有微量bug的芯片就不要抱怨啦,人家做芯片的也是编程啊,调试方法更麻烦更多钱……最近入职某芯片厂,表示从此开始了芯片bug堆里的编程…
有没有Bug的芯片么?
是固件库设计不合理,while 加 Flag 很容易死循环。建议用中断加DMA。现在我搭载在自己写的实时内核,一个总线挂了四五个设备,各个任务乱序访问,一点问题也没发现过。觉得有些人是因为没摸透stm32 的iic功能。
bug听说为了规避菲利普专利问题,设计的特别复杂,导致特别容易错过反馈信号,一中断反馈信号没了…整个程序就崩溃了。现在hal库应该是解决了这个问题…解决方法是关闭所有中断……(还没有测试)
考虑到移植性,一直坚持端口模拟IIC以及SPI
我一直没能理解的问题是,为什么有人执着于硬件I2C?I2C作为时钟驱动型的协议,用软件模拟时,不关中断,不存在阻塞(类似while(flag)那种)
stm32 用IIC跟多个芯片通讯时好像有BUG,单个芯片没问题。模拟IIC比较好用!
做过stm32f103的硬件i2c,建议看看官方的例程,貌似要跳过什么,忘记了。我直接拿过来就可以用了。
硬件设计有些复杂,也不能说是bug,只是有些不足,也有人稳定的运行过。所以有时候大家图省,也就模拟了。
已有帐号?
无法登录?
社交帐号登录

我要回帖

更多关于 iic器件 的文章

 

随机推荐