欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

【BLE】TLSR8258开发记录之9--IIC驱动TMP102

发布时间:2025/4/16 编程问答 39 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【BLE】TLSR8258开发记录之9--IIC驱动TMP102 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1、说明

基于SDK3.4完成温度传感器TMP102的驱动(参考甜甜大香瓜的博客点击)
TMP102 参数如下:

2、操作

A.在MG_Application目录下新建MG_TMP102.c和MG_TMP102.h,
其中,MG_TMP102.c的代码为

/* * MG_TMP102.c * * Created on: 2019-9-23 * Author: huangjinxu */ #include "MG_tmp102.h" //TMP相关寄存器定义 #define TMP102SLAVEADDR 0x90 //0x48<<1 //TMP102 寄存器地址 #define TMP102_REG_ADDR_TEMPERATURE 0x00 #define TMP102_REG_ADDR_CONFIG 0x01 /* Register length */ #define IRTEMP_REG_LEN 2 #define I2CCLOCK (unsigned char)(CLOCK_SYS_CLOCK_HZ/(4*200000)) void MG_TMP102_ReadReg(unsigned char addr, unsigned char *pBuf, unsigned char nBytes); void MG_TMP102_WriteReg(unsigned char addr, unsigned char *pBuf, unsigned char nBytes); void MG_TMP102_Config(unsigned char* pData, unsigned char read_write); /* 函数说明:传感器初始化 入口参数:none 最后修改时间:20190906 14:00 */ void MG_Sensor_Init() {unsigned char Config_Read_buf[2]= {0x00};unsigned char Config_Write_buf[2] = {0x70,0xA0};//PC0:SDA,PC1:SCLi2c_gpio_set(I2C_GPIO_GROUP_C0C1);//TMP102SLAVEADDR,IIC:200KHzi2c_master_init(TMP102SLAVEADDR,I2CCLOCK);//读取配置寄存器MG_TMP102_Config(Config_Read_buf,TPM102_REGISTER_READ);//配置寄存器,开启温度转换功能MG_TMP102_Config(Config_Write_buf,TPM102_REGISTER_WRITE);//读取配置寄存器MG_TMP102_Config(Config_Read_buf,TPM102_REGISTER_READ); } /* 函数说明:传感器读出温度数据 入口参数:*pData:存放温度数据的缓冲 最后修改时间:20190906 14:00 */ void MG_Sensor_Work(unsigned char *pData) {MG_TMP102_ReadReg(TMP102_REG_ADDR_TEMPERATURE,pData,IRTEMP_REG_LEN); } //TMP102寄存器设置 void MG_TMP102_Config(unsigned char* pData, unsigned char read_write) {switch (read_write){case TPM102_REGISTER_READ:MG_TMP102_ReadReg(TMP102_REG_ADDR_CONFIG,pData,IRTEMP_REG_LEN);break;case TPM102_REGISTER_WRITE:MG_TMP102_WriteReg(TMP102_REG_ADDR_CONFIG,pData,IRTEMP_REG_LEN);break;} } //TMP102读寄存器 void MG_TMP102_ReadReg(unsigned char addr, unsigned char *pBuf, unsigned char nBytes) {i2c_read_series(addr,1,pBuf,nBytes); } //TMP102写寄存器 void MG_TMP102_WriteReg(unsigned char addr, unsigned char *pBuf, unsigned char nBytes) {i2c_write_series(addr,1,pBuf,nBytes); }

MG_TMP102.h的代码如下

/* * MG_TMP102.h * * Created on: 2019-9-23 * Author: huangjinxu */ #ifndef MG_TMP102_H_ #define MG_TMP102_H_ //公共头文件 #include "tl_common.h" #define TPM102_REGISTER_READ 0 #define TPM102_REGISTER_WRITE 1 //任意字节获取 #define BYTE0(Temp) ( *( ( (u8*)(&Temp)+0 ) ) ) #define BYTE1(Temp) ( *( ( (u8*)(&Temp)+1 ) ) ) #define BYTE2(Temp) ( *( ( (u8*)(&Temp)+2 ) ) ) #define BYTE3(Temp) ( *( ( (u8*)(&Temp)+3 ) ) ) //外部函数 extern void MG_Sensor_Init(); extern void MG_Sensor_Work(unsigned char *pData); #endif /* MG_TMP102_H_ */

B.tl_common.h中添加以下头文件路径

#include "drivers/8258/i2c.h" #include "vendor/8258_ble_remote/MG_Application/MG_TMP102.h"

C.在app.c的user_init_normal函数中中添加测试代码

u8 sensor_buf[2]={0x00,0x00};u16 sensor_temp=0;u8 sensor_out[2]={0x00,0x00};MG_Sensor_Init();MG_Sensor_Work(sensor_buf);sensor_temp = (sensor_buf[0]*256);sensor_temp |= sensor_buf[1];sensor_temp = sensor_temp>>4;//低4位无作用printf("Sensor data[1] is: %d\r\n",sensor_temp);// sensor_data = (float)(sensor_temp*0.0625);// sensor_temp = (u16)(sensor_data*100);//printf("Sensor data[1] is: %d\r\n",sensor_temp);sensor_temp *= 100;//先扩大100倍sensor_temp = sensor_temp>>4;//sensor_temp*0.0625sensor_out[0] = (u8)((sensor_temp>>8)&0xFF);sensor_out[1] = (u8)((sensor_temp)&0xFF);printf("Sensor data[0] is: %x\r\n",sensor_out[0]);printf("Sensor data[1] is: %x\r\n",sensor_out[1]);printf("Sensor data is: %d\r\n",sensor_temp);

3、现象

一上电显示读取到的温度为2731/100 = 27.31℃

《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

总结

以上是生活随笔为你收集整理的【BLE】TLSR8258开发记录之9--IIC驱动TMP102的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。