用封装的EMC写一字节的接口对该两个寄存器的地址进行操作,例如
u16 EMC\_Rst()
{
printf("EMC\_Rst\r\n");
EMC\_WriteByte(0x22, 0xF0); //EMC重置
delay\_ms(50);
return RET_SUCC;
}
u16 EMC\_Start()
{
printf("EMC\_Start\r\n");
EMC\_WriteByte(0x03,0x80); //EMC开启读取
printf("EMC Start end");
return RET_SUCC;
}
u16 EMC\_Initializes(void)
{
I2C2\_GPIO\_Configuration();
I2C2\_Configuration();
delay\_ms(50);
return RET_SUCC;
}```
u16 EMC\_Init()
{
EMC\_Initializes();
EMC\_Rst();
printf("EMC Init end");
return RET_SUCC;
}
```c
//EMC写一字节
u16 EMC\_WriteByte(uint16\_t Addr, uint16\_t Data)
{
I2C\_AcknowledgeConfig(I2C2,ENABLE);
while(I2C\_GetFlagStatus(I2C2, I2C_FLAG_BUSY));
/\* 1.开始 \*/
I2C\_GenerateSTART(I2C2, ENABLE);
while(!I2C\_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));
/\* 2.设备地址/写 \*/
I2C\_Send7bitAddress(I2C2, EMC_DEV_ADDR, I2C_Direction_Transmitter); //数据地址
while(!I2C\_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
/\* 3.数据地址 \*/
I2C\_SendData(I2C2, Addr); //寄存器数据地址(8位)
while(!I2C\_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
/\* 4.写一字节数据 \*/
I2C\_SendData(I2C2, Data); //发送数据
while(!I2C\_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
/\* 5.停止 \*/
I2C\_GenerateSTOP(I2C2, ENABLE);
return RET_SUCC;
}
//EMC读一字节
u16 EMC\_ReadByte(uint16\_t Addr, uint16\_t \*Data)
{
I2C\_AcknowledgeConfig(I2C2,ENABLE);
while(I2C\_GetFlagStatus(I2C2, I2C_FLAG_BUSY));
/\* 1.开始 \*/
I2C\_GenerateSTART(I2C2, ENABLE);
while(!I2C\_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));
/\* 2.设备地址/写 \*/
I2C\_Send7bitAddress(I2C2, EMC_DEV_ADDR, I2C_Direction_Transmitter);
while(!I2C\_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
/\* 3.数据地址 \*/
I2C\_SendData(I2C2, Addr); //数据地址(8位)
while(!I2C\_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
/\* 4.重新开始 \*/
I2C\_GenerateSTART(I2C2, ENABLE);
while(!I2C\_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));
/\* 5.设备地址/读 \*/
I2C\_Send7bitAddress(I2C2, EMC_READ_ADDR, I2C_Direction_Receiver);
while(!I2C\_CheckEvent(I2C2, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
/\* 6.读一字节数据 \*/
I2C\_AcknowledgeConfig(I2C2, DISABLE); //产生非应答
while(I2C\_GetFlagStatus(I2C2, I2C_FLAG_RXNE) == RESET);
\*Data = I2C\_ReceiveData(I2C2); //读取数据
/\* 7.停止 \*/
I2C\_GenerateSTOP(I2C2, ENABLE);
return RET_SUCC;
}
2.读取EMC寄存器的数据
这部分在读取温度数据之前,为了检测硬件I2C读取接口的准确性,我们可以先在EMC寄存器中找到存有固定值的寄存器读一读,将读出的数据与真实数据比较一下是否一致。比如存有该设备ID的寄存器,先读取该寄存器来检验一下接口的准确性。
读取的过程也很简单,传入对应的寄存器地址直接读取该值,比如
u16 EMC\_ID\_Get(u16 \*ID)
{
EMC\_Init();
EMC\_Start();
delay\_ms(50);
## 最后
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**
**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/9fc456b161710a9956d3eb18897cb7a6.png)
![img](https://img-blog.csdnimg.cn/img_convert/f456b2b64b4a27f222ee3a7d84da50b2.jpeg)
![img](https://img-blog.csdnimg.cn/img_convert/f577549a0bc0b8f4a02eeb1351a07fbc.png)
![img](https://img-blog.csdnimg.cn/img_convert/85d86efd27c9504b3c61e38968c9c21c.png)
![img](https://img-blog.csdnimg.cn/img_convert/3dfb8b3ebc6315dec82b0a09dcbbc4ef.png)
![img](https://img-blog.csdnimg.cn/img_convert/1347e2c3e3b00cf09b99a6e94e9e2da2.png)
![](https://img-blog.csdnimg.cn/img_convert/27391a30c7d5530a1988b8a215c80e76.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**
[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!
果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!