[ST_MICRO]/STM32F43x2017. 1. 21. 01:27

[STM32F439 EVM] 외부인터럽트 테스트

[STM32F439 EVM] 외부인터럽트 테스트


STM32F439 의 외부 인터럽트 소스는 각 포트0에서 15까지로 설정 가능하고 아래와 같이 그룹별로 관리 가능하다.

0에서 4번까지는 각각의 인터럽트 소스를 할당 할 수 있고 5~9, 10~15는 그룹으로되어 있어서 인터럽트 핸들러 내에서 구분해서 사용해야 한다.


EXTI0_IRQn

EXTI1_IRQn

EXTI2_IRQn

EXTI3_IRQn

EXTI4_IRQn

EXTI9_5_IRQn

EXTI15_10_IRQn



STM32F439 EVM 보드의 스위치 회로는 아래과 같고 PA8에 연결되어 있는 스위치를 이용하여 인터럽트 테스트 예제를 작성해 보았다.





STM32F439 외부 인터럽트 초기화 코드

static void EXTILine9_5_Config(void)

{

  GPIO_InitTypeDef   GPIO_InitStructure;


  /* Enable GPIOA clock */

  __GPIOA_CLK_ENABLE();

  

  /* Configure PA0 pin as input floating */

  GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING;

  GPIO_InitStructure.Pull = GPIO_PULLUP;

  GPIO_InitStructure.Pin = GPIO_PIN_8;

  HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);


  /* Enable and set EXTI Line0 Interrupt to the lowest priority */

  HAL_NVIC_SetPriority(EXTI9_5_IRQn, 2, 0);

  HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);

}





STM32F439 외부 인터럽트 핸들러 함수

인터럽트 핸들러 함수 EXTI9_5_IRQHandler 내에서 HAL_GPIO_EXTI_Callback함수를 호출하는 구조로 되어 있다.


void EXTI9_5_IRQHandler(void)

{

  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8);

}


void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

{

  if(GPIO_Pin == GPIO_PIN_8)

  {

        Led1Toggle();

  }

}


Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM32F43x2016. 12. 31. 12:51

[STM32F439 EVM] I2C 테스트

[STM32F439 EVM] I2C 테스트




[STM32F439 EVM] 에는 PB8(SCL), PB9(SDA)에 I2C가 할당되어 있다.




STM32F439 I2C 초기화 코드

I2C_HandleTypeDef I2cHandle;


#define I2Cx                             I2C1

#define I2Cx_CLK_ENABLE()                __I2C1_CLK_ENABLE()

#define I2Cx_SDA_GPIO_CLK_ENABLE()       __GPIOB_CLK_ENABLE()

#define I2Cx_SCL_GPIO_CLK_ENABLE()       __GPIOB_CLK_ENABLE() 


#define I2Cx_FORCE_RESET()               __I2C1_FORCE_RESET()

#define I2Cx_RELEASE_RESET()             __I2C1_RELEASE_RESET()


/* Definition for I2Cx Pins */

#define I2Cx_SCL_PIN                    GPIO_PIN_8

#define I2Cx_SCL_GPIO_PORT              GPIOB

#define I2Cx_SCL_AF                     GPIO_AF4_I2C1

#define I2Cx_SDA_PIN                    GPIO_PIN_7

#define I2Cx_SDA_GPIO_PORT              GPIOB

#define I2Cx_SDA_AF                     GPIO_AF4_I2C1


void I2CMaster_Init(void)

{

  GPIO_InitTypeDef  GPIO_InitStruct;

  

  /*##-1- Enable peripherals and GPIO Clocks #################################*/

  /* Enable GPIO TX/RX clock */

  I2Cx_SCL_GPIO_CLK_ENABLE();

  I2Cx_SDA_GPIO_CLK_ENABLE();

  /* Enable I2C1 clock */

  I2Cx_CLK_ENABLE(); 

  

  /*##-2- Configure peripheral GPIO ##########################################*/  

  /* I2C TX GPIO pin configuration  */

  GPIO_InitStruct.Pin       = I2Cx_SCL_PIN;

  GPIO_InitStruct.Mode      = GPIO_MODE_AF_OD;

  GPIO_InitStruct.Pull      = GPIO_PULLUP;

  GPIO_InitStruct.Speed     = GPIO_SPEED_FAST;

  GPIO_InitStruct.Alternate = I2Cx_SCL_AF;

  

  HAL_GPIO_Init(I2Cx_SCL_GPIO_PORT, &GPIO_InitStruct);

    

  /* I2C RX GPIO pin configuration  */

  GPIO_InitStruct.Pin = I2Cx_SDA_PIN;

  GPIO_InitStruct.Alternate = I2Cx_SDA_AF;

    

  HAL_GPIO_Init(I2Cx_SDA_GPIO_PORT, &GPIO_InitStruct);

  

  

  I2cHandle.Instance             = I2Cx;

  

  I2cHandle.Init.AddressingMode  = I2C_ADDRESSINGMODE_7BIT;

  I2cHandle.Init.ClockSpeed      = 100000;

  I2cHandle.Init.DualAddressMode = I2C_DUALADDRESS_DISABLED;

  I2cHandle.Init.DutyCycle       = I2C_DUTYCYCLE_2;

  I2cHandle.Init.GeneralCallMode = I2C_GENERALCALL_ENABLED;

  I2cHandle.Init.NoStretchMode   = I2C_NOSTRETCH_DISABLED;

  I2cHandle.Init.OwnAddress1     = 0xFE;//I2C_ADDRESS<<1;

  I2cHandle.Init.OwnAddress2     = 0xFE;    

  

  

  HAL_I2C_Init(&I2cHandle);

}




STM32F439 I2C Read/Write 함수

HAL_I2C_Master_Transmit(),  HAL_I2C_Master_Receive() 함수를 사용하면 쉽게 I2C제어가 가능하다.

unsigned char read8(unsigned char addr, unsigned char data)

{

    unsigned char result;


    unsigned char tx_buf[2];

    unsigned char rx_buf[4];

    tx_buf[0] = data;

    

    

    //gTimerTick6 = 0;

    while(HAL_I2C_Master_Transmit(&I2cHandle, (uint16_t)addr, (uint8_t*)tx_buf, 1, 10000)!= HAL_OK)

    {

        //if(gTimerTick6>200)break;

    }

    

    //gTimerTick6 = 0;


    while(HAL_I2C_Master_Receive(&I2cHandle, (uint16_t)addr, (uint8_t *)rx_buf, 1, 10000) != HAL_OK)

    {

//if(gTimerTick6>200)break;

    }

  


    result = rx_buf[0];



    return result;


}


void write8(unsigned char addr, unsigned char reg, unsigned char data)

{

    unsigned char result;


    unsigned char tx_buf[2];

    unsigned char rx_buf[4];

    tx_buf[0] = reg;

tx_buf[1] = data;

    

    

    //gTimerTick6 = 0;

    while(HAL_I2C_Master_Transmit(&I2cHandle, (uint16_t)addr, (uint8_t*)tx_buf, 2, 10000)!= HAL_OK)

    {

        //if(gTimerTick6>200)break;

    }

}


Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM32F43x2015. 5. 5. 22:27

STM32F439 EVM - HDMI 출력 테스트 (해상도 1024x768 )

STM32F439 EVM - HDMI 출력 테스트 (해상도 1024x768 )



STM32F439의 TFT-LCD 제어기는 최대 해상도 1024x768 까지 지원하며 HDMI출력 모듈을 이용하면 일반 모니터에도 출력이 가능하다.

HDMI 출력 모듈을 이용하여 모니터 출력 테스 진행을 해 보았다.


다만 1024x768 모드에서 풀컬러 지원은 안되고 아래 표에서와 같이 16bit(656) 모드로 출력 할 수 있다.




소형 저렴한 MCU에서 모니터로 출력이 가능하기 때문에 디스플레이를 위한 여러 용도로 사용하기 좋은 솔루션인것 같다.



HDMI출력 모듈은 기존 TLT-LCD 핀맵과 동일하게 제작되어 있어서 STM32F439 EVM 보드에 연결하면 바로 테스트 가능하다.





STM32F439 EVM - HDMI 출력 테스트 동영상

STM32F439 TFT LCD 출력 셋팅 상으로는 LCD PLL클럭을 60Hz로 하였지만 실제 모니터 상으로 확인해 보면 정확히 60Hz가 되지 않고 57Hz정도 되는데...

출력하는데 문제는 없지만 아무래도 STM32F439의 한계가 아닐까...  이부분은 좀 더 들여다 봐야 할것 같다.








Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM32F43x2015. 4. 12. 23:00

[STM32F439 LCD EVM] USB Host 모드를 이용한 TFT LCD Test

[STM32F439 LCD EVM] USB Host 모드를 이용한 TFT LCD Test




STM32F439 EVM 보드에는 USB 디바이스 및 호스트를 테스트 할 수 있는 커넥터가 있다.

STM32F439의 USB호스트 기능을 이용하여 USB 메모리 스틱에 있는 BMP파일을 TFT-LCD에 출력 할수 있는 테스트를 진행해 보았다.



USB 메모리스틱의 BMP파일을 TFT-LCD에 출력하는 테트스 동영상


Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM32F43x2015. 3. 14. 22:00

STM32F439 EVM - SD카드를 이용한 BMP파일 출력 테스트

 STM32F439 EVM - SD카드를 이용한 BMP파일 출력 테스트



STM32F439 EVM 보드 에는 SDIO방식의 SD Card 연결할 수 있는 SD 소켓이 할당되어 있고 이를 이용하여 SD Card의 BMP파일을 TFT LCD에 출력하는 테스트를 진행해 보았다.




STM32F439 7" TFT-LCD 출력 테스트 동영상




STM32F439 SDIO 초기화 코드
uint8_t BSP_SD_Init(void)
  uint8_t SD_state = MSD_OK;
  
  /* uSD device interface configuration */
  uSdHandle.Instance = SDIO;

  uSdHandle.Init.ClockEdge           = SDIO_CLOCK_EDGE_RISING;
  uSdHandle.Init.ClockBypass         = SDIO_CLOCK_BYPASS_DISABLE;
  uSdHandle.Init.ClockPowerSave      = SDIO_CLOCK_POWER_SAVE_DISABLE;
  uSdHandle.Init.BusWide             = SDIO_BUS_WIDE_1B;
  uSdHandle.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
  uSdHandle.Init.ClockDiv            = SDIO_TRANSFER_CLK_DIV;
  
  /* Configure IO functionalities for SD detect pin */
  //BSP_IO_Init(); 
  
  /* Check if the SD card is plugged in the slot */
  if(BSP_SD_IsDetected() != SD_PRESENT)
  {
    return MSD_ERROR;
  }
  
  /* HAL SD initialization */
  SD_MspInit();
  if(HAL_SD_Init(&uSdHandle, &uSdCardInfo) != SD_OK)
  {
    SD_state = MSD_ERROR;
  }
  
  /* Configure SD Bus width */
  if(SD_state == MSD_OK)
  {
    /* Enable wide operation */
    if(HAL_SD_WideBusOperation_Config(&uSdHandle, SDIO_BUS_WIDE_4B) != SD_OK)
    {
      SD_state = MSD_ERROR;
    }
    else
    {
      SD_state = MSD_OK;
    }
  }
  
  return  SD_state;
}



STM32F439 SD Card를 이용한 BMP파일 출력 테스트 예제코드
    //SD 카드 초기화
    if(FATFS_LinkDriver(&SD_Driver, SDPath) == 0)
    {
        if(f_mount(&SDFatFs, (TCHAR const*)SDPath, 0) != FR_OK)
        {
            Led2On();
            Error_Handler();

            while(1);
        }
        else
        {
            //파일 리스트 출력
            //res = print_files("");
            Led1On();
            
            
            //------------------------------------------------------------------
            //BMP파일 출력테스트
            InitBmpFileRead();
            
            //BMP파일 읽어와서
            if(OpenReadBmpFile(ImageBuffer, (const char*)"1_3.bmp"))
            {
                BSP_LCD_SelectLayer(1);
                
                //출력
                BSP_LCD_DrawBitmap(0, 0, ImageBuffer);  
                BSP_LCD_SetTransparency(1, 255);            
            }
            //------------------------------------------------------------------
}
}




STM32F439 BMP 이미지 7" TFT-LCD에 출력 결과









Posted by nexp

댓글을 달아 주세요