simplemethod / stm32-max31855 Goto Github PK
View Code? Open in Web Editor NEWSTM32 library for MAX31855 temperature sensor using HAL and SPI
License: MIT License
STM32 library for MAX31855 temperature sensor using HAL and SPI
License: MIT License
If you are using SPI in "Receive Only Master" mode you will most likely not be able to read the data properly.
In my case the problem was with the SCK line was always in high state and loss of the first data frame.
The solution to the problem is to set the SCK pin to "pull-down" and read array on first element instead of zero. An additional safeguard is to restart the SPI interface as advised in the thread:
https://www.eevblog.com/forum/microcontrollers/stm32-spi-slave-inconsistent/
Below is the prepared code for this mode, be sure you change __HAL_RCC_SPI3_FORCE_RESET and __HAL_RCC_SPI3_RELEASE_RESET to the correct SPI used in your project
void MAX31855_ReadData(MAX31855_StateHandle *MAX31855){
/* Code from the thread: https://www.eevblog.com/forum/microcontrollers/stm32-spi-slave-inconsistent/ Author: DavidAlpha*/
if((MAX31855->hspi->State>HAL_SPI_STATE_READY) && (MAX31855->hspi->State<HAL_SPI_STATE_ERROR)){ // Handler BUSY in any mode (But not error or reset);
MAX31855->hspi->State=HAL_SPI_STATE_READY; // Force ready state
}
if((MAX31855->hspi->Instance->SR & SPI_SR_BSY) || (MAX31855->hspi->State!=HAL_SPI_STATE_READY)){ // If peripheral is actually busy or handler not ready
MAX31855->hspi->State=HAL_SPI_STATE_RESET; // Force reset state (HAL_SPI_Init will fail if not in reset state)
__HAL_RCC_SPI3_FORCE_RESET(); // Change to the SPI used in the project
asm("nop\nnop\nnop\nnop"); // Wait few clocks just in case
while(MAX31855->hspi->Instance->SR & SPI_SR_BSY); // Wait until Busy is gone
__HAL_RCC_SPI3_RELEASE_RESET(); // Change to the SPI used in the project
asm("nop\nnop\nnop\nnop"); // Wait few clocks just in case
while(MAX31855->hspi->Instance->SR & SPI_SR_BSY); // Check again
if (HAL_SPI_Init(MAX31855->hspi) != HAL_OK){ Error_Handler(); } // Re-init SPI
/**/
uint8_t payload[5];
int32_t frame;
MAX31855_SetNSSState(MAX31855,GPIO_PIN_RESET);
HAL_SPI_Receive(MAX31855->hspi, payload, 5, 1000);
MAX31855_SetNSSState(MAX31855,GPIO_PIN_SET);
MAX31855->scvFault=0;
MAX31855->scgFault=0;
MAX31855->ocFault=0;
MAX31855->fault=0;
MAX31855->extTemp=0;
MAX31855->extTempSign=0;
MAX31855->intTemp=0;
MAX31855->intTempSign=0;
frame = payload[1];
frame = frame<<8;
frame = frame|payload[2];
frame = frame<<8;
frame = frame|payload[3];
frame = frame<<8;
frame = frame|payload[4];
int32_t extTemp=frame;
int32_t intTemp=frame;
if(frame& 0b00000000000000000000000000000100)
{
MAX31855->scvFault=1;
}
if(frame& 0b00000000000000000000000000000010)
{
MAX31855->scgFault=1;
}
if(frame& 0b00000000000000000000000000000001)
{
MAX31855->ocFault=1;
}
if(frame&0b00000000000000010000000000000000)
{
MAX31855->fault=1;
}
if(frame&0b10000000000000000000000000000000)
{
MAX31855->extTempSign=1;
}
if(frame&0b00000000000000010000000000000000)
{
MAX31855->intTempSign=1;
}
extTemp>>=18;
if (MAX31855->intTempSign) {
extTemp = ~(extTemp & 0b11111111111111);
}
MAX31855->extTemp=extTemp;
intTemp = ((intTemp>>4) & 0b11111111111);
if (MAX31855->intTempSign)
{
intTemp=~(intTemp|0b1111100000000000); //Experimental code, not tested!
}
MAX31855->intTemp=intTemp;
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.