CPU/STM32F103

STM32 GPIO 제어

멋진 고파 2013. 2. 7. 17:41
환경설정이 끝났다.
이제 하나 하나 각 기능에 대하여 시험하려 한다.
프로그램 언어에서 Hello world를 처음 프린트하듯이 펌웨의 Hello world는 LED ON/OFF하기.
인자 GPIO를 가지고 LED를 ON/OFF하고자 한다.

1.GPIO설정

1.1 해당 포트에 대하여 CLOCK설정한다.

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_LED, ENABLE);

  

-RCC_APB2Periph_GPIO_LED는 platform_config.h에 아래와 같이 정의

-#define RCC_APB2Periph_GPIO_LED    RCC_APB2Periph_GPIOE


1.2 해당 포트의 각 핀 마다 모드를 설정한다.

 1>GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15 | GPIO_Pin_12;

  2>GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 

  3>GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 

  4>GPIO_Init(GPIO_LED, &GPIO_InitStructure); 


-1>은 설정하고자 하는 핀의 목록을 설정한다.

-2>은 1>에서 설정한 핀의 모드를 설정한다.

-3>은 1>에서 설정한 출력속도를 설정한다.

-4>은 해당 구조체를 , 해당포트와 설정하여 GPIO_Init함수를 호출하여 CPU에 적용한다.

-GPIO_LED는 platform_config.h에 정의 

-#define GPIO_LED                   GPIOE 


2.. 전체구조

#include "stm32f10x_lib.h"

#include "platform_config.h"


GPIO_InitTypeDef GPIO_InitStructure;

ErrorStatus HSEStartUpStatus;


/* Private function prototypes -----------------------------------------------*/

void RCC_Configuration(void);

void NVIC_Configuration(void);

void Delay(vu32 nCount);


int main(void)

{


  /* System Clocks Configuration **********************************************/

  RCC_Configuration();   // clock에 대한 정의를 한다.


  /* NVIC Configuration *******************************************************/

  NVIC_Configuration(); // ram 또는 rom 에 따라 vector를 설정한다.


  /* Configure IO connected to LD1, LD2, LD3 and LD4 leds *********************/

  /* Enable GPIO_LED clock */

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_LED, ENABLE); 


   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15 | GPIO_Pin_12; 핀설정

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIO_LED, &GPIO_InitStructure); 


  while (1)

  {

    /* Turn on LD1 */

    GPIO_SetBits(GPIO_LED, GPIO_Pin_12); // 해당 핀 셋

    /* Insert delay */

    Delay(0xFFFFF);

    

    GPIO_ResetBits(GPIO_LED, GPIO_Pin_12); // 해당핀 리셋

    Delay(0xFFFFF);

  }

}