Skocz do zawartości

[STM32F3][I2C] Problem z komunikacją MCP9808


Pomocna odpowiedź

Cześć, od kilku dni męczę się by poprawnie skonfigurować i coś odebrać za pomocą I2C z MCP9808(czujnik temp) w stm32f3 (Discovery). Przeszukałem już chyba wszystkie strony w internecie i nie mogę znaleźć informacji jak to poprawnie rozwiązać. Ciężko wzorować się na przykładach z f1, f4 bo mają inne funkcje. Starałem się już przerobić nawet kod z obsługi lsm303. Znalazłem takie info. w necie bo też mi program się wiesza w tym miejscu:

while(I2C_GetFlagStatus(MCP9808_I2C, I2C_ISR_TXIS) == RESET)
 {
   if((MCP9808_Timeout--) == 0) USART_SendBuff("2");
 }

link

ale nic to nie dało.

Tak wygląda część kodu do odczytu:

uint16_t MCP9808_Read(uint8_t DeviceAddr, uint8_t RegAddr, uint8_t* pBuffer, uint16_t NumByteToRead)
{
/* Test on BUSY Flag */
 uint32_t MCP9808_Timeout = MCP9808_LONG_TIMEOUT;
 while(I2C_GetFlagStatus(MCP9808_I2C, I2C_ISR_BUSY) != RESET)
 {
   if((MCP9808_Timeout--) == 0) USART_SendBuff("1");
 }

 /* Configure slave address, nbytes, reload, end mode and start or stop generation */
 I2C_TransferHandling(MCP9808_I2C, DeviceAddr, 1, I2C_SoftEnd_Mode, I2C_GenerateF) == RESET)
 {
   if((MCP9808_Timeout--) == 0) USART_SendBuff("5");
 }

 /* Clear STOPF flag */
 I2C_ClearFlag(MCP9808_I2C, I2C_ICR_STOPCF);

 /* If all operations OK */
 return 0;
}

Ustawienia RCC:

	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

Ustawienia GPIO:

GPIO_InitTypeDef GPIO_InitStructure;

/*--------------------------I2C----------------------------------------*/
GPIO_PinAFConfig(GPIOB, GPIO_PinSource8, GPIO_AF_4);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_4);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_OType=GPIO_OType_OD;

GPIO_Init(GPIOB, &GPIO_InitStructure);




/*---------------------------UART--------------------------------------*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_7);   // USART1_TX
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_7);  // USART1_RX

I2C Init:

void I2C_Config(void)
{
I2C_InitTypeDef I2C_InitStructure;

I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_AnalogFilter = I2C_AnalogFilter_Enable;
I2C_InitStructure.I2C_DigitalFilter = 0x00;
I2C_InitStructure.I2C_OwnAddress1 = 0x00;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_Timing = 0x2000090E;


I2C_Init(I2C1, &I2C_InitStructure);

I2C_Cmd(I2C1, ENABLE);


}

Będę wdzięczny za każdą pomoc bo to do projektu na studia i terminy gonią 🙁

Link to post
Share on other sites

cześć, udało Ci się w końcu rozwiązać ten problem? bo też właśnie rozgryzam i2c na 32f3 i mam ten sam kłopot, a większość rzeczy, które udaje mi się znaleźć wykorzystuje trochę inne biblioteki na f1 czy f4, tak jak sam pisałeś

Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.