[STM8]

STM8S硬件I2C详解

[复制链接]
10126|16
手机看帖
扫描二维码
随时随地手机跟帖
通宵敲代码|  楼主 | 2016-12-4 23:54 | 显示全部楼层 |阅读模式

最近做个小项目,用到了STM8的I2C,
进过ST的硬件I2C一直都不怎么受待见,
我还是狠狠心选用了,给自己一个bug吧


先上点资料

STM8S208C8_PCB.pdf (601.84 KB)
通宵敲代码|  楼主 | 2016-12-4 23:59 | 显示全部楼层

STM8的I2C根STM32的基本是完全一样,毕竟是一家子出来的产品,
STM8也有自己的函数库,结构跟STM32也几乎形同,
不过是更改了几个函数名,或者参数变量罢了,
具体使用的时候,完全可以参考STM32的程序结构来写

如下图是STM8的硬件I2C库函数,是不是跟STM32的很相似啊
QQ截图20161205000534.png

使用特权

评论回复
通宵敲代码|  楼主 | 2016-12-5 00:08 | 显示全部楼层

看上去函数不少,其实我们真正用的时候,
有很大部分使用不到的,不过还是建议朋友们多熟悉熟悉,
说不行那个功能就用上了呢

下面简单介绍几个常用的函数,
感兴趣的,可以自己深入研究研究

I2C_DeInit();        //默认初始化I2C,
                           //主要是提供一些基本初始化功能,
                           //不应定使用我们的实际应用

I2C_Init(I2C_SPEED, 0xA0, I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_7BIT, 16);
                          //I2C的初始化函数,参数依次为I2C速率、地址、时钟结构、应答模式、地址模式、时钟频率

I2C_Cmd(ENABLE);  //I2C的使能与禁用函数

基本有了以上三个函数,I2C就可以初始化使用了
当然有些朋友还会用到中断,那就得靠下面这个函数了

I2C_ITConfig((I2C_IT_TypeDef)(I2C_IT_EVT | I2C_IT_BUF) , ENABLE);   
                          //第一个参数是配置I2C中断通道,第二个设置中断状态,

使用中断,记得要开启STM8的全局中断哦,函数如下
enableInterrupts();  //使能全局中断








使用特权

评论回复
通宵敲代码|  楼主 | 2016-12-5 00:13 | 显示全部楼层


初始化,完成了就是数据的发送了,
其实也简单,具体函数如下,大家可以参考

QQ截图20161205000534.png

ST的I2C结构都差不多,用起来也有一个固定的程序格式,
分别是主模式收发、从模式收发,如下四幅图
至于具体的事件,只需要仿照例程进行查询判断就可以了

主模式I2C数据发送
主发送.png

主模式I2C数据接收
主接收.png

从模式I2C数据发送
从发送.png

从模式I2C数据接收
从接受.png










使用特权

评论回复
rogerllg| | 2016-12-5 13:09 | 显示全部楼层
ST的 I2C函数有些不合理,如果I2C不响应了,就直接卡死到里面了~

使用特权

评论回复
huaiqiao| | 2016-12-5 14:10 | 显示全部楼层
通宵敲代码 发表于 2016-12-4 23:59
STM8的I2C根STM32的基本是完全一样,毕竟是一家子出来的产品,
STM8也有自己的函数库,结构跟STM32也几乎 ...

是的呢,事实上,刚开始接触的是32,等到一些非常简单,但是要求不严苛的项目中,又开始用stm8了,反过来再用stm8的时候,就感觉它就是32的缩小版。
O(∩_∩)O哈哈~

使用特权

评论回复
玛尼玛尼哄| | 2016-12-5 15:10 | 显示全部楼层
这个芯片应该很便宜的,淘宝上好多几块钱包邮的开发板。

使用特权

评论回复
wztoad| | 2016-12-5 15:10 | 显示全部楼层
stm8 iic一直是bug样的存在,开发界面也不好,不如用m0+的

使用特权

评论回复
xyz549040622| | 2016-12-5 21:44 | 显示全部楼层

使用特权

评论回复
oxiazai| | 2016-12-6 21:03 | 显示全部楼层
感谢

使用特权

评论回复
通宵敲代码|  楼主 | 2016-12-7 22:10 | 显示全部楼层
rogerllg 发表于 2016-12-5 13:09
ST的 I2C函数有些不合理,如果I2C不响应了,就直接卡死到里面了~

嗯,确实,内部N多死循环,
有时候只能找其他的解决方案

使用特权

评论回复
通宵敲代码|  楼主 | 2016-12-7 22:12 | 显示全部楼层
huaiqiao 发表于 2016-12-5 14:10
是的呢,事实上,刚开始接触的是32,等到一些非常简单,但是要求不严苛的项目中,又开始用stm8了,反过来 ...

需求决定方案,改用那种就用那种,

你这种感觉是对的,
毕竟都是ST的产品,
片上外设结构肯定差不多,
如果你深入到内核相关的代码,
差别就比较明显了

使用特权

评论回复
通宵敲代码|  楼主 | 2016-12-7 23:47 | 显示全部楼层
wztoad 发表于 2016-12-5 15:10
stm8 iic一直是bug样的存在,开发界面也不好,不如用m0+的

STM8的I2C一直是臭名昭著,
不过好在这两年有了不少改进!

使用特权

评论回复
huaiqiao| | 2016-12-8 16:00 | 显示全部楼层
通宵敲代码 发表于 2016-12-7 22:12
需求决定方案,改用那种就用那种,

你这种感觉是对的,

是的,如果反过来再用stm8 ,相对比较简单了。肯定的,大体的感觉是相似或者类似的,细节上肯定有所不同么。
对了,版主你stm8用iar还是stvd啊

使用特权

评论回复
通宵敲代码|  楼主 | 2016-12-10 20:12 | 显示全部楼层
玛尼玛尼哄 发表于 2016-12-5 15:10
这个芯片应该很便宜的,淘宝上好多几块钱包邮的开发板。

很便宜的,一般的也就才1块多。

使用特权

评论回复
玛尼玛尼哄| | 2016-12-17 19:39 | 显示全部楼层
通宵敲代码 发表于 2016-12-10 20:12
很便宜的,一般的也就才1块多。

这么便宜,下次我多买几个

使用特权

评论回复
猫灵的星星| | 2019-11-6 10:46 | 显示全部楼层
感谢楼主分享资料

使用特权

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

本版积分规则

个人签名:年轻不是资本,奋斗才是良策!

301

主题

7532

帖子

67

粉丝