목차
[WAT-STM32-2.8] 03번 예제 GPIOA,GPIOB 동시 사용으로 LED ON/OFF
WAT-STM32-2.8 예제 중 3번째로 GPIOA, GPIOB 를 동시에 사용하는 LED Blink 입니다.
LED1, LED2, LED3 를 1초 간격으로 ON/OFF 합니다.
주요 코드
// WAT_STM3228_03 GPIOA, GPIOB 동시 사용 // 1초 간격으로 LED1, LED2, LED3 ON/OFF // // 출처: https://docs.whiteat.com/?p=3403 // #define __IO volatile typedef unsigned int uint32_t; typedef __IO uint32_t vu32; typedef unsigned short int uint16_t; #define GPIO_Pin_0 ((uint16_t)0x0001) /*!< Pin 0 selected */ #define GPIO_Pin_1 ((uint16_t)0x0002) /*!< Pin 1 selected */ #define GPIO_Pin_2 ((uint16_t)0x0004) /*!< Pin 2 selected */ #define GPIO_Pin_3 ((uint16_t)0x0008) /*!< Pin 3 selected */ #define GPIO_Pin_4 ((uint16_t)0x0010) /*!< Pin 4 selected */ #define GPIO_Pin_5 ((uint16_t)0x0020) /*!< Pin 5 selected */ #define GPIO_Pin_6 ((uint16_t)0x0040) /*!< Pin 6 selected */ #define GPIO_Pin_7 ((uint16_t)0x0080) /*!< Pin 7 selected */ #define GPIO_Pin_8 ((uint16_t)0x0100) /*!< Pin 8 selected */ #define GPIO_Pin_9 ((uint16_t)0x0200) /*!< Pin 9 selected */ #define GPIO_Pin_10 ((uint16_t)0x0400) /*!< Pin 10 selected */ #define GPIO_Pin_11 ((uint16_t)0x0800) /*!< Pin 11 selected */ #define GPIO_Pin_12 ((uint16_t)0x1000) /*!< Pin 12 selected */ #define GPIO_Pin_13 ((uint16_t)0x2000) /*!< Pin 13 selected */ #define GPIO_Pin_14 ((uint16_t)0x4000) /*!< Pin 14 selected */ #define GPIO_Pin_15 ((uint16_t)0x8000) /*!< Pin 15 selected */ #define GPIO_Pin_All ((uint16_t)0xFFFF) /*!< All pins selected */ #define RCC_APB2Periph_AFIO ((uint32_t)0x00000001) #define RCC_APB2Periph_GPIOA ((uint32_t)0x00000004) #define RCC_APB2Periph_GPIOB ((uint32_t)0x00000008) #define RCC_APB2Periph_GPIOC ((uint32_t)0x00000010) #define RCC_APB2Periph_GPIOD ((uint32_t)0x00000020) /************ GPIOB <*************/ typedef struct { __IO uint32_t CRL; __IO uint32_t CRH; __IO uint32_t IDR; __IO uint32_t ODR; __IO uint32_t BSRR; __IO uint32_t BRR; __IO uint32_t LCKR; } GPIO_TypeDef; typedef struct { __IO uint32_t CR; __IO uint32_t CFGR; __IO uint32_t CIR; __IO uint32_t APB2RSTR; __IO uint32_t APB1RSTR; __IO uint32_t AHBENR; __IO uint32_t APB2ENR; __IO uint32_t APB1ENR; __IO uint32_t BDCR; __IO uint32_t CSR; } RCC_TypeDef; /********* GPIOA 메모리 지정 *******/ #define PERIPH_BASE ((uint32_t)0x40000000) #define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) #define GPIOA_BASE (APB2PERIPH_BASE + 0x0800) #define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) /********* GPIOB 메모리 지정 *******/ #define PERIPH_BASE ((uint32_t)0x40000000) #define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) #define GPIOB_BASE (APB2PERIPH_BASE + 0x0c00) #define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) /************ RCC 메모리 지정 *************/ #define AHBPERIPH_BASE (PERIPH_BASE + 0x20000) #define RCC_BASE (AHBPERIPH_BASE + 0x1000) #define RCC ((RCC_TypeDef *) RCC_BASE) void Delay(vu32 nCount); int main(void) { /* GPIOA, GPIOB Port Enable */ RCC->APB2ENR |= RCC_APB2Periph_GPIOA; RCC->APB2ENR |= RCC_APB2Periph_GPIOB; /*-- GPIO Mode Configuration speed, input/output -----------------------*/ /*-- GPIOA, GPIOB max speed: 50MHz , General purpose output push-pull ---*/ GPIOA->CRL &= 0xFFFF00FF; GPIOA->CRL |= 0x00003300; GPIOB->CRL &= 0xFFFFF0FF; GPIOB->CRL |= 0x00000300; while (1) { GPIOA->BRR = GPIO_Pin_2; GPIOA->BRR = GPIO_Pin_3; GPIOB->BRR = GPIO_Pin_2; Delay(0x17FFFF); GPIOA->BSRR = GPIO_Pin_2; GPIOA->BSRR = GPIO_Pin_3; GPIOB->BSRR = GPIO_Pin_2; Delay(0x17FFFF); } } void Delay(vu32 nCount) // delay function { for(; nCount != 0; nCount--); }
결과화면
전체 예제
제품 구매
WAT-STM32-2.8 [STM32F103RB Board + 2.8인치 TFT LCD 터치 세트] 는 https://kit128.com/goods/view?no=221 에서 구매하실 수 있습니다.