STM32 GPIO 제어
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);
}
}