'[ST_MICRO]/STM32'에 해당되는 글 38건

  1. 2011.01.20 STM32 SPI Slave Mode 테스트
  2. 2010.12.04 [STM32-LCD EVM] 보드 제작
  3. 2010.08.06 [myUSB] STM32 EVM CAN Interrupt Test
  4. 2010.02.23 SysTick 인터럽트 사용 하기
  5. 2009.11.14 STM32-MP3 모듈 보드 제작 (1)
[ST_MICRO]/STM322011. 1. 20. 18:04

STM32 SPI Slave Mode 테스트

STM32 SPI Slave Mode 테스트
SPI Slave통신에 시간을 많이 까먹었는데... 아무튼 아래와 같이 해결 했다.
Master로 부터 데이터 수신클럭 받고 SPI_I2S_ReceiveData()로 데이터를 받아주어야 했는데... 이부분을 생각 못해서 데이터가 이상하게 출력되었다.
 
  //SPI Master로 부터 클럭이 들어오면 데이터 받고
  while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
  temp = SPI_I2S_ReceiveData(SPI2);
  //DebugPrint("SPI2 RX:%02X\r\n", temp);
  
  //원하는 데이터를 보낸다.
  //Send SPI2 data
  SPI_I2S_SendData(SPI2, cnt++);
  //DebugPrint("DataOut2\r\n");
 
 
Master에서는 그냥
    temp = SPI0_WriteReadByte(0x00);
    DebugPrint("Encoder=%02x\r\n", temp);
 
이렇게 하면 데이터 읽어 올 수 있다.
Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM322010. 12. 4. 16:16

[STM32-LCD EVM] 보드 제작

[STM32-LCD EVM] 보드 제작


STM32 를 이용한 TFT LCD테스트 모듈을 제작했다. 탁상용 액자로 사용해 보려고 소형으로 제작 했다.
2.6" TFT LCD(COM44), MP3모듈, SD Card, 이더넷 모듈, 가속도 센서등을 연결할 수 있다.






STM32-LCD EVM 테스트 동영상


Posted by nexp

댓글을 달아 주세요

[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

댓글을 달아 주세요

[ST_MICRO]/STM322010. 2. 23. 16:17

SysTick 인터럽트 사용 하기

SysTick 인터럽트 사용 하기
Cortex-M3코어 내부에 SYSTICK 타이머가 NVIC에 직접되어 있으며 우선순위도 높고 다른칩간에 호환성에도 유리하다. 24비트 타이머 이고 클럭소스는 칩마다 조금씩 다르다고 한다.

STM32의 SysTick 타이머는 ST에서 제공하는 API로 간단히 몇개 함수를 이용해 초기화 가능하다.

void SysTimerInit(void)
{
 //SysTick end of count event each 1ms with input clock equal to 9MHz (HCLK/8, default)
 //SysTick_SetReload(9000);    //1ms
 SysTick_SetReload(36);  //4us
  
 NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick, 0, 0);
 
 //Enable SysTick interrupt
 SysTick_ITConfig(ENABLE); 

 //Enable the SysTick Counter
 SysTick_CounterCmd(SysTick_Counter_Enable);
}


//SyTick 타이머 인터럽트 핸들러
void SysTickHandler(void)
{
      Led1Toggle(); 
}




STM32F100 (24MHZ)에서 1ms 는?
    SysTick_SetReload(1000);    //1ms
로 설정하면 된다.


Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM322009. 11. 14. 00:29

STM32-MP3 모듈 보드 제작

STM32-MP3 모듈 보드 제작



MP3모듈을 테스트 할 수 있는 [STM32 MP3 Module]를 제작했다. 굴러다니는 STM32F101 이 많아서 소형으로 테스트 모듈로 제작했는데 급하게 제작하다 보니 아쉬운 점이 많네... 그냥 저렴하고 간단한 MP3만들기에 좋지 않을까... 되려 AVR보다 저렴하고 성능도 좋다. 물론 동일한 핀맵의 STM32F103을 이용하면 USB기능도 추가할 수 있다.





VS1053 MP3 + SD Card Module + STM32



Posted by nexp

댓글을 달아 주세요

  1. 박원정

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

    2011.07.18 15:35 [ ADDR : EDIT/ DEL : REPLY ]