Skip to main content
Associate
Jul 1, 2024 8:00 AM UTC
Solved

I2C with DMA not working

Hi,

I'm somewhat new to STM32. I need to use DMA to collect data from a tempreture sensor over I2C.

My sensor is an Adafruit MCP 9600 and I'm using a Nucleo F446RE board. Following is the code I use. Can someone help as I've been stuck here for days without knowing what to do. 

 

uint8_t TMP_ADDR = 0x65 << 1;
uint8_t TMP_REG = 0x00;
uint8_t TempReading[100];

 

void MCP9600_ReadTemperatureDMA(void)
{
TempReading[0] = TMP_REG;
if (HAL_I2C_Master_Transmit(&hi2c1, TMP_ADDR, TempReading, 1, HAL_MAX_DELAY) == HAL_OK) {
if (HAL_I2C_Master_Receive_DMA(&hi2c1, TMP_ADDR, TempReading, sizeof(TempReading)) == HAL_OK) {
HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET);
}
}
}

// I2C DMA Transfer Complete Callback
void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c)
{
HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
}

This topic has been closed for replies.
TechnBest answer
Senior III
Jul 1, 2024 10:58 AM UTC

There is option in Mx tool , open ioc file. Look for dma type , select normal. 

"If you feel a post has answered your question, please click ""Accept as Solution""."

11 replies

waclawek.jan
Super User
Jul 1, 2024 8:59 AM UTC

I2C without DMA works?

Start perhaps with bit-banged I2C to check if the connections are OK.

What are values of pullup resistors?

JW

sadeepTAAuthor
Associate
Jul 1, 2024 9:57 AM UTC

hey,

Thanks for the reply.

1. Yes. it works and gives me tepreture reading.

2. I am not using any external pullups. Am I supposed to use it like that?

 

Tesla DeLorean
Guru
Jul 1, 2024 10:15 AM UTC

I2C typically expects them. Internal pull-ups on STM32 pretty weak and slow, especially if presented a relatively large capacitive load..

Get a scope or logic analyzer on the signals to better understand what's happening.

You work with people with related competencies? Manager, supervisor, colleagues?

Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
sadeepTAAuthor
Associate
Jul 1, 2024 12:29 PM UTC

Thank you all. @Techn's idea solved my problem.