[STM8] stm8的i2c配置问题求教~

[复制链接]
 楼主| 蝙蝠侠 发表于 2016-10-8 18:38 | 显示全部楼层 |阅读模式
在学习用 stm8s103 的 i2c 进行通讯的时候,在配置时遇到一个问题,初始化 i2c 时有一个参数需要填写,一个 16位自身地址 的参数。但是我并不知道这个自身地址是多少啊?
我网上问了一下有人中说这个 16位自身地址 是用户自己设置的,具体是设置 Stm8s.h 中的 I2C_OARH 和 I2C_OARL 。是这样的吗? 如果是,那这两个参数是指 16位自身地址的 高8位 和 低8位 吗?
以下是该部分的库函数,未作修改。

<Stm8s.h>
#define  I2C_0ARH_RESET_VALUE  ((u8)0x00)
#define  I2C_0ARL_RESET_VALUE  ((u8)0x00)

<Stm8s_i2c.c>
I2C->0ARH = I2C_0ARH_RESET_VALUE ;
I2C->0ARL = I2C_0ARL_RESET_VALUE;

 楼主| 蝙蝠侠 发表于 2016-10-9 09:13 | 显示全部楼层
NE5532 发表于 2016-10-9 17:02 | 显示全部楼层
I2C只有当从机的时候才有地址的,楼主你到底在调主机模式还是在调从机模式?还是在调双机I2C通讯啊?
lulugl 发表于 2016-10-9 17:04 | 显示全部楼层
好象有些设备的地址是固定的吧,数据手册有说明的
 楼主| 蝙蝠侠 发表于 2016-10-10 11:40 | 显示全部楼层
NE5532 发表于 2016-10-9 17:02
I2C只有当从机的时候才有地址的,楼主你到底在调主机模式还是在调从机模式?还是在调双机I2C通讯啊? ...

我是看了固件库函数
这是函数、参数介绍
/**
  * @brief Initializes the I2C according to the specified parameters in standard or fast mode.
  * @param[in] OutputClockFrequencyHz : Specifies the output clock frequency in Hz.
  * @param[in] OwnAddress : Specifies the own address.
  * @param[in] DutyCycle : Specifies the duty cycle to apply.
  * This parameter can be any of the  @ref I2C_DutyCycle_TypeDef enumeration.
  * @param[in] Ack : Specifies the acknowledge mode to apply.
  * This parameter can be any of the  @ref I2C_Ack_TypeDef enumeration.
  * @param[in] AddMode : Specifies the addressing mode to apply.
  * This parameter can be any of the  @ref I2C_AddMode_TypeDef enumeration.
  * @param[in] InputClockFrequencyMHz : Specifies the input clock frequency in MHz.
  * @retval None
  */
这是函数名
void I2C_Init(u32 OutputClockFrequencyHz, u16 OwnAddress, I2C_DutyCycle_TypeDef DutyCycle, I2C_Ack_TypeDef Ack, I2C_AddMode_TypeDef AddMode, u8 InputClockFrequencyMHz )
 楼主| 蝙蝠侠 发表于 2016-10-10 11:42 | 显示全部楼层
NE5532 发表于 2016-10-9 17:02
I2C只有当从机的时候才有地址的,楼主你到底在调主机模式还是在调从机模式?还是在调双机I2C通讯啊? ...

我是要让单片机做主机读取从机发送来的数据,但是这个初始化看不懂= =
新人求教~~~~
NE5532 发表于 2016-10-10 13:20 | 显示全部楼层
既然上面有OwnAddress,那AddMode肯定不是设置自己的Address,这个你要看一下函数里面怎么用的了,读一下代码,或者看有没有用库发送的例程。
 楼主| 蝙蝠侠 发表于 2016-10-11 09:42 | 显示全部楼层
NE5532 发表于 2016-10-10 13:20
既然上面有OwnAddress,那AddMode肯定不是设置自己的Address,这个你要看一下函数里面怎么用的了,读一下代 ...

那个库函数 的代码实在看不懂啊。
我自己写了一份模拟I2C,我想问一下我现在烧录进去,怎么测试我写的这部分代码是有效的?
 楼主| 蝙蝠侠 发表于 2016-10-11 09:42 | 显示全部楼层
蝙蝠侠 发表于 2016-10-11 09:42
那个库函数 的代码实在看不懂啊。
我自己写了一份模拟I2C,我想问一下我现在烧录进去,怎么测试我写的这 ...

目前作为从机的IC还没有拿到,只是给ST配置了模拟I2C。
NE5532 发表于 2016-10-11 13:16 | 显示全部楼层
这个是硬件I2C的库把,模拟的你自己写就是了,要简单得多。你可以随便找个I2C的器件来调,比如24C02
 楼主| 蝙蝠侠 发表于 2016-10-11 18:31 | 显示全部楼层
NE5532 发表于 2016-10-11 13:16
这个是硬件I2C的库把,模拟的你自己写就是了,要简单得多。你可以随便找个I2C的器件来调,比如24C02 ...

恩恩 我现在就是自己写的,那个库函数我看不懂。所有驱动我都自己写了。
 楼主| 蝙蝠侠 发表于 2016-10-11 18:36 | 显示全部楼层
NE5532 发表于 2016-10-11 13:16
这个是硬件I2C的库把,模拟的你自己写就是了,要简单得多。你可以随便找个I2C的器件来调,比如24C02 ...

不过目前还没有带I2C的器件,还无法测试我的驱动是否可用。
dentsgot 发表于 2016-10-11 19:46 | 显示全部楼层
你是要控制从机,还是控制主机呢?
 楼主| 蝙蝠侠 发表于 2016-10-12 09:20 | 显示全部楼层
dentsgot 发表于 2016-10-11 19:46
你是要控制从机,还是控制主机呢?

控制从机控制主机是什么意思?
我目前只是写完了模拟I2C的驱动代码。
目前手上没有其他带I2C的器件,但最终目的是要让我的单片机(STM8S103)能读取其他I2C器件发送过来的数据。
Stannis 发表于 2016-10-13 18:48 | 显示全部楼层
有没有用库发送的例程,参考一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

51

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部