[ST_MICRO]/STM32F103-SM2011. 9. 10. 03:33

[NET-EXP] STM32를 이용한 TFT LCD제어

[NET-EXP] STM32를 이용한 TFT LCD제어




NET-EXP에서 SM모듈과 LCD-CONV 모듈 이용시 TFT LCD 핀맵




//-----------------------------------------------------------------------------
//TFT LCD
#define TFT_DRV_HD66791                 0
#define TFT_DRV_COM44                   1

#define LCD_LAT_BIT      BIT8
#define LCD_LAT_PORT     PORTA
#define LCD_LAT_ON()     Sbi(LCD_LAT_PORT, LCD_LAT_BIT)
#define LCD_LAT_OFF()     Cbi(LCD_LAT_PORT, LCD_LAT_BIT)
#define LCD_DATA_LATCH()    LCD_LAT_ON();LCD_LAT_OFF();

#define LCD_EN_BIT      BIT14
#define LCD_EN_PORT      PORTA
#define LCD_ENABLE()     Cbi(LCD_EN_PORT, LCD_EN_BIT)
#define LCD_DISABLE()     Sbi(LCD_EN_PORT, LCD_EN_BIT)

#define LCD_RST_BIT      //BIT8
#define LCD_RST_PORT     //PORTB
#define LCD_RST_ON()     //Sbi(LCD_RST_PORT, LCD_RST_BIT)
#define LCD_RST_OFF()     //Cbi(LCD_RST_PORT, LCD_RST_BIT)

#define LCD_RS_BIT      BIT8
#define LCD_RS_PORT      PORTB
#define LCD_RS_OFF()     Cbi(LCD_RS_PORT, LCD_RS_BIT)
#define LCD_RS_ON()      Sbi(LCD_RS_PORT, LCD_RS_BIT)

#define LCD_WR_BIT      BIT13
#define LCD_WR_PORT      PORTA
#define LCD_WR_OFF()     Cbi(LCD_WR_PORT, LCD_WR_BIT)
#define LCD_WR_ON()      Sbi(LCD_WR_PORT, LCD_WR_BIT)

#define LCD_RD_BIT      BIT9
#define LCD_RD_PORT      PORTB
#define LCD_RD_OFF()     Cbi(LCD_RD_PORT, LCD_RD_BIT)
#define LCD_RD_ON()      Sbi(LCD_RD_PORT, LCD_RD_BIT)

#define LCD_BL_BIT      //BIT6
#define LCD_BL_PORT      //PORTA
#define LCD_BL_OFF()     //Cbi(LCD_BL_PORT, LCD_BL_BIT)
#define LCD_BL_ON()      //Sbi(LCD_BL_PORT, LCD_BL_BIT)

#define _LCD_DAT_OUT(Data)    PORTB = (PORTB&0xFF00) | (Data>>8);\
                                     LCD_DATA_LATCH();\
                                     PORTB = (PORTB&0xFF00) | (Data&0xFF);

#define TFTGpioInit()     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);\
          GPIO_InitStructure.GPIO_Pin = 0xFFFF;\
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;\
          GPIO_Init(GPIOA, &GPIO_InitStructure);\
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);\
          GPIO_InitStructure.GPIO_Pin = 0xFFFF;\
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;\
          GPIO_Init(GPIOB, &GPIO_InitStructure);\
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);\
          GPIO_InitStructure.GPIO_Pin = BIT12|BIT13|BIT15;\
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;\
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;\
          GPIO_Init(GPIOC, &GPIO_InitStructure);
//-----------------------------------------------------------------------------


Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM322011. 6. 10. 17:52

소형 STM32

소형에 UART 2개 이상인 MCU를 찾다보니 저렴한 가격에 STM32가 제일 좋은것 같다.

확인해 보니 아래과 같이 추려진다.

Generic Part Number Package Operating Frequency (Processor speed) (MHz) FLASH Size (Prog) (kB) Internal RAM Size (kB) 12 or 16-bit timers (IC/OC/PWM) Serial Interface
STM32F101T4 VFQFPN 36 6x6x1-0 36 16 4 2x16-bit (8/8/8) 1xSPI;1xI2C;2xUSART(IrDa, ISO7816)
STM32F101T6 VFQFPN 36 6x6x1-0 36 32 6 2x16-bit (8/8/8) 1xSPI;1xI2C;2xUSART(IrDa, ISO7816)
STM32F101T8 VFQFPN 36 6x6x1-0 36 64 10 3x16-bit (12/12/12) 1xSPI;1xI2C;2xUSART(IrDa, ISO7816)
STM32F101TB VFQFPN 36 6x6x1-0 36 128 16 3x16-bit (12/12/12) 1xSPI;1xI2C;2xUSART(IrDa, ISO7816)
STM32F103T4 VFQFPN 36 6x6x1-0 72 16 6 3x16-bit (12/12/14) 1xSPI;1xI2C;2xUSART(IrDa, ISO7816);USB;CAN
STM32F103T6 VFQFPN 36 6x6x1-0 72 32 10 3x16-bit (12/12/14) 1xSPI;1xI2C;2xUSART(IrDa, ISO7816);USB;CAN
STM32F103T8 VFQFPN 36 6x6x1-0 72 64 20 4x16-bit (16/16/18) 1xSPI;1xI2C;2xUSART(IrDa, ISO7816);USB;CAN
STM32F103TB VFQFPN 36 6x6x1-0 72 128 20 4x16-bit (16/16/18) 1xSPI;1xI2C;2xUSART(IrDa, ISO7816);USB;CAN



Posted by nexp
TAG QFN, STM32

댓글을 달아 주세요

[SENSOR]/Sensor2010. 8. 17. 15:31

[TMP275] 정밀 온도센서 테스트

[TMP275] 정밀 온도센서 테스트



TI사의 12비트 0.2(0.5)도 오차율을 가진 정밀 온도 센서 TMP275를 테스트 했다. 보드는 예전에 제작했던 가속도 센서를 활용해서 제작 했는데... I2C핀맵이 호환되므로 동일한 확장 보드에 테스트 가능하다.

TMP275 핀맵



TMP275 온도센서 출력 포멧





정밀도



주요 레지스터



TPM275 테스트 예제 소스코드
// TMP275 온도 센서 데이터 읽기함수
short TMP275Read(unsigned char reg)

 unsigned char h, l; 
 
 TMP275_I2C_START(TMP275_I2C_ADDR+I2C_WRITE);     // device address 및 write mode 설정
 TMP275_I2C_WRITE(reg);                                            // 레지스터 설정
 TMP275_I2C_START(TMP275_I2C_ADDR+I2C_READ);     // device address 및 read mode 설정

 h = TMP275_I2C_ACK();                                 // MSB Data Read
 l = (TMP275_I2C_NAK()>>4)&0x0F;                 // LSB Data Read

 TMP275_I2C_STOP(); 

 return (h<<8)|l;
}


int main(void)
{
    short data;
 float val;
 
 //System Init
 SystemInit();
 
    //LED Init
 Led1Init();
 Led1On();
 
 //Serial Init
 DebugInit(BAUD_115200);
 DebugPrint("I2C TMP275 Test Program.\r\n");
 DebugPrint("C");

 TMP275Init();

 while (1)
 {
   data = TMP275Read(0);
   val = ((float)(data&0x0F))*0.625*10.0;
   
   DebugPrint("%02d%02d\r\n", (data>>8), val);
   Delay(100);
 }
}


TMP275 정밀 온도센서 테스트
TMP275 테스트를 위해 MCU는 STM32 Sensor Interface Board를 이용하였고, 출력은 Serial FND 모듈 을 이용하여 온도값을 출력했다.


Posted by nexp

댓글을 달아 주세요

  1. 박기성

    관리자의 승인을 기다리고 있는 댓글입니다

    2012.05.23 16:52 [ ADDR : EDIT/ DEL : REPLY ]

[ST_MICRO]/STM322010. 8. 6. 18:32

[myUSB] STM32 EVM CAN Interrupt Test

[myUSB] STM32 EVM CAN Interrupt Test
STM32 (myUSB EVM)보드와 LM3S5732 EVM보드를 이용하여 CAN통신 테스트를 해 보았다. CAN인터럽트를 이용하여 데이터를 수신하도록 했다.
지난번에 폴링으로 테스트 하긴 했는데... 새롭게 하려니 또 시간이 많이 소비되는것 같다. 서로 다른 보드의 환경설정 하는데 시간이 많이 걸렸다. 정리만 잘 해두었어도 시간을 많이 줄일 수 있었는데... 다시한번 정리해 보도록 한다.



모터 제어 확장 보드의 LM3S5732에서 SW7를 누르면  CAN데이터가 전송되도록 했다.



STM32 CAN인터럽트
인터럽트 소스는 여러가지 있지만 가장 많이 사용하게 될 소스는 CAN_RF0R, CAN_RF1R 이다. CAN 데이터가 Mailbox에 정상적으로 저장되면 이벤트를 발생하게 된다.



물론 초기화시에 CAN->IER 레지스터에 CAN_RF0R_FMP0로 사용 여부를 설정해야 된다.
ST에서 제공하는 함수로 CAN_ITConfig()를 사용하면 쉽게 설정 가능하다.

  /* CAN FIFO0 message pending interrupt enable */
  CAN_ITConfig(CAN_IT_FMP0, ENABLE);


/*******************  Bit definition for CAN_RF0R register  *******************/
#define  CAN_RF0R_FMP0                       ((u8)0x03)               /* FIFO 0 Message Pending */
#define  CAN_RF0R_FULL0                      ((u8)0x08)               /* FIFO 0 Full */
#define  CAN_RF0R_FOVR0                      ((u8)0x10)               /* FIFO 0 Overrun */
#define  CAN_RF0R_RFOM0                      ((u8)0x20)               /* Release FIFO 0 Output Mailbox */

#define CAN_IT_FMP0                 ((u32)0x00000002) /* FIFO 0 message pending */

USB와 CAN을 동시에 사용할 경우 인터럽트 소스를 구분할 필요가 있는데 FIFO pending를 알아내려면 ST제공 예제의 CAN_GetITStatus() 함수 에서는 추가가 되어 있이 않아서 추가했다.

[stm32f10x_can.c]
ITStatus CAN_GetITStatus(u32 CAN_IT)
{
          :
  case CAN_IT_FMP0:
      pendingbitstatus = CheckITStatus(CAN->RF0R, CAN_RF0R_FMP0);  
   break;
  
    default :
      pendingbitstatus = RESET;
      break;
}
 


소스코드
//CAN Interrupt
void USB_LP_CAN_RX0_IRQHandler(void)
{
  if(CAN_GetITStatus(CAN_IT_FMP0) == SET)
  {
    CAN_Receive(CAN_FIFO0, &gRxMessage);
  
   gFlagCanInt = 1;  
  }
}



//-----------------------------------------------------------------------------
int main(void)
{
 unsigned char flag_sw1 = 0;
    //System Init
 SystemInit();
 
    //LED Init
 Led1Init();
 Led1On();

 Led2Init();
 Led2Off(); 
 
 Sw1Init(); 
 
 //Serial Init
 DebugInit(BAUD_115200);
 DebugPrint("STM32 CAN Test Program..\r\n");

 //CAN Init
 CAN_initial();

 while (1)
 {
  if(gFlagCanInt)
  {
   DebugPrint("[ID %02X:%02x:%02x] : ",
      g_MsgObjectRx.StdId,  //수신한 CAN ID
      g_MsgObjectRx.IDE,
      g_MsgObjectRx.DLC
      );
 
   //수신한 데이터 출력
   DebugPrint("%02x %02x %02x %02x | %02x %02x %02x %02x\r\n",
     g_MsgObjectRx.Data[0],
     g_MsgObjectRx.Data[1],
     g_MsgObjectRx.Data[2],
     g_MsgObjectRx.Data[3],
     g_MsgObjectRx.Data[4],
     g_MsgObjectRx.Data[5],
     g_MsgObjectRx.Data[6],
     g_MsgObjectRx.Data[7]    
     ); 
  
   gFlagCanInt = 0;
  }
  
  :
 }



테스트 결과 시리얼포트 출력 화면
STM32 CAN Test Program..
[ID 04:00:08] : 01 09 00 00 | 00 00 00 00
[ID 04:00:08] : 01 0a 00 00 | 00 00 00 00
[ID 04:00:08] : 01 0b 00 00 | 00 00 00 00
[ID 04:00:08] : 01 0c 00 00 | 00 00 00 00
[ID 04:00:08] : 01 0d 00 00 | 00 00 00 00
[ID 04:00:08] : 01 0e 00 00 | 00 00 00 00
[ID 04:00:08] : 01 0f 00 00 | 00 00 00 00
[ID 04:00:08] : 01 10 00 00 | 00 00 00 00


CAN통신 보레이트 설정

   #ifdef  CAM_BAUD_125KB
   CAN_InitStructure.CAN_Prescaler = 16;
   CAN_InitStructure.CAN_BS1       = 8;
   CAN_InitStructure.CAN_BS2       = 7;
   #endif
   #ifdef  CAM_BAUD_250KB
   CAN_InitStructure.CAN_Prescaler = 8;
   CAN_InitStructure.CAN_BS1       = 8;
   CAN_InitStructure.CAN_BS2       = 7;
   #endif
   #ifdef  CAM_BAUD_500KB
   CAN_InitStructure.CAN_Prescaler = 4;
   CAN_InitStructure.CAN_BS1       = 8;
   CAN_InitStructure.CAN_BS2       = 7;
   #endif
   #ifdef  CAM_BAUD_1000KB
   CAN_InitStructure.CAN_Prescaler = 2;
   CAN_InitStructure.CAN_BS1       = 8;
   CAN_InitStructure.CAN_BS2       = 7;
   #endif


Posted by nexp
TAG Can, STM32

댓글을 달아 주세요

[MODULE]/MP32009. 11. 15. 00:27

STM32-MP3 모듈 보드 관련자료 - VS1003 MP3 Module + SD Card + STM32

STM32-MP3 모듈 보드 관련자료 - VS1003 MP3 Module + SD Card + STM32



저렴한 STM32F101을 이용하여 VS1033 MP3 모듈 테스트 보드를 제작했다.  3개의 스위치와 2개의 LED가 인터페스가 되어 간단한 MP3 모듈 테스트가 가능하다.






VS1053 MP3 + SD Card Module + STM32



개발환경
STM32는 UART로 프로그램 가능하므로 USB2UART를 이용하면 쉽게 프로그램 가능하다.



D-Class AMP 모듈과 동일한 크기로 제작해서 앰프와 연결 가능 하도록 했다.



[STM32 MP3 Module] 회로도
SD + MP3모듈



확장 커넥터
사용하지 않은 핀들은 표준화된 확장 커넥터로 연결가능하도록 빼두었다.



OnBoard LED / Swtich


Posted by nexp

댓글을 달아 주세요