打印
[STM8]

STM8S硬件I2C详解

[复制链接]
10741|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

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


先上点资料

STM8S208C8_PCB.pdf (601.84 KB)
STM8S系列参考手册-中文-第4版.pdf (4.1 MB)
stm8s-a_stdperiph_drivers_um.chm (3.71 MB)
STM8S库函数中文参考.zip (3.78 MB)




沙发
通宵敲代码|  楼主 | 2016-12-4 23:59 | 只看该作者

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

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

使用特权

评论回复
板凳
通宵敲代码|  楼主 | 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 | 只看该作者


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



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

主模式I2C数据发送


主模式I2C数据接收


从模式I2C数据发送


从模式I2C数据接收











使用特权

评论回复
5
rogerllg| | 2016-12-5 13:09 | 只看该作者
ST的 I2C函数有些不合理,如果I2C不响应了,就直接卡死到里面了~

使用特权

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

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

使用特权

评论回复
7
玛尼玛尼哄| | 2016-12-5 15:10 | 只看该作者
这个芯片应该很便宜的,淘宝上好多几块钱包邮的开发板。

使用特权

评论回复
8
wztoad| | 2016-12-5 15:10 | 只看该作者
stm8 iic一直是bug样的存在,开发界面也不好,不如用m0+的

使用特权

评论回复
9
xyz549040622| | 2016-12-5 21:44 | 只看该作者

使用特权

评论回复
10
oxiazai| | 2016-12-6 21:03 | 只看该作者
感谢

使用特权

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

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

使用特权

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

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

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

使用特权

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

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

使用特权

评论回复
14
huaiqiao| | 2016-12-8 16:00 | 只看该作者
通宵敲代码 发表于 2016-12-7 22:12
需求决定方案,改用那种就用那种,

你这种感觉是对的,

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

使用特权

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

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

使用特权

评论回复
16
玛尼玛尼哄| | 2016-12-17 19:39 | 只看该作者
通宵敲代码 发表于 2016-12-10 20:12
很便宜的,一般的也就才1块多。

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

使用特权

评论回复
17
猫灵的星星| | 2019-11-6 10:46 | 只看该作者
感谢楼主分享资料

使用特权

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

本版积分规则

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

302

主题

7539

帖子

69

粉丝