基于STM32f103c8t6的测温枪设计过程

设计流程

一、开发板和模块的介绍

1、STM32F103C8T6开发板

STM32F103C8T6是由意法半导体公司(ST)推出的基于Cortex-M3内核的32位微控制器,属于ST公司微控制器中STM32系列。
ARM公司的一家公司,这家公司只设计芯片的IP内核,然后授权给其他半导体公司使用,目前ARM的架构被分为了三类:cortex-A,cortex-R,cortex-M。
我们本次系统所使用的是cortex-M系列,特点功耗低,代码量小,具备产品竞争力等,M系列细分为M0,M3,M4,M7和超低功耗的M0+。
具体可以参考该博客<fantastic_sky>
STM32F103C8T6单片机简介

2、MLX90614测温模块

MLX90614 是一款红外非接触温度计。TO-39 金属封装里同 时集成了红外感应热电堆探测器芯片和信号处理专用集成芯 片。 由于集成了低噪声放大器、17 位模数转换器和强大的数字信 号处理单元,使得高精度和高分辨度的温度计得以实现。 温度计具备出厂校准化,有数字 PWM 和 SMBus(系统管理 总线)输出模式。 作为标准,配置为 10 位的 PWM 输出格式用于连续传送温 度范围为-20…120 ˚C 的物体温度,其分辨率为 0.14 ˚C。 POR 默认模式是 SMBus 输出格式。
具体可以看文章: MLX90614红外测温模块使用
这是我自己写的模块详细用法,包含通信原理。

3、TM1650红外数码管

TM1650 是一种带键盘扫描接口的 LED(发光二极管显示器)驱动控制专用电路。内部集成有 MCU 输入输出控制数字接口、数据锁存器、LED 驱动、键盘扫描、辉度调节等电路。TM1650 性能稳定、质 量可靠、抗干扰能力强,可适用于 24 小时长期连续工作的应用场合。
具体可以看文章: TM1650数码管(类IIC驱动)
这是我自己写的模块详细用法,包含通信原理。
这里你可以使用OLED屏代替,看自己需求。

二、硬件连接

1、STM32F103C8T6引脚图

在这里插入图片描述

2、MLX90614测温模块连接原理图

在这里插入图片描述
通过上图,我们将SCL连接PB10引脚,SDA连接PB11引脚,该模块采用的通信方式是类似与IIC通信,意思就是通信方式跟IIC通信方式很像但又不是IIC,它有另外一个名字叫做SMBus,是 1995 年由 intel 公司提出的一种高效同步串行总线,SMBus 只有两根信号线:双向数据线和时钟信号线,容许 CPU 与各种外围接口器件以串行方式进行通信、交换信息,即可以提高传输速度也可以减小器件的资源占用,另外即使在没有SMBus 接口的单片机上也可利用软件进行模拟。
具体可以看文章: MLX90614红外测温模块使用
这里不做多的介绍,太长了。

3、TM1650红外数码管连接原理图

在这里插入图片描述
在这里插入图片描述
根据上图,我们将SCL连接PB12,SDA连接PB13,采用的通信方式也是类IIC通信机制,使用相同时序,没有从机地址。其他引脚根据驱动去连就行,上图有标注。
具体可以看文章: TM1650数码管(类IIC驱动)
这里不做多的介绍,太长了。

三、编程代码

1、初始化各个模块

初始化各个模块简单来说就是将模块与单片机连接的IO口进行初始化,通过GPIO的方式将引脚使能和设置各种状态,模式等。下面举一个列子,用来初始化MLX90614测温模块。

MLX90614引脚初始化PB10,PB11

void mlx90614_Init(void)//TM1650模块端口GPIO初始化
{
	GPIO_InitTypeDef  GPIO_InitStruct;//定义一个GPIO结构体变量
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//打开GPIO B组时钟
	
	GPIO_InitStruct.GPIO_Pin	= GPIO_Pin_10|GPIO_Pin_11;  		//引脚10,引脚11
	GPIO_InitStruct.GPIO_Mode	= GPIO_Mode_Out_OD;	//推挽输出
	GPIO_InitStruct.GPIO_Speed	= GPIO_Speed_50MHz; //速度	 
	
	GPIO_Init(GPIOB, &GPIO_InitStruct);	
}

当然这一步是不够的,因为该模块是通过类IIC通信来写,自然是要根据相应的时序图来编写代码从而得到温度数据,其编写方法和IIC差不多,都有起始位和停止位加上ACK应答机制,具体代码在MLX90614红外测温模块使用里面,有需要自取。

其他模块也是一样,我感觉模块就像是一个个开关,而这些模块的手册就像是开关钥匙的说明也就是如何去打开这个开关,然后根据说明去使用这个钥匙就可以,这就是我的理解。

2、将代码整合起来

这里我就展示主函数,其他模块函数就暂时不展示,太多了,有需要的小伙伴可以私聊我拿源码哟。

main.c

#include "stm32f10x.h"
#include "led.h"
#include "beep.h"
#include "usart.h"
#include "numled.h"
#include "esp8266.h"
#include "delay.h"
#include "stdio.h"
#include "exti.h"
#include "mlx90614.h"
#include "string.h"

int main()
{
	char data[128] = {0};//数据存储
	
	float temp;//温度获取存储变量
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	all_led_init();//led灯初始化
	beep_init();//蜂鸣器初始化
	delay_init();//延迟函数频率初始化
	exti_init();//外部中断初始化
	TM1650_Init();//数码管初始化(IIC协议实现)
	Display_Init();//数码管数据显示初始化
	mlx90614_Init();//测温模块初始化
	USART1_init();//串口打印初始化
	while(1)
	{
		temp =  Temp_Get_Address(0x07);//0x07是被测物体温度获取地址
		printf("%float\n",temp/10);//获取温度信息并且打印出来(串口调试助手打印)
		Show_Num(temp,0x02);//(数码管显示温度)
		delay_s(2);//延迟2s
	}
	
}
  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
基于STM32F103C8T6的红外温枪按键监系统可以通过以下步骤实现: 1. 首先,你需要连接MLX90614红外温模块和TM1650红外数码管到STM32F103C8T6开发板上。你可以参考提供的资料中的原理图和PCB设计来正确连接它们。 2. 接下来,你需要编写STM32F103C8T6的源代码来实现按键监功能。你可以使用STM32的GPIO库来读取按键的状态。具体的代码实现可以参考提供的源码资料。 3. 在代码中,你可以使用中断来检按键的状态变化。当按键被按下或释放时,中断将被触发,并执行相应的操作。 4. 一旦按键状态发生变化,你可以使用TM1650红外数码管来显示相应的信息。你可以使用提供的通信原理来了解如何与TM1650进行通信,并将温度等信息显示在数码管上。 5. 最后,你可以通过编译和烧录代码到STM32F103C8T6开发板上来完成整个系统的搭建。确保你的代码能够正确地读取按键状态并将信息显示在数码管上。 ```c #include "stm32f10x.h" void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; // 配置按键引脚为输入模式 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &GPIO_InitStructure); // 配置数码管引脚为输出模式 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); } int main(void) { GPIO_Configuration(); while (1) { // 检按键状态 if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0) { // 按键被按下 // 在数码管上显示温度等信息 GPIO_SetBits(GPIOB, GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4); } else { // 按键未被按下 // 清空数码管显示 GPIO_ResetBits(GPIOB, GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4); } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值