[ST_MICRO]/STM32F43x2014.09.07 22:11

STM32F429 - W5300 을 이용한 TCP/IP 전송 속도 테스트

STM32F429 - W5300 을 이용한 TCP/IP 전송 속도 테스트



STM32F429 는 최대 180Mhz로 구동된다. W5300을 이용하여 TCP/IP 전송 속도 테스트 결과 37Mbps 정도로 측정된다.




STM32F429 W5300 드라이버 코드

//-----------------------------------------------------------------------------

#define W5300_BANK_ADDR                 ((uint32_t)0x64000000)

#define W5300_DATA_ADDR                 (*(uint16_t *) (W5300_BANK_ADDR))

                                        

#define _W5300_DATA(p)                    (*(__IO uint16_t*) (W5300_BANK_ADDR + (p<<1)))


#define W5300_RST_PORT GPIOA

#define W5300_RST_BIT BIT9


#define IINCHIP_RSToff() cbi(W5300_RST_PORT, W5300_RST_BIT)

#define IINCHIP_RSTon() sbi(W5300_RST_PORT, W5300_RST_BIT)



#define W5300_IO_INIT()

//-----------------------------------------------------------------------------




Posted by nexp
[ST_MICRO]/STM32F42014.06.17 00:16

STM32F4 타이머 인터럽트 테스트 - 1초 만들기


STM32F4 타이머 인터럽트 테스트



STM32F4에서 TIM2, TIM5는 32bit 타이머 모드를 지원한다. 이를 이용하여 1초 만들기 테스트를 해 보았다.




STM32F4 타이머 인터럽트 초기화 함수

void TimerInit2(void)

{

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

    TIM_OCInitTypeDef  TIM_OCInitStructure;


    uint16_t PrescalerValue = 0;


    NVIC_InitTypeDef NVIC_InitStructure;


    /* TIM2 clock enable */

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);


    /* TIM2 gloabal Interrupt 초기화 */

    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStructure);


    //--------------------------------------------------------------------------

    /* Compute the prescaler value */

    PrescalerValue = (uint16_t) ((SystemCoreClock / 2) / 6000000) - 1; 


    /* Time base configuration */

    TIM_TimeBaseStructure.TIM_Period = (6000-1);   //Autoreload value (ARR) -> 1ms

    TIM_TimeBaseStructure.TIM_Prescaler = (6000-1);

    TIM_TimeBaseStructure.TIM_ClockDivision = 0;

    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;


    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);


    /* Prescaler configuration */

    TIM_PrescalerConfig(TIM2, PrescalerValue, TIM_PSCReloadMode_Immediate);



    /* TIM Interrupts enable */

    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);


    /* TIM2 enable counter */

    TIM_Cmd(TIM2, ENABLE);

    //--------------------------------------------------------------------------    

}




STM32F4 타이머 인터럽트 핸들러

void TIM2_IRQHandler(void)

{

if(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)

{

TIM_ClearITPendingBit(TIM2, TIM_IT_Update);

        Led2Toggle();

}  

}




Posted by nexp
[ST_MICRO]/STM32F43x2013.09.26 19:13

STM32F439 보드 테스트 - 주의사항

STM32F439 보드 테스트 - 주의사항




STM32F439 보드 제작해서 연결했는데 쇼트가 발생한다.
데이터 시트를 보니 STM32F4와는 좀더 다른점이 있다. STM32F4데이터 시트에는 99번핀이 VDD or VSS라 되어 있는데...
STM32F439에는 VSS로 되어 있다. (주의할 필요가 있다.)
 

STM32F4x







STM32F439


Posted by nexp
[ST_MICRO]/STM32F43x2013.08.09 18:02

CortexM4 STM32F439 출시

CortexM4 STM32F439 출시

ST사의 새로운 CortexM4인 STM32F439가 출시되었다.

시스템 클럭이 160Mhz에서 180Mhz로 올랐고 플래시 메모리도 2M, SRAM도 256K로 성능이 업그레이드 되었다.


그리고 가장큰 특징으로 TFT LCD Controller가 추가되었다.

SPI도 클럭과 채널이 6채널로 업되었다. SAI도 추가되었다.

아무튼 이정도면 최고 사양인듯하다.


- 180 MHz ( 225 DMIPS)

- 2 MB of Flash memory

- 256+4 KB of SRAM

LCD-TFT controller

 up to SVGA resolution with dedicated Chrom-ART Accelerator™ for enhanced graphic content creation (DMA2D)

3 SPIs (37.5 Mbits/s), Up to 6 SPIs (45 Mbits/s)

1 x SAI (serial audio interface)




Posted by nexp
[ST_MICRO]/STM32F42013.04.27 21:30

STM32F4 - VS1053 MP3 Module Test

 STM32F4 - VS1053 MP3 Module Test

 

 

 

STM32F4 를 이용하여 MP3출력시 소비 전류 측정을 위해 [LCD-EXP EVM] 보드를 이용하여 테스트 했다.

 

SPI클럭을 1.2mhz로 구동하고 클럭 분주를 1/2 로 설정하니 전류가 80mA -> 65mA로 줄어 들었다.


클럭을 좀더 낮추니 (1/4) 60mA로 줄어 든다. 이 상태에서도 MP3출력은 잘된다.
이때 SPI클럭을 좀더 올려 줬다.
SPI1_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_8;

static void SetSysClock(void)
{
 :

    /* HCLK = SYSCLK / 1*/
//    RCC->CFGR |= RCC_CFGR_HPRE_DIV1;
    RCC->CFGR |= RCC_CFGR_HPRE_DIV4; 

:

}

 


사용하지 않는 페리 끌수 있으면 좀더 줄지 않을까...

저전력 MCU가 아니라서 옵션이 많지 않은것이 아쉽다.

 

[LCD-EXP EVM] 회로도


 

 

[STM32F4 EVM] VS1053 제어 드라이버 코드

 

//-----------------------------------------------------------------------------
// SD Card HAL
#define _DEBUG_FAT_FILE                 0


#define MMC_CS_PORT      GPIOA
#define MMC_CS_BIT      BIT7

#define MMC_CS_INIT()     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);\
          GPIO_InitStructure.GPIO_Pin = MMC_CS_BIT|BIT4|BIT5;\
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;\
          GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;\
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;\
          GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;\
          GPIO_Init(GPIOA, &GPIO_InitStructure);Sbi(PORTA, BIT4|BIT5)
         
#define MMC_CS_HIGH()     sbi(MMC_CS_PORT, MMC_CS_BIT)
#define MMC_CS_LOW()     cbi(MMC_CS_PORT, MMC_CS_BIT)
#define MMC_ASSERT_INIT()    MMC_CS_INIT();MMC_CS_HIGH()
#define MMC_ASSERT()     MMC_CS_LOW()
#define MMC_DEASSERT()     MMC_CS_HIGH()


#define MMC_SpiInit()     SPI1_Init()
#define MMC_SendByte     SPI1_WriteReadByte
#define MMC_Send(Data)      SPI1_WriteByte(Data)
#define MMC_Recv()      SPI1_WriteReadByte(0xFF)
#define MMC_RecvP(Data)     MMC_Send(0xFF); (*(Data)=SPI1_ReadByte())
#define MMC_SPISpeed     SPI1_SetSpeed

#define SPI_Mode3()

#define FAT_MAX_NUM_FILE          50

#define FCLK_SLOW()             MMC_SPISpeed(SPI_SPEED_1MHZ) 
#define FCLK_FAST()             MMC_SPISpeed(SPI_SPEED_MAX)
//-----------------------------------------------------------------------------

 


//-----------------------------------------------------------------------------
// VS1053 Drvier
//-----------------------------------------------------------------------------
#define VS_DREQ_BIT          BIT6
#define VS_DREQ_PORT         PORTA

#define VS_CS_BIT          BIT5
#define VS_CS_PORT          PORTA


#define VS_RST_BIT      
#define VS_RST_DDR      
#define VS_RST_PORT      


#define VS1003_DREQ()           ((GPIOA->IDR&VS_DREQ_BIT))


#define VS1003_CS_H()      Sbi(VS_CS_PORT, VS_CS_BIT)
#define VS1003_CS_L()      Cbi(VS_CS_PORT, VS_CS_BIT)

#define vs1003_enable()      VS1003_CS_L()
#define vs1003_disable()     VS1003_CS_H()

#define VS_XDCS_BIT          BIT4
#define VS_XDCS_PORT         GPIOA
#define VS1003_XDCS_H()      sbi(VS_XDCS_PORT, VS_XDCS_BIT)
#define VS1003_XDCS_L()      cbi(VS_XDCS_PORT, VS_XDCS_BIT)


#define VS1003_RESET_H()     //Sbi(VS_RST_PORT, VS_RST_BIT)
#define VS1003_RESET_L()     //Cbi(VS_RST_PORT, VS_RST_BIT)

#define IsVs1003DataReady()     (GPIOA->IDR&VS_DREQ_BIT)

#define VS_SendByte       SPI1_WriteReadByte
#define VS_InitSpi()      //SPI1_Init()
#define VS_SpiSpeed_Low()        SPI1_SetSpeed(SPI_SPEED_1MHZ)
#define VS_SpiSpeed_High()     SPI1_SetSpeed(SPI_SPEED_4MHZ)


#define MP3_PORT_INIT()         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);\
              GPIO_InitStructure.GPIO_Pin = BIT4|BIT5;\
              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;\
              GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;\
              GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;\
              GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;\
              GPIO_Init(GPIOA, &GPIO_InitStructure);\
              GPIO_InitStructure.GPIO_Pin = VS_DREQ_BIT;\
                                            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;\
              GPIO_Init(GPIOA, &GPIO_InitStructure);\
                                            VS1003_CS_H();VS1003_XDCS_H()
//-----------------------------------------------------------------------------

Posted by nexp