본문 바로가기

개발/embed

STM32 CubeIDE I2C sample source code

반응형

 

==============================
1. \Inc\stm32f2xx_hal_conf.h  에 코멘트 처리 되있는거 풀어 주고

----------------------------------------------------

#define HAL_I2C_MODULE_ENABLED
----------------------------------------------------


==============================
2. gpio.c 에 다음 울 추가 ( i2c.c 에 있어 안해 줘도 되는)
----------------------------------------------------

//     PB10   ------> I2C2_SCL
//     PB11   ------> I2C2_SDA

  /*Configure GPIO pins : PB10 PB11 */
  GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  GPIO_InitStruct.Alternate = GPIO_AF4_I2C2;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

----------------------------------------------------

 

==============================
3.  main.c 에 다음 사항 추가
----------------------------------------------------

#include "i2c.h"
#define  _Dev_Adr    0x37 << 1      // client device address is 0x37 

unsigned char rBuf[100];

void read_i2c() {   // device 에서 5 바이트 읽기
  /*
   hi2c2:  Pointer to a I2C_HandleTypeDef structure
   _Dev_Adr : 7 bit client 주소, 이 함수 부르기 전에 왼쪽으로 1개 쉬프트 되 있어야 한다
   rBuf : 읽은 데이타가 저장될 버퍼
   5  : 읽을 바이트 수
   1000 : Timeout duration
   */

  HAL_I2C_Master_Receive(&hi2c2, _Dev_Adr, rBuf, 51000);    // 
}

void main() {
//: 생략
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_ADC1_Init();
  MX_FSMC_Init();
  MX_TIM1_Init();
  MX_TIM8_Init();
  MX_TIM10_Init();
  MX_TIM2_Init();
  MX_USART1_UART_Init();
  MX_USART6_UART_Init();
  MX_I2C2_Init();    // ---------------------  이줄을 추가 한다.
//: 생략

  read_i2c();
}

----------------------------------------------------

 

==============================
추가 파일  4개 - 첨부 파일 참조 
Drivers\STM32F2xx_HAL_Driver\Inc\stm32f2xx_hal_i2c.h
Drivers\STM32F2xx_HAL_Driver\Src\stm32f2xx_hal_i2c,c
i2c.h

i2c.c

 

stm32-i2c.zip
0.03MB

반응형