STM32F103C8T6 驱动MTS4温度传感器

一、传感器介绍

        MTS4系列是数字模拟混合信号温度传感芯片,最高测温精度±0.1℃,用户无需进行校准。温度芯片感温原理基于CMOS半导体PN节温度与带隙电压的特性关系,经过小信号放大、模数转换、数字校准补偿后,数字总线输出,具有精度高、一致性好、测温快、功耗低、可编程配置灵活、寿命长等优点。
芯片内置16-bit ADC,分辨率0.004°C,具有-103°C到+153°C的超宽工作范围。芯片在出厂前经过100%的测试校准,根据温度误差特性进行校准系数的拟合,芯片内部自动进行补偿计算。芯片支持数字I2C通信接口、测温数据内存访问、功能配置等均可通过数字协议指令实现。I2C接口适合高速率的板级应用场景,最高接口速度可达2MHz。
芯片内置非易失性E2PROM存储单元,用于保存芯片ID号、高低温报警阈值、温度校准修正值以及用户自定义信息,如传感器节点编号、位置信息等。

二、驱动说明

        官方提供了IIC和单总线的驱动例程,但使用的MCU为MM32SPIN05,由于手上没有MM32SPIN05的开发板,所以将例程改为STM32F103的。

使用STM32CubeMX生成集成代码,基础代码包含USART1、GPIO、RCC,外设驱动库使用LL库。

三、硬件接口

SCL---PC6
SDA---PC7

UART_TX---PA9

LED---PC13

四、主代码

/* USER CODE BEGIN Header */
/********************************************************************************* @file           : main.c* @brief          : Main program body******************************************************************************* @attention** Copyright (c) 2024 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "usart.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stdio.h"
#include "delay.h"
#include "T117_MTS4_I2C.h"
/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 *//* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 */uint8_t status,Cfg;uint16_t Temp_u16;float Temp_f;/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_AFIO);LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);/* System interrupt init*/NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);/* SysTick_IRQn interrupt configuration */NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),15, 0));/** DISABLE: JTAG-DP Disabled and SW-DP Disabled*/LL_GPIO_AF_DisableRemap_SWJ();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit */SysTick_Init();/* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */printf("App start\n");printf("SystemCoreClock:%d\n", SystemCoreClock);uint8_t ID[8];if( MY_ReadID( ID ) == 0){printf("MTS4:%02X%02X\n", ID[1], ID[0]);}if(T117I2C_Transmit(I2C_ADDR, EE_Cmd,0xB8)!= GPIOI2C_XFER_LASTACK){PR("Recall FALSE\n");}delay_ms(2);MY_ReadStatusConfig( &status, &Cfg);PR("SC:%2X %2X\r\n",status,Cfg);	/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */LL_GPIO_TogglePin(GPIOC, LL_GPIO_PIN_13);if( MY_ConvertTemp()== 1){delay_ms(tCon_A32);MY_ReadTempWaiting(&Temp_u16);Temp_f=MY_OutputtoTemp((int16_t)Temp_u16);PR("temp:%.2f\r\n",Temp_f);			}delay_ms(980);}/* USER CODE END 3 */
}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{LL_FLASH_SetLatency(LL_FLASH_LATENCY_0);while(LL_FLASH_GetLatency()!= LL_FLASH_LATENCY_0){}LL_RCC_HSI_SetCalibTrimming(16);LL_RCC_HSI_Enable();/* Wait till HSI is ready */while(LL_RCC_HSI_IsReady() != 1){}LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_HSI);/* Wait till System clock is ready */while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_HSI){}LL_Init1msTick(8000000);LL_SetSystemCoreClock(8000000);
}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/35814.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是前端开发?

前端开发是什么一种工作?这里以修房子举例: jquery根据数据去生成对应的html代码。首先得有一个html代码的“房屋构造”,然后根据数据去填充“房屋构造”的“血肉”,最后JavaScript通过事件等方法给一砖一瓦修好的房屋添加“灵魂…

文华财经盘立方均线-支撑压力自动画线多空声音预警指标公式源码

文华财经盘立方多空均线-支撑压力自动画线指标公式源码: //MA5:MA(C,5); //MA10:MA(C,10); MA20:MA(C,20),COLORRED; MA60:MA(C,60),COLORGREEN; TY:CLOSE; HD:FILTER(BACKSET(FILTER(REF(TY,10)HHV(TY,2*101),10),101),10); LD:FILTER(BACKSET(FILTER(REF(T…

Java版小程序商城免费搭建-直播商城平台规划及常见营销模式解析

平台概述 1. 平台组成 管理平台:提供全方位的系统设置、数据统计、商家管理、订单管理等后台管理功能。商家端:支持PC端和移动端操作,便于商家进行商品管理、订单处理、营销活动设置等。买家平台:覆盖H5网页、微信公众号、小程序…

基于UDP的网络聊天室(多线程实现收和发消息)

要求&#xff1a;1.有新用户登录&#xff0c;其他在线的用户可以收到登录信息 2.有用户群聊&#xff0c;其他在线的用户可以收到群聊信息 3.有用户退出&#xff0c;其他在线的用户可以收到退出信息 4.服务器可以发送系统信息 效果图&#xff1a; service.c #include <head…

【unity笔记】八、Unity人物动画介绍

一、效果预览 本内容仅介绍为unity场景中的任务添加简单的动画效果。 二、小试牛刀 2.1 插件准备 在unity 中导入人物模型。常使用的免费人物模型和动画模型有Robot Kyle&#xff0c;Unity-Chan! Model&#xff0c;Basic Motions FREE。 其中Robot Kyle仅支持URP渲染。如…

关于Vue2的生命周期会问到哪些面试题?

在Vue2的面试中&#xff0c;关于生命周期的问题通常会涉及以下几个方面&#xff1a; 一、Vue2的生命周期概述 Vue2的生命周期是什么&#xff1f; Vue2的生命周期是指从Vue实例的创建、初始化数据、编译模板、挂载Dom、渲染、更新、卸载等一系列过程。 二、生命周期钩子函数 …

动态开点线段树,线段树合并

对于传统线段树&#xff0c;我们都是把区间开满&#xff0c;然后要修改哪个区间&#xff0c;就去找包含那个区间的结点 这样子的话&#xff0c;就会占用很多的内存 而动态开点线段树&#xff0c;就是对于给定的区间[L,R]&#xff0c;我一开始是一棵空的线段树&#xff0c;或者…

Netdiscover基本使用 - 发现局域网中存活主机

目录 0x00 介绍0x01 常用参数0x02 常用方式1. 主动模式2. 被动模式 0x00 介绍 原理&#xff1a;是一个二层&#xff08;数据链路层&#xff09;的ARP发现工具&#xff0c;执行命令的时候可以通过Wireshark查看是基于arp协议的。在不使用DHCP的无线网络上非常有用。 作用&#…

2024挣大钱的机会来了!入职这一行,也能“一飞冲天”

不知不觉我们已经走过了疫情笼罩的三年。如今&#xff0c;已经全面放开&#xff0c;自12月起核酸检测也将彻底取消&#xff0c;对于我们每个人来说这也将是一场长期的战役。 然而在疫情的常态化下&#xff0c;国民经济也将逐渐恢复。对于我们普通人来说如何抓住机遇&#xff…

南信大尹志聪教授为一作在顶级综合性期刊《Natl. Sci. Rev.》发文:传统梅雨停摆,江南缘何不再多烟雨?

文章简介 论文名称&#xff1a;Traditional Meiyu–Baiu has been suspended by global warming 第一作者及单位&#xff1a;尹志聪(教授|南京信息工程大学大气科学学院) 通讯作者及单位&#xff1a;王会军&#xff08;院士|南京信息工程大学大气科学学院&#xff09; 文章发…

region与AZ可用区区别

背景&#xff1a;云计算的基础设施&#xff0c;由大量的物理服务器和网络构成&#xff1b;为了实现全球快速访问&#xff0c;灾备等需求&#xff0c;这些云基础设施都会部署在不同物理位置&#xff1b; region-区域&#xff1a;指的是云计算所在机房的一个比较大范围的地理空间…

Spring Boot与Spring Cloud Gateway的集成

Spring Boot与Spring Cloud Gateway的集成 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何在Spring Boot应用中集成和使用Spring Cloud Gate…

C++基础编程100题-015 OpenJudge-1.3-13 反向输出一个三位数

更多资源请关注纽扣编程微信公众号 http://noi.openjudge.cn/ch0103/13/ 描述 将一个三位数反向输出。 输入 一个三位数n。 输出 反向输出n。 样例输入 100样例输出 001参考程序 #include<bits/stdc.h> using namespace std;int main(){int n;cin>>n;cou…

专业,城市,院校,高考填报志愿的三要素怎么排序?

我认为排序方式可以参考&#xff1a; 城市>学校 同样是计算机专业&#xff0c;不论学校的高低&#xff0c;一线城市更容易接触到时代的前端&#xff0c;有更多学习机会&#xff0c;有更好的文化氛围&#xff0c;同样在就业的时候也更容易接触到企业.... 如果要把专业考虑进…

VXLAN详解:概念、架构、原理、搭建过程、常用命令与实战案例

一、VXLAN概述 1.1 VXLAN的定义 VXLAN&#xff08;Virtual Extensible LAN&#xff0c;虚拟可扩展局域网&#xff09;是一种网络虚拟化技术&#xff0c;通过在现有IP网络上创建虚拟网络&#xff0c;使数据中心可以实现大规模的网络隔离和扩展。VXLAN使用MAC-in-UDP封装技术&a…

如何实现系统重装和还原?电脑重装系统的详细介绍(内附系统还原教程)

我们使用电脑办公时&#xff0c;如果出现卡顿、运行缓慢、蓝屏崩溃或病毒感染时&#xff0c;可以通过重装系统的方法来解决。但是电脑系统还原和系统重装都比较麻烦&#xff0c;很多电脑小白跟小编一样&#xff0c;无从下手。 系统重装&#xff1a;重装系统则是将电脑系统完全清…

Docker搭建ELK

docker安装ElasticSearch 创建网络 #这里先创建一个网络&#xff1a;因为我们还需要部署kibana容器、logstash容器&#xff0c;需要让这些容器互联。 docker network create elk-net#查看网络 docker network ls下载ES镜像 #搜索镜像 docker search elasticsearch #下载镜像…

vue3监听器watch以及watchEffect的使用

一&#xff0c;watch()简介&#xff1a; 侦听一个或多个响应式数据源&#xff0c;并在数据源变化时调用所给的回调函数 watch()默认是懒侦听的&#xff0c;即仅在侦听源发生变化时才执行回调函数。 watch()一共有三个参数 第一个参数&#xff1a;侦听器的源&#xff0c;可以为以…

【vue】vue响应式原理

vue响应式原理 vue2的响应式原理 vue2对对象类型的监听是通过Object.defineProperty实现的&#xff0c;给想要实现响应式的数据对象每个属性加上get,set方法&#xff0c;以实现数据劫持的操作。而对数组类型的监听是通过重写数组的方法实现的。 Object.defineProperty的定义…

linux高级编程(进程)(1)

进程&#xff1a; 进程的含义? 进程是一个程序执行的过程&#xff0c;会去分配内存资源&#xff0c;cpu的调度 进程分类&#xff1a; 1、交互式进程 2、批处理进程 shell脚本 3、 守护进程 进程与程序的区别&#xff1a; 1&#xff09;程序是…