STM32使用红外测温

2023-05-16

红外测温

文章目录

  • 红外测温
  • 前言
  • 一、原理
  • 二、STM32代码
    • 1.MLX90614.c
    • 2.MLX90614.h
  • 总结


前言

一、原理

红外测温的原理可以直接去看卖家的手册,手册多余的话太多了,知道他是IIC通信的就行了,
在这里插入图片描述
下面直接给出代码

二、STM32代码

1.MLX90614.c

#include "MLX90614.h"
#include "sys.h"
#include "delay.h"

u8 bit_in=0;
u8 bit_out=0;
u8 DataL;
u8 DataH;
u8 Pecreg;
/******************************************************************************
*                          Mlx90614_Init()
*
*Description : STM32外设以及传感器初始化
*Arguments   : none
*Returns     : none
*Notes       : PA5--MLX90614_SCL
               PA6--MLX90614_SDA
*******************************************************************************/
void Mlx90614_Init(void)
{
	GPIO_InitTypeDef  GPIO_InitStructure;	
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	 //使能PORTA口时钟 
	
 	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;				//PORTA5 推挽输出,速度50MHz
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		  
 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(GPIOA, &GPIO_InitStructure);
	GPIO_SetBits(GPIOA, GPIO_Pin_5);
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;				//PORTA6 推挽输出,速度50MHz
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		  
 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
}
/******************************************************************************
*                          start_bit()
*
*Description : STM32外设以及传感器初始化
*Arguments   : none
*Returns     : none
*Notes       : 开始位
*******************************************************************************/
void start_bit()
{
	GPIOA6_High; 
	delay_us(1); 
	GPIOA5_High; 
	delay_us(1); 
	GPIOA6_Low; 
    delay_us(1); 
    GPIOA5_Low; 
    delay_us(1); 
}
/******************************************************************************
*                          stop_bit()
*
*Description : STM32外设以及传感器初始化
*Arguments   : none
*Returns     : none
*Notes       : 开始位
*******************************************************************************/
void stop_bit()
{
   GPIOA5_Low; 
   delay_us(1); 
   GPIOA6_Low; 
   delay_us(1); 
   GPIOA5_High; 
   delay_us(1); 
   GPIOA6_High; 
}
/******************************************************************************
*                          send_bit()
*
*Description : STM32外设以及传感器初始化
*Arguments   : none
*Returns     : none
*Notes       : 发送一个字节
*******************************************************************************/
void send_bit(void) 
{ 
  if(bit_out==0) 
     GPIOA6_Low; 
  else 
     GPIOA6_High; 
  delay_us(1); 
  GPIOA5_High; 
  delay_us(1); 
  GPIOA5_Low; 
  delay_us(1);
} 
/******************************************************************************
*                          receive_bit()
*
*Description : STM32外设以及传感器初始化
*Arguments   : none
*Returns     : none
*Notes       : 接收一个位
*******************************************************************************/
void receive_bit(void) 
{ 
	GPIO_InitTypeDef  GPIO_InitStructure;
	
	 GPIOA6_High;
	 bit_in=1;
	 GPIOA5_High; 
	 delay_us(1);
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 	//PORTA6 浮动输入,速度50MHz	  
 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(GPIOA, &GPIO_InitStructure);
	 
	  bit_in=SDA; 
	  delay_us(1);
	  GPIOA5_Low; 
	  delay_us(1); 
	
	//PORTA6 推挽输出,速度50MHz
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 	
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	
 	GPIO_Init(GPIOA, &GPIO_InitStructure);
} 
/******************************************************************************
*                          rx_byte()
*
*Description : STM32外设以及传感器初始化
*Arguments   : none
*Returns     : none
*Notes       : 接收一个字节
*******************************************************************************/
u8 rx_byte(void) 
{ 
  u8 i,dat; 
  dat=0; 
  for(i=0;i<8;i++) 
  { 
    dat=dat<<1; 
    receive_bit(); 
    if(bit_in==1)
	{
		dat=dat+1; 
	}		 
  } 
  send_bit(); 
  return dat; 
} 
/******************************************************************************
*                          tx_byte()
*
*Description : STM32外设以及传感器初始化
*Arguments   : none
*Returns     : none
*Notes       : 发送一个字节
*******************************************************************************/
void  tx_byte(u8 dat_byte) 
{ 
   char i,n,dat; 
   n=10; 
TX_again: 
   dat=dat_byte; 
   for(i=0;i<8;i++) 
   { 
     if(dat&0x80) 
      bit_out=1; 
     else 
      bit_out=0; 
     send_bit(); 
     dat=dat<<1; 
   } 
   
      receive_bit(); 
   if(bit_in==1) 
   { 
    stop_bit(); 
    if(n!=0) 
    {n--;goto Repeat;} 
    else 
     goto exit; 
   } 
   else 
    goto exit; 
Repeat: 
    start_bit(); 
    goto TX_again; 
exit: ; 
} 
/******************************************************************************
*                          memread()
*
*Description : STM32外设以及传感器初始化
*Arguments   : none
*Returns     : 温度
*Notes       : 读取温度
*******************************************************************************/
u16 memread(void) 
{ 
  start_bit(); 
 // tx_byte(0xB4);  //Send SlaveAddress ==============================
  tx_byte(0x00); 
  tx_byte(0x07);  //Send Command 
  //------------ 
  start_bit(); 
  tx_byte(0x01); 
  bit_out=0; 
  DataL=rx_byte(); 
  bit_out=0; 
  DataH=rx_byte(); 
  bit_out=1; 
  Pecreg=rx_byte(); 
  stop_bit(); 
  return(DataH*256+DataL); 
}

2.MLX90614.h

#ifndef __MLX90614_H
#define __MLX90614_H	 
#include "sys.h"

#define GPIOA5_High GPIO_SetBits(GPIOA, GPIO_Pin_5)
#define GPIOA5_Low  GPIO_ResetBits(GPIOA, GPIO_Pin_5)
#define GPIOA6_High GPIO_SetBits(GPIOA, GPIO_Pin_6)
#define GPIOA6_Low  GPIO_ResetBits(GPIOA, GPIO_Pin_6)

#define SDA GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)

//************ 函数声明*****************************************
void Mlx90614_Init(void);
void start_bit();
void stop_bit();
void send_bit(void);
void receive_bit(void);
u8 rx_byte(void);
void  tx_byte(u8 dat_byte);
u16 memread(void);
		 				    
#endif

主函数

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "MLX90614.h"
 int main(void)
 {
	u16 Tem;
	delay_init();	    	 //延时函数初始化	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
	uart_init(9600);	 //串口初始化为9600
	Mlx90614_Init();
 
	GPIOA5_High;
	GPIOA6_High;
	delay_us(1);
	GPIOA5_Low; 
	delay_ms(1000); 
	GPIOA5_High; 
	while(1)
	{
		Tem=memread(); 
		printf("温度是:"); 
		printf("%d",Tem); 
		printf("/n");
		delay_ms(1000);
	}
		 
}

这三段代码放到工程里然后可以通过串口打印温度,我是用显示屏显示的温度。
在这里插入图片描述

总结

其实搞懂了IIC对于这种IIC通信的模块写代码很容易。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32使用红外测温 的相关文章

  • 初始化 ST-Link 设备时出错 - 无法连接到设备

    我目前正在使用 ST Link 调试器对我的 STM32F3 Discovery 板进行编程 我使用的IDE是Atollic TrueStudio 5 5 2 现在我面临一个非常奇怪的问题 那就是我不断收到消息 初始化 ST Link 设备
  • STM32 F072上的软件如何跳转到bootloader(DFU模式)?

    STM32应用笔记2606对此进行了讨论 但没有简单的代码示例 该答案已使用 IAR EWARM 在 STM32F072 Nucleo 板上进行了测试 这个答案使用 STM32标准外设库 仅此而已 请注意 验证您是否成功进入引导加载程序模式
  • 134-基于stm32单片机矿井瓦斯天然气浓度温湿度检测自动通风系统Proteus仿真+源程序...

    资料编号 134 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 ds1302时钟 DHT11温湿度 电机 蜂鸣器 制作一个基于stm32单片机矿井瓦斯天然气浓度温湿度检测自动通风系统Proteus仿真 2 通过DH
  • 138-基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真+源程序

    资料编号 138 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 LED灯 蜂鸣器 电位器 制作一个基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真 2 通过DHT1
  • HAL库STM32常用外设教程(二)—— GPIO输入\输出

    HAL库STM32常用外设教程 二 GPIO输入 输出 文章目录 HAL库STM32常用外设教程 二 GPIO输入 输出 前言 一 GPIO功能概述 二 GPIO的HAl库驱动 三 GPIO使用示例 1 示例功能 四 代码讲解 五 总结
  • STM32用一个定时器执行多任务写法

    文章目录 main c include stm32f4xx h uint32 t Power check times 电量检测周期 uint32 t RFID Init Check times RFID检测周期 int main Timer
  • STM32F103

    提示 来源正点原子 参考STM32F103 战舰开发指南V1 3PDF资料 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 开发环境硬件普中科技 接线图在g
  • STM32超声波——HC_SR04

    文章目录 一 超声波图片 二 时序图 三 超声波流程 四 单位换算 五 取余计算 六 换算距离 七 超声波代码 一 超声波图片 测量距离 2cm 400cm 二 时序图 1 以下时序图要先提供一个至少10us的脉冲触发信号 告诉单片机我准备
  • 毕业设计 江科大STM32的智能温室控制蓝牙声光报警APP系统设计

    基于STM32的智能温室控制蓝牙声光报警APP系统设计 1 项目简介 1 1 系统构成 1 2 系统功能 2 部分电路设计 2 1 stm32f103c8t6单片机最小系统电路设计 2 2 LCD1602液晶显示电路设计 2 2 风
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • 最终启动顺序错误 - STM32L476 的 Eclipse System Workbench 调试

    我正在尝试调试和运行 STM32L476 的简单汇编代码 我已经设置了 Eclipse Oxygen 在 Eclipse 中安装了最新版本的 System Workbench 插件并安装了 ST Link 驱动程序 IDE 成功构建了程序
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • STM32 暂停调试器时冻结外设

    当到达断点或用户暂停代码执行时 调试器可以停止 Cortex 中代码的执行 但是 当皮质停止在暂停状态下执行代码时 调试器是否会冻结其他外设 例如 DMA UART 和定时器 您只能保留时间 r 取决于外围设备 我在进入主函数时调用以下代码
  • STM32的HAL中实现单按、长按和双按功能

    我正在尝试实现单击 双击和长按功能来执行不同的功能 到目前为止 我已经理解了单击和长按的逻辑 但我不知道如何检测双击 至于代码 我使用计数器实现了单击和长按 但代码仅停留在第一个 if 条件上 bool single press false
  • 特殊寄存器

    特殊寄存器 文章目录 前言 一 背景 二 2 1 2 2 总结 前言 前期疑问 STM32特殊寄存器到底是什么 特殊寄存器怎么查看和调试代码 本文目标 记录和理解特殊寄存器 一 背景 最近在看ucosIII文章是 里面提到特殊寄存器 这就进
  • 嵌入式 C++11 代码 — 我需要 volatile 吗?

    采用 Cortex M3 MCU STM32F1 的嵌入式设备 它具有嵌入式闪存 64K MCU固件可以在运行时重新编程闪存扇区 这是由闪存控制器 FMC 寄存器完成的 所以它不像a b那么简单 FMC 获取缓冲区指针并将数据刻录到某个闪存
  • 使用 STM32F0 ADC 单独读取不同的输入

    STM32F072CBU 微控制器 我有多个 ADC 输入 并且希望单独读取它们 STMcubeMX 生成样板代码 假设我希望按顺序读取所有输入 但我无法弄清楚如何纠正这个问题 这篇博文 http blog koepi info 2015
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d
  • 移动数组中的元素

    我需要一点帮助 我想将数组中的元素向上移动一个元素 以便新位置 1 包含位置 1 中的旧值 new 2 包含 old 1 依此类推 旧的最后一个值被丢弃 第一个位置的新值是我每秒给出的新值 我使用大小为 10 的数组 uint32 t TE
  • STM32F4 定时器 - 计算周期和预分频,以生成 1 ms 延迟

    我在用STM32F407VGT6 with CubeMX 因此 我从通用定时器开始 但我被预分频值和周期值所困扰 基本上我想每隔一段时间生成一个定时器中断n 其中 n 1 2 3 ms 并执行一些任务 计算周期和预分频值的公式有很多变化 公

随机推荐

  • 【STM32】标准库与HAL库对照学习教程十四--CAN总线

    STM32 标准库与HAL库对照学习教程十四 CAN总线 一 前言二 准备工作三 CAN协议3 1 简介3 2 CAN物理层3 2 1 闭环总线网络3 2 2 开环总线网络 3 3 差分信号3 3 1 简介3 3 2 CAN总线上的差分信号
  • 【CANopen】CANopen总线讲解

    CANopen总线 一 前言二 CANopen概述2 1 CANopen网络模型2 2 CANopen常见规范 三 CANopen对象字典四 CANopen通讯标识符五 CANopen协议概述5 1 CANOpen协议报文分类5 2 CAN
  • 51单片机中断的调用寄存器组(PSW)的作用,以及汇编堆栈的作用,堆栈指针的SP的使用方法,RAM的运行和ROM在单片机具体运行和C语言的优势和中断,定时器基础知识(上)

    一 xff0c 堆栈在汇编的作用 xff0c 以及PUSH ACC 和 PUSH PSW 通过最简单的8051单片机RAM的分配可知 xff0c 单片机从烧程序到达到一定的工作过程 首先明白为什么要引如 烧 写的过程 我们知道一般我说存储器
  • 小端序与大端序

    今天在写逆向题目时遇到的一个知识点 字节顺序 xff08 维基百科 xff09 字节顺序 xff0c 又称端序或尾序 xff08 英语 xff1a Endianness xff09 xff0c 在计算机科学领域中 xff0c 指电脑内存中或
  • 超声波测距模块(HC-SR04模块)特点及使用介绍

    超声波测距模块 xff08 HC SR04模块 xff09 特点及使用介绍 前言一 超声波测距模块 xff08 HC SR04模块 xff09 外观二 原理图三 相关参数讲解1 参数2 测量范围3 计算公式4 优点5 产品特性 xff08
  • Qt基础简单知识 信号与槽与三大基类

    Qt基础简单知识 信号与槽与三大基类 学习Qt记录一下 xff0c 大致以下内容 xff1a 1 Qt Creator窗口基类 2 信号与槽 1 Qt Creator窗口基类 Creator默认三种基类 xff1a 1 xff09 QMai
  • Android应用程序开发期末大作业(2)

    xff08 3 xff09 用imageView和imagebutton及activity在界面上实现图片浏览 新建android项目如 AI03 xff0c 在项目的 AI03 src com example ai03 MainActiv
  • ROS中使用A星算法进行路径规划

    ROS中使用A星算法进行路径规划 前言python编写A星算法描述具体实现 ROS结合A星算法描述具体实现 实现结果 前言 由于本人这学期修了一门 智能工程 的课程 xff0c 课程的大作业要求大家自主编写机器人导航程序 xff0c 包括
  • 攻防世界 web练习区

    目录 view source robots backup cookie disabled button weak auth simple php get post xff referer webshell command execution
  • 网络安全编程基础--使用结构体数组完成信息录入

    实验1 xff1a C语言基础实验 目录 实验1 xff1a C语言基础实验 实验步骤分析 xff1a 1 定义结构体 xff1a 2 信息录入 3 信息修改 4 信息展示 5 主函数编写 结果展示 xff1a 源代码 xff1a 实验设备
  • 服务端和客户端通信-TCP(含完整源代码)

    简单TCP通信实验 目录 简单TCP通信实验 分析 1 套接字类型 2 socket编程步骤 3 socket编程实现具体思路 实验结果截图 程序代码 实验设备 xff1a 目标系统 xff1a windows 软件工具 xff1a vs2
  • 汇编语言--实验四

    实验名称 xff1a BX 和loop的使用 一 xff1a 实验目的 学会使用 bx 和loop 使用debug练习一些简单的编程 练习使用debug调试汇编程序的方法 二 xff1a 实验内容及步骤 内容 xff1a xff08 1 x
  • 汇编语言--实验七

    实验名称 xff1a 寻址方式在结构化数据访问中的应用 一 xff1a 实验目的 学会寻址方式在结构化数据访问中的应用 xff1b 利用前面所学知识熟悉编程技巧 二 xff1a 实验内容及步骤 内容 xff1a xff08 1 xff09
  • 汇编语言--实验九

    实验名称 xff1a 根据材料编程 目录 实验名称 xff1a 根据材料编程 一 xff1a 实验目的 二 xff1a 实验内容及步骤 内容 xff08 1 xff09 步骤 xff08 1 xff09 结果 xff08 1 xff09 三
  • Visual Studio 2022 C++开发 (Win)配置教程

    前言 本文将讲解如何在Window系统下配置Visual Studio 2022版本的C 43 43 开发环境 步骤 下载并且安装Visual Studio Tools xff08 1 xff09 下载 Visual Studio Tool
  • template < class T> ,map和vector用法——恶补c++

    部分目录 template lt class T gt 是什么找到各素数因子map数组下用法map遍历map元素的默认值 vector 用法 template lt class T gt 是什么 template lt class T gt
  • 停车场寻车系统(识别车牌,手机app查询相关信息)

    停车场寻车系统 文章目录 停车场寻车系统前言一 手机app二 车牌识别三 数据查询总结 停车场寻车系统 前言 上个星期用了一周左右做了一个停车场寻车系统的项目 xff0c 可以识别车牌 xff0c 通过手机app查询车辆信息 一 手机app
  • K210+MLX90614红外测温

    红外测温 文章目录 红外测温前言一 MLX90614二 使用步骤总结 前言 K210随便找一个都行 一 MLX90614 这个模块之前的博客有介绍 xff0c 他是用IIC通信的 模块就不过多介绍了 xff0c 之间看代码吧 import
  • PHP mysql_connect()连接-已淘汰

    1 首先在mysql命令控制台新建数据库 mysql gt create database test Query OK 1 row affected 0 04 sec mysql gt use test Database changed m
  • STM32使用红外测温

    红外测温 文章目录 红外测温前言一 原理二 STM32代码1 MLX90614 c2 MLX90614 h 总结 前言 一 原理 红外测温的原理可以直接去看卖家的手册 xff0c 手册多余的话太多了 xff0c 知道他是IIC通信的就行了