【STM32F103】STM32F103硬件IIC读取温度传感器EMC1314_stm32f103 i2c 读写

用封装的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)

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值