1.4K
#include "main.h" #include <math.h> #include <stdio.h> #include <string.h> #define ASSERT_CS() (HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET)) #define DEASSERT_CS() (HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET)) typedef struct { uint8_t lsb_temp; uint8_t msb_temp; }tc72_t; void floatToStr(float val , char data[]) { if (val<0) { *data='-'; data++; val*=-1; } int intVal =val*100; data[5] = (intVal %10) +'0'; intVal /=10; data[4] = (intVal %10) +'0'; data[3] = '.'; intVal /=10; data[2] = (intVal %10) +'0'; intVal /=10; data[1] = (intVal %10) +'0'; intVal /=10; data[0] = (intVal %10) +'0'; intVal /=10; } int main(void) { tc72_t tc72; uint8_t TxBuf[10]; uint8_t RxBuf[10]; char str [20]; char str2[20] ="temperature = "; float temp; int x; HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_SPI1_Init(); MX_USART1_UART_Init(); while (1) { TxBuf[0]=0x80; TxBuf[1]=0x00; ASSERT_CS(); HAL_SPI_Transmit(&hspi1, TxBuf, 2, 100); DEASSERT_CS(); TxBuf[0]=0x01; temp = 0.0f; ASSERT_CS(); HAL_SPI_TransmitReceive(&hspi1, TxBuf, RxBuf, 4, 100); DEASSERT_CS(); if(RxBuf[1]& (1<<6)) { temp+=0.5f; } else if(RxBuf[1]& (1<<7)) { temp+=0.25f; } TxBuf[0]=0x02; ASSERT_CS(); HAL_SPI_TransmitReceive(&hspi1, TxBuf, RxBuf, 4, 100); DEASSERT_CS(); tc72.msb_temp = RxBuf[1]; tc72.lsb_temp = RxBuf[2]; int16_t Temp_reg = tc72.msb_temp <<8 | tc72.lsb_temp; Temp_reg >>=7; x= ((signed char)(Temp_reg)); temp+=x; floatToStr(temp,str); HAL_UART_Transmit(&huart1,(uint8_t*)str2, sizeof(str2), 100); HAL_UART_Transmit(&huart1,(uint8_t*)str, sizeof(str), 100); HAL_UART_Transmit(&huart1,(uint8_t*)&"\n\r",2, 2); HAL_Delay(1000); }}