[ST_MICRO]/STM32F42011. 12. 5. 21:30

[STM32F4 ] PLL 설정

[STM32F4 ] PLL 설정

STM32F4 의 최대 동작 속도는 168Mhz이다.  SystemInit() 함수를 이용하여 PLL을 설정 가능하고 startup_stm32f4xx.s 에서 초기화시 실행된다.

외부 입력 클럭은 8Mhz로 설정했다.

#if !defined  (HSE_VALUE) 
  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */    
#endif /* HSE_VALUE */


/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
#define PLL_M      8


void SystemInit(void)
{
  /* FPU settings ------------------------------------------------------------*/
  #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
    SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  /* set CP10 and CP11 Full Access */
  #endif

  /* Reset the RCC clock configuration to the default reset state ------------*/
  /* Set HSION bit */
  RCC->CR |= (uint32_t)0x00000001;

  /* Reset CFGR register */
  RCC->CFGR = 0x00000000;

  /* Reset HSEON, CSSON and PLLON bits */
  RCC->CR &= (uint32_t)0xFEF6FFFF;

  /* Reset PLLCFGR register */
  RCC->PLLCFGR = 0x24003010;

  /* Reset HSEBYP bit */
  RCC->CR &= (uint32_t)0xFFFBFFFF;

  /* Disable all interrupts */
  RCC->CIR = 0x00000000;

#ifdef DATA_IN_ExtSRAM
  SystemInit_ExtMemCtl();
#endif /* DATA_IN_ExtSRAM */
        
  /* Configure the System clock source, PLL Multiplier and Divider factors,
     AHB/APBx prescalers and Flash settings ----------------------------------*/
  SetSysClock();

  /* Configure the Vector Table location add offset address ------------------*/
#ifdef VECT_TAB_SRAM
  SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
#else
  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
#endif
}



PA8에 PCU클럭을 출력해서 확인 할 수 있는데. 아래와 같이 설정해 주면 된다.
  /* Output HSE clock on MCO1 pin(PA8) ****************************************/
  /* Enable the GPIOA peripheral */
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
 
  /* Configure MCO1 pin(PA8) in alternate function */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; 
  GPIO_Init(GPIOA, &GPIO_InitStructure);
   
  /* HSE clock selected to output on MCO1 pin(PA8)*/
  RCC_MCO1Config(RCC_MCO1Source_PLLCLK, RCC_MCO1Div_1);




STM32F4 RCC블록도





Posted by nexp

댓글을 달아 주세요

  1. fkkmemi

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

    2012.03.16 15:48 [ ADDR : EDIT/ DEL : REPLY ]

[ST_MICRO]/STM32F42011. 12. 5. 20:30

[STM32F4] GPIO 테스트

[STM32F4] GPIO 테스트
STM32F103과 하드웨어 적으로 크게 변경된 것이 없지만 소프트웨어 적으로 약간의 변경이 있는것 같다.
대부분의 코드는 호환 되지만 기능이 약간 추가되고 레지스터명이 조금 변경 된것 같다.






STM32F4 에서는 GPIO 제어 레지스터가 변경되어 약간 수정 해 주었다.

//#define sbi(Port, Bit)     Port->BSRR = Bit
//#define cbi(Port, Bit)     Port->BRR = Bit


#define sbi(Port, Bit)    Port->BSRRH = Bit
#define cbi(Port, Bit)    Port->BSRRL = Bit



STM32F4 GPIO 설정 HAL 드라이버 코드
//-----------------------------------------------------------------------------
//LED Driver
#define LED1_BIT      BIT11
#define LED1_PORT      GPIOG
#define Led1Init()      
#define Led1Off()      sbi(LED1_PORT, LED1_BIT)
#define Led1On()      cbi(LED1_PORT, LED1_BIT)
#define Led1Toggle()     Tbi(PORTG, LED1_BIT)

#define Led1Init()       RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);\
          GPIO_InitStructure.GPIO_Pin = LED1_BIT;\
          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(GPIOG, &GPIO_InitStructure); 


#define LED2_BIT      BIT0
#define LED2_PORT      GPIOA
#define Led2Init()      
#define Led2Off()      sbi(LED2_PORT, LED2_BIT)
#define Led2On()      cbi(LED2_PORT, LED2_BIT)
#define Led2Toggle()     Tbi(PORTA, LED1_BIT)

#define Led2Init()       RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);\
          GPIO_InitStructure.GPIO_Pin = LED2_BIT;\
          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); 
  
//-----------------------------------------------------------------------------



STM32F4 GPIO 테스트 예제 코드
#include "system.h"

int main(void)
{
    Led1Init();
    Led2Init()
   
    while (1)
    {
        Led1Toggle();
        Led2Toggle();
        Delay(500);
    }
}

Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM32F42011. 12. 5. 20:00

[STM32F4] 속도 측정 - GPIO 토글 속도 테스트

[STM32F4] 속도 측정 - GPIO 토글 속도 테스트



STM32는 Cortex-M4F 코어로 168Mhz로 동작한다. GPIO 토글 테스트로 MCU의 속도를 테스트 해 보았다.
물론 클럭속도가 중요한 요소는 아지만 마이컴에서 GPIO속도는 중요할 때가 많이 있다. STM32F4는 FPU가 있어 DSP기능도 뛰어난것 같다.
[참고] MCU속도 측정 결과 

클럭 설정없이 그냥 GPIO On/Off 시키니 10Mhz 출력된다. 느린데..
뭔가 이상한것 같다.

PLL설정후 STM32F4의 GPIO토글 속도는  33Mhz 까지 출력된다.
STM32F103에서 12Mhz가 출력 되었던과 비교하면 확실히 빨라진것을 확인 할 수 있다. 메인클럭이 72Mhz -> 168Mhz로 되었기 때문이다.


STM32F4 클럭 테스트를 위한 코드는 비트제어 방식으로  했고 아래 와 같다.

     25              while (1)
     26              {
     27                  Led1On();
   \                     ??main_1:
   \   00000082   3E83               STRH     R6,[R7, #+24]
     30                  Led1Off();
   \   00000084   7E83               STRH     R6,[R7, #+26]
   \   00000086   FCE7               B.N      ??main_1
   \                     ??main_0:
   \   00000088   ........           DC32     GPIO_InitStructure
   \   0000008C   00000240           DC32     0x40020000
   \   00000090   00180240           DC32     0x40021800
Posted by nexp

댓글을 달아 주세요

[ST_MICRO]/STM32F42011. 12. 1. 15:55

[STM32F4] Cortex-M4 테스트 보드제작

[STM32F4] Cortex-M4 테스트 보드제작




우선 기존의 [STM32-MType EVM] 보드의 PCB를 이용하여 테스트 했다. 핀맵이 동일한데 전원핀 두개가 변경되었다.
STM32F405 를 이용하여 테스트 했다.




STM32F4는 Flash Loader 2.4에서 다운로드 가능하다.

Flash_Loader_Demonstrator_v2.4.0_Setup.exe



현제 인식되고 다운로드 까지는 되지만 코드가 실행이 안되는것 같다.
컴파일러 문제 인듯...
컴파일러를 최신으로 설치 하니 정상적으로 동작한다.





기존 확장 테스트 보드를 그대로 사용하여 테스트 가능하다.






[STM32F4 - MType EVM] 회로도





Posted by nexp

댓글을 달아 주세요

  1. ryuhhh

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

    2012.01.06 18:21 [ ADDR : EDIT/ DEL : REPLY ]

[ST_MICRO]/STM322011. 11. 29. 21:00

STM32F1과 STM32F4 핀맵 차이

STM32F1과  STM32F4 핀맵 차이

STM32F1xx 와 STM32F4xx는 핀맵이 호환된다고 한다.
하지만 전원핀이 조금 다르다고 하는데... (왜 이렇게 만들었지?)
암튼 몇군데 손보면 옛날 PCB 그대로 사용할 수 있을것 같다.
















Posted by nexp

댓글을 달아 주세요

  1. 안졸리냐젤리

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

    2014.05.31 20:34 [ ADDR : EDIT/ DEL : REPLY ]