打印
[STM8]

stm8的i2c配置问题求教~

[复制链接]
1643|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
蝙蝠侠|  楼主 | 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 | 只看该作者
好象有些设备的地址是固定的吧,数据手册有说明的

使用特权

评论回复
5
蝙蝠侠|  楼主 | 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 )

使用特权

评论回复
6
蝙蝠侠|  楼主 | 2016-10-10 11:42 | 只看该作者
NE5532 发表于 2016-10-9 17:02
I2C只有当从机的时候才有地址的,楼主你到底在调主机模式还是在调从机模式?还是在调双机I2C通讯啊? ...

我是要让单片机做主机读取从机发送来的数据,但是这个初始化看不懂= =
新人求教~~~~

使用特权

评论回复
7
NE5532| | 2016-10-10 13:20 | 只看该作者
既然上面有OwnAddress,那AddMode肯定不是设置自己的Address,这个你要看一下函数里面怎么用的了,读一下代码,或者看有没有用库发送的例程。

使用特权

评论回复
8
蝙蝠侠|  楼主 | 2016-10-11 09:42 | 只看该作者
NE5532 发表于 2016-10-10 13:20
既然上面有OwnAddress,那AddMode肯定不是设置自己的Address,这个你要看一下函数里面怎么用的了,读一下代 ...

那个库函数 的代码实在看不懂啊。
我自己写了一份模拟I2C,我想问一下我现在烧录进去,怎么测试我写的这部分代码是有效的?

使用特权

评论回复
9
蝙蝠侠|  楼主 | 2016-10-11 09:42 | 只看该作者
蝙蝠侠 发表于 2016-10-11 09:42
那个库函数 的代码实在看不懂啊。
我自己写了一份模拟I2C,我想问一下我现在烧录进去,怎么测试我写的这 ...

目前作为从机的IC还没有拿到,只是给ST配置了模拟I2C。

使用特权

评论回复
10
NE5532| | 2016-10-11 13:16 | 只看该作者
这个是硬件I2C的库把,模拟的你自己写就是了,要简单得多。你可以随便找个I2C的器件来调,比如24C02

使用特权

评论回复
11
蝙蝠侠|  楼主 | 2016-10-11 18:31 | 只看该作者
NE5532 发表于 2016-10-11 13:16
这个是硬件I2C的库把,模拟的你自己写就是了,要简单得多。你可以随便找个I2C的器件来调,比如24C02 ...

恩恩 我现在就是自己写的,那个库函数我看不懂。所有驱动我都自己写了。

使用特权

评论回复
12
蝙蝠侠|  楼主 | 2016-10-11 18:36 | 只看该作者
NE5532 发表于 2016-10-11 13:16
这个是硬件I2C的库把,模拟的你自己写就是了,要简单得多。你可以随便找个I2C的器件来调,比如24C02 ...

不过目前还没有带I2C的器件,还无法测试我的驱动是否可用。

使用特权

评论回复
13
dentsgot| | 2016-10-11 19:46 | 只看该作者
你是要控制从机,还是控制主机呢?

使用特权

评论回复
14
蝙蝠侠|  楼主 | 2016-10-12 09:20 | 只看该作者
dentsgot 发表于 2016-10-11 19:46
你是要控制从机,还是控制主机呢?

控制从机控制主机是什么意思?
我目前只是写完了模拟I2C的驱动代码。
目前手上没有其他带I2C的器件,但最终目的是要让我的单片机(STM8S103)能读取其他I2C器件发送过来的数据。

使用特权

评论回复
15
Stannis| | 2016-10-13 18:48 | 只看该作者
有没有用库发送的例程,参考一下

使用特权

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

本版积分规则

9

主题

51

帖子

0

粉丝