Giter VIP home page Giter VIP logo

stm32-max31855's Introduction

Hi there ๐Ÿ‘‹

stm32-max31855's People

Contributors

simplemethod avatar

Stargazers

 avatar

Watchers

 avatar  avatar

stm32-max31855's Issues

If you are using SPI mode "Receive Only Master" on STM32 F4 read this!

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;	
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.