HC32F460 读取热电偶温度

news/2024/11/24 9:16:32/

使用背景

首先感谢华大半导体产商的辛苦努力 ,发布了一款高性价比的MCU-HC32F460 系列,它是基于 ARM Cortex-M4 32-bit RISC CPU,最高工作频率200MHz 的高性能 MCU。Cortex-M4 内核集成了浮点运算单元FPUDSP,实现单精度浮点算术运算,支持所有 ARM 单精度数据处理指令和数据类型,支持完整 DSP 指令集。

使用用途

场景

测量高温加热模块的温度

热电偶其特点主要如下:

1、装配简单,更换方便;
2、压簧式感温元件,抗震性能好;
3、测量精度高;
4、测量范围大(-200℃~1300℃,特殊情况下-270℃~2800℃),目前我使用的最高只能到600°;
5、热响应时间快;

具体代码实现

#include "hc32f46x.h"
#include "bsp_spi.h"
#include "hc32f46x_spi.h"
#include "hc32_ddl.h"
/* SPI_SCK Port/Pin definition */
#define SPI_SCK_PORT                    (PortB)
#define SPI_SCK_PIN                     (Pin13)
#define SPI_SCK_FUNC                    (Func_Spi3_Sck)/* SPI_NSS Port/Pin definition */
#define SPI_NSS_PORT                    (PortB)
#define SPI_NSS_PIN                     (Pin12)
#define SPI_NSS_HIGH()                  (PORT_SetBits(SPI_NSS_PORT, SPI_NSS_PIN))
#define SPI_NSS_LOW()                   (PORT_ResetBits(SPI_NSS_PORT, SPI_NSS_PIN))/* SPI_MOSI Port/Pin definition */
#define SPI_MOSI_PORT                   (PortE)
#define SPI_MOSI_PIN                    (Pin15)
#define SPI_MOSI_FUNC                   (Func_Spi3_Mosi)/* SPI_MISO Port/Pin definition */
#define SPI_MISO_PORT                   (PortB)
#define SPI_MISO_PIN                    (Pin14)
#define SPI_MISO_FUNC                   (Func_Spi3_Miso)#define SPI_UNIT                        (M4_SPI3)
#define SPI_UNIT_CLOCK                  (PWC_FCG1_PERIPH_SPI3)static void Spi_Config(void)
{stc_spi_init_t stcSpiInit;/* configuration structure initialization */MEM_ZERO_STRUCT(stcSpiInit);/* Configuration peripheral clock */PWC_Fcg1PeriphClockCmd(SPI_UNIT_CLOCK, Enable);/* Configuration SPI pin */PORT_SetFunc(SPI_SCK_PORT, SPI_SCK_PIN, SPI_SCK_FUNC, Disable);PORT_SetFunc(SPI_MOSI_PORT, SPI_MOSI_PIN, SPI_MOSI_FUNC, Disable);PORT_SetFunc(SPI_MISO_PORT, SPI_MISO_PIN, SPI_MISO_FUNC, Disable);/* Configuration SPI structure */stcSpiInit.enClkDiv = SpiClkDiv256;stcSpiInit.enFrameNumber = SpiFrameNumber1;stcSpiInit.enDataLength = SpiDataLengthBit8;stcSpiInit.enFirstBitPosition = SpiFirstBitPositionMSB;stcSpiInit.enSckPolarity = SpiSckIdleLevelLow;stcSpiInit.enSckPhase = SpiSckOddSampleEvenChange;stcSpiInit.enReadBufferObject = SpiReadReceiverBuffer;stcSpiInit.enWorkMode = SpiWorkMode4Line;stcSpiInit.enTransMode = SpiTransFullDuplex;stcSpiInit.enCommAutoSuspendEn = Disable;stcSpiInit.enModeFaultErrorDetectEn = Disable;stcSpiInit.enParitySelfDetectEn = Disable;stcSpiInit.enParityEn = Disable;stcSpiInit.enParity = SpiParityEven;stcSpiInit.enMasterSlaveMode = SpiModeMaster;stcSpiInit.stcDelayConfig.enSsSetupDelayOption = SpiSsSetupDelayCustomValue;stcSpiInit.stcDelayConfig.enSsSetupDelayTime = SpiSsSetupDelaySck1;stcSpiInit.stcDelayConfig.enSsHoldDelayOption = SpiSsHoldDelayCustomValue;stcSpiInit.stcDelayConfig.enSsHoldDelayTime = SpiSsHoldDelaySck1;stcSpiInit.stcDelayConfig.enSsIntervalTimeOption = SpiSsIntervalCustomValue;stcSpiInit.stcDelayConfig.enSsIntervalTime = SpiSsIntervalSck6PlusPck2;SPI_Init(SPI_UNIT, &stcSpiInit);SPI_Cmd(SPI_UNIT, Enable);
}/*
*  Init hoten0 Configure
*/
void spi_init(void)
{stc_port_init_t stcPortInit;/* configure structure initialization */MEM_ZERO_STRUCT(stcPortInit);/* Flash NSS */stcPortInit.enPinMode = Pin_Mode_Out;PORT_Init(SPI_NSS_PORT, SPI_NSS_PIN, &stcPortInit);SPI_NSS_HIGH();Spi_Config();
}/*********************************************************************************** \brief SPI flash write byte function**** \param [in] u8Data                      SPI write data to flash**** \retval uint8_t                         SPI receive data from flash********************************************************************************/
static uint8_t SpiFlash_WriteReadByte(uint8_t u8Data)
{uint8_t u8Byte;/* Wait tx buffer empty */while (Reset == SPI_GetFlag(SPI_UNIT, SpiFlagSendBufferEmpty)){}/* Send data */SPI_SendData8(SPI_UNIT, u8Data);/* Wait rx buffer full */while (Reset == SPI_GetFlag(SPI_UNIT, SpiFlagReceiveBufferFull)){}/* Receive data */u8Byte = SPI_ReceiveData8(SPI_UNIT);return u8Byte;
}/*
*  Read hoten0 temperature value
*/
float SpiTemp_Read(void)
{int data = 0xff;uint16_t adValue = 0;float temperature = 0.0;SPI_NSS_LOW();adValue = SpiFlash_WriteReadByte(data);while (Reset == SPI_GetFlag(SPI_UNIT, SpiFlagSpiIdle)){}adValue = adValue<<8 | SpiFlash_WriteReadByte(data);			if (adValue & 0X04) {adValue = 0;  //未检测到热电偶}else {adValue<<=1;  //去掉D15位adValue>>=4;	//去掉D0、1、2位}temperature = adValue*1023.75/4095;			SPI_NSS_HIGH();return temperature;
}

http://www.ppmy.cn/news/234215.html

相关文章

pandas库学习笔记

> dataframe与series pandas中有两种常用的数据结构&#xff0c;分别是dataframe和series两种。 dataframe数据结构 import numpy as np import pandas as pd dataframe pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],index [No.1,No.2,No.3],columns [a,b,c]) dataframeab…

学计算机类专业对电脑有要求,大学设计专业电脑配置须知

电脑配置有一定专业性,大一学生不是很懂,各设计专业对于电脑配置要求不一样,了解一下。处理器是大脑现在最新的是第9代,不建议购买第8代以下CPU,第八代的CPU性能提升巨大,官方信息比第七代提升30%正常来讲,i7>i5>i3,然后后缀数字越大越好。intel处理器的后缀字母含义…

对Dell U2713H和U2414H显示器上的“No DisplayPort Cable”(无DisplayPort电缆)错误消息进行故障诊断

本文提供有关对Dell U2713H和U2414H显示器上的“No DisplayPort Cable”&#xff08;无DisplayPort电缆&#xff09;问题进行故障诊断的信息 No DisplayPort Cable&#xff08;无DisplayPort电缆&#xff09;错误 Dell U2713H和U2414H液晶显示屏用户在设置显示屏时可能会遇到“…

二叉树part6 | ● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树

文章目录 654.最大二叉树思路代码 617.合并二叉树思路代码 700.二叉搜索树中的搜索思路代码 98.验证二叉搜索树思路官方题解代码困难 今日收获 654.最大二叉树 思路 前序遍历构造二叉树。 找出数组中最大值&#xff0c;然后递归处理左右子数组。 时间复杂度On2 空间复杂度On …

Dell戴尔笔记本电脑Vostro 14 5410原装出厂WIN10系统恢复原厂OEM系统

Dell戴尔笔记本电脑Vostro 14 5410原装出厂Windows10系统恢复原厂oem系统20H2 系统自带所有驱动、办公软件、MyDell等预装软件 链接&#xff1a;https://pan.baidu.com/s/1ECzd6jIgYXFX0ysigUWEyQ?pwd1qr9 提取码&#xff1a;1qr9

Dell E6410 把我折腾毁了

最近因为天气炎热&#xff0c;我的E6410也发起烧来&#xff0c;来来回回折腾了我将近一个月&#xff0c;终于稳定了&#xff0c;总结一下 (1)一开始因为天气炎热&#xff0c;所以烧坏了显卡&#xff0c;总是蓝屏&#xff0c;死机&#xff0c;没有办法&#xff0c;发回去换了块主…

戴尔DELL E6530 minipcie接口扩展nvme盘,express接口装nvme盘

戴尔DELL E6530 minipcie接口扩展nvme盘&#xff0c;express接口装nvme盘。 拆开DELL E6530 后盖&#xff0c;位于minipcie网卡的右侧还有一个minipcie接口是没有使用起来的。可以通过转卡将这个接口安装nvme固态盘。 先掰开转卡成2部分&#xff0c;将排线把2部分转卡连接起来&…

linux开发:linux最大线程数分析

linux最大线程数分为&#xff0c;进程最大线程数&#xff0c;用户最大进程数&#xff0c; 整个系统已用的线程或进程数。 我们可以用下面命令进行查询这三个进程数。 linux系统可生成最大线程数可以用这个命令查询 cat /proc/sys/kernel/threads-max 进程最大线程数查询方式 ps…