基于Renesas芯片的 TH06C温湿度的嵌入式开发 (五)

 

                                 代码、高清pdf版在我的下载里可以找到

基于上一章,我们知道要0x80--0xE3--0x81--读取数据这样的发送读取方式,因此我们需要明白生成代码函数的参数意义

 

1、发送函数,找到如下函数,各个参数的意思如图;注意wait这个参数,我们就给0xff,这个是等待起始条件的时长,不能太短,所以给个0xff。比如我要发送1个长度的命令:

 R_IICA0_Master_Send(TH06_ADDER,TH06_CMD,1u,0xffu);

基于Renesas芯片的 TH06C温湿度的嵌入式开发 (五)_第1张图片

 

 

2、接收函数,找到如下函数,各个参数的意思如图,比如我要接收2个长度的数据:

R_IICA0_Master_Receive(TH06_ADDER,TH06_TEMP,2u,0xffu);

基于Renesas芯片的 TH06C温湿度的嵌入式开发 (五)_第2张图片

 

这两个函数懂了,下面我们开始编程!

 

变量常量定义

  1. 首先我们需要地址常量,宏定义一个地址

   #define TH06_ADDER  0x80u

  1. 存放读取温度的命令数组

          unsigned char TH06_CMD[1]={0xE3u};

  1. 存放读取的温度数值数组,16位,2个字节

   unsigned char TH06_TEMP[2];

  1. 注意,为了不使总线的状态错乱掉,我们需要一个全局变量来指示当前的总线状态,定义一个全局变量,以及5个状态,

unsigned char I2C_STATE;

 

#define IDLE      0u  //空闲

#define Sending   1u  //正在发送

#define SendEnd   2u  //发送完成

#define Recving   3u  //正在接收

#define RecvEnd  4u  //接收完成

 

 

上面的代码定义在文件的位置如下图红框内:

 

 

基于Renesas芯片的 TH06C温湿度的嵌入式开发 (五)_第3张图片

基于Renesas芯片的 TH06C温湿度的嵌入式开发 (五)_第4张图片

 

主函数编写

I2C总线状态初始化,然后再状态切换!

 

基于Renesas芯片的 TH06C温湿度的嵌入式开发 (五)_第5张图片

 

上面就是在对于的状态下,实现对应的操作。

白话流程:

当前总线空闲,我进入空闲状态,然后向TH06C发送E3命令,就是发送写操作,状态切为正在发送,

然后一直等到发送完成(这里的状态切换在发送完成函数里,下面会讲),进入发送完成状态,接下来准备读操作,状态切为正在接受,

然后一直等到接收完成(这里的状态切换在接收完成函数里,下面会讲),切为空闲。

 

以上不断循环就ok了

 

 

 

 

下面讲解发送完成、接收完成函数中的操作

在函数中,加入图中红色方框的代码,这样就完成状态的切换。

基于Renesas芯片的 TH06C温湿度的嵌入式开发 (五)_第6张图片

 

 

接下来是重点,非常重要的一点;

我们重新看一下通信的时序图,

基于Renesas芯片的 TH06C温湿度的嵌入式开发 (五)_第7张图片

 

因为生成的接收函数,发送函数被调用时,都会产生一个起始信号,有些I2C是要检测到停止信号允许产生起始信号因此如果我们在发送完成的时候不做处理,这个就会出现错误,下面找到主芯片的数据手册,我们找到设置这个的寄存器,就是把STCENn置位1。

基于Renesas芯片的 TH06C温湿度的嵌入式开发 (五)_第8张图片

 

所以我们在发送完成函数中要这样处理:

停止总线运行(IICE0=0),然后运行不产生停止条件就可以生成其实条件(STCEN0=1),总线开始运行(IICE0=1)。

所以还需在发送完成函数中添加如下红色框的语句

基于Renesas芯片的 TH06C温湿度的嵌入式开发 (五)_第9张图片

 

 

这样整个代码就完成了!

下载仿真,得的数据如下

基于Renesas芯片的 TH06C温湿度的嵌入式开发 (五)_第10张图片

 

代入换算公式:

基于Renesas芯片的 TH06C温湿度的嵌入式开发 (五)_第11张图片

 

差不多为15.01摄氏度,跟今天天气差不多,有点冷!!

 

这里说一句,我实际项目不会这么做,实际项目会改写成一个函数调用实现,这样的话就需要改生成的代码,这样就需要了解生成的代码,这样太麻烦,所以我不记录这个详细的过程。不过你看懂了生成代码,改代码也就1小时的事情! 哈哈

 

你可能感兴趣的:(基于Renesas芯片的 TH06C温湿度的嵌入式开发 (五))