STM32+MAX6675利用SPI获取实时温度数据程序及代码

之前写的STM32+MAX6675利用io口模拟SPI获取实时温度数据程序及代码

本文采用的芯片为STM32F103RCT6
温度芯片为MAX6675

模拟spi之前写过
里面的部分代码摘取的正点原子的函数库:sys、uart、delay等文件

原理图

在这里插入图片描述

max6675.h
#ifndef __MAX6675_H
#define __MAX6675_H
 
#include "stm32f10x.h"
#include "sys.h" 
void max6675_init(void);			 //初始化max6675模块 
u8 max6675_readWriteByte(u8 TxData);
u16 max6675_readbits_II(void);
float max6675_readTemp(void);
 
#endif

max6675.c
#include "max6675.h"
#include "spi.h"
#include "sys.h" 
#include "delay.h"
#include "usart.h"	

/*max6675初始化程序*/
void max6675_init(void){
   
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE );//PORTB时钟使能
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //PB12推挽输出 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB12
	GPIO_SetBits(GPIOB,GPIO_Pin_12);  //PB12上拉
}

u8 max6675_readWriteByte(u8 TxData)
{
   		
	/* 接受SPI2返回数据 */
	return SPI2_ReadWriteByte(TxData);
}  
u16 max6675_readbits_II(void){
   </
  • 10
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
下面是一个使用 STM32F103 和 MAX6675 模块来测量 K 热电偶温度的示例程序: ```c #include "stm32f10x.h" #include "stdio.h" #define SPI_PORT GPIOA #define SPI_CS_PIN GPIO_Pin_4 #define SPI_SCK_PIN GPIO_Pin_5 #define SPI_MISO_PIN GPIO_Pin_6 void SPI_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; // Enable SPI and GPIO clocks RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_GPIOA, ENABLE); // Configure SPI pins GPIO_InitStructure.GPIO_Pin = SPI_CS_PIN | SPI_SCK_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(SPI_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = SPI_MISO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(SPI_PORT, &GPIO_InitStructure); // Configure SPI SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_RxOnly; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI1, &SPI_InitStructure); // Enable SPI SPI_Cmd(SPI1, ENABLE); } uint16_t MAX6675_Read(void) { uint16_t data; // Select MAX6675 GPIO_ResetBits(SPI_PORT, SPI_CS_PIN); // Wait for a short delay for (uint8_t i = 0; i < 10; i++); // Read temperature data SPI1->DR = 0x0000; // Send dummy data to trigger SPI transfer while ((SPI1->SR & SPI_I2S_FLAG_RXNE) == 0); // Wait for data reception data = SPI1->DR; // Deselect MAX6675 GPIO_SetBits(SPI_PORT, SPI_CS_PIN); // Return temperature data return data; } int main(void) { uint16_t rawTemp; float temp; // Configure SPI SPI_Configuration(); while (1) { // Read raw temperature data from MAX6675 rawTemp = MAX6675_Read(); // Convert raw temperature to Celsius temp = (rawTemp >> 3) * 0.25; // Print temperature value printf("Temperature: %.2f degrees Celsius\n", temp); // Delay for some time before taking the next measurement for (uint32_t i = 0; i < 1000000; i++); } } ``` 这个程序使用了 STM32F103 的 SPI1 接口与 MAX6675 进行通信。首先,通过 `SPI_Configuration()` 函数进行SPI的初始化和GPIO的配置。然后,使用 `MAX6675_Read()` 函数从 MAX6675 中读取原始的温度数据。最后,将原始数据转换为摄氏温度,并通过串口打印出来。程序在一个无限循环中运行,每次测量完温度后都会延时一段时间。 请注意,这只是一个示例程序,需要根据实际情况进行适当的修改和调整。你可能需要根据实际的硬件连接和使用的开发环境进行相应的配置和调试。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值