출력 레지스터 제어 전 먼저 설정해야 할 것이 있다.
- 해당 핀 클럭 소스 선택 HSI or HSE
- 타입(풀다운 또는 풀업) -> GPIOx_OTYPER , GPIOx_PUPDR
- 클럭 스피드 지정 -> GPIOx_OSPEEDR
- 모드 지정 -> GPIOx_MODER
GPIO 출력 설정 레지스터 순서
1. GPIOX_CRL - configuration register
2. GPIOX_CRH - configuration register
3. GPIOX_ODR - data output register
4. GPIOX_BSRR - set/reset register
5. GPIOX_BRR - reset register
1. Enable GPIOX clock
2. Set the PIN as output
3. Configure the output mode
4. Configure the output state
5. Configure the output speed
6. Configure the output pullup/pulldown
예시1)
NUCLEO STM32F411에서 PA5과 LED2(LD2)는 HW적으로 연결되어 있다.
직접 레지스터 제어로 PA5을 출력 핀으로 세팅하고 LED2가 1초마다 ON/OFF 반복하는 코드를 작성
RCC->AHB1ENR |= (1<<0); //GPIOA ENABLE
GPIOA->MODER |= (1<<10); // PA5 output mode
GPIOA->OTYPER &= ~(1<<5); //PA5 output type Output push pull
GPIOA->OSPEEDR |= (1<<11); //output speed fast speed
GPIOA->PUPDR &= ~((1<<10) | (1<<11)); //no pull-up no pull-down
while (1)
{
GPIOA->ODR |= (1<<5); //GPIOA_BSRR로 대체 가능
HAL_Delay(1000);
GPIOA->ODR &= ~(1<<5); //GPIOA_BSRR로 대체 가능
HAL_Delay(1000);
}
GPIO 입력 설정 레지스터 순서
1. GPIOX_CRL - configuration register
2. GPIOX_CRH - configuration register
3. GPIOX_IDR - data input register
4. GPIOX_BSRR - set/reset register
5. GPIOX_BRR - reset register
1. Enable GPIOX clock
2. Set the PIN as input
3. Configure the Pull UP / Pull Down mode
RCC->AHB1ENR |= (1<<0);
GPIOC->MODER &= ~((1<<26) | (1<<27)); //PC13 00 input
GPIOC->PUPDR |= (1<<26) ; //PC13 pull-up
uint32_t count = 0;
while(1)
{
if(!(GPIOC->IDR & (1<<13)))
{
count++;
if(count % 2 != 0) GPIOA->ODR |= (1<<5);
else GPIOA->ODR &= ~(1<<5);
}
]
1. RCC_APB2ENR 레지스터 제어
2. #define GPIOC_CRL (*(volatile unsigned *)0x40011000) #define GPIOC_CRH (*(volatile unsigned *)0x40011004) 3.#define GPIOC_BSRR (*(volatile unsigned *)0x40011010) #define GPIOC_BRR (*(volatile unsigned *)0x40011014) 4.#define GPIOC_ODR (*(volatile unsigned *)0x4001100c)
예시1)
NUCLEO STM32F411에서 PC13과 USER BUTTON1과 HW적으로 연결되어 있다.
직접 레지스터 제어로 PC13을 입력 핀으로 세팅하고 USER BUTTON을 짝수번 누르면
LED2가 켜지고 , 홀수번 누르면 OFF 반복하는 코드를 작성
다음 USART TX/RX 통신을 레지스터 제어를 통해 구현해보록 하자.
'Stm32 > 실제 구동(stm32cubeide)' 카테고리의 다른 글
ADC Multi Channel - Joy Stick (0) | 2024.07.10 |
---|---|
UART 실습[2] (0) | 2024.06.30 |
Timer Interrupt (0) | 2024.06.18 |
UART (Polling, Interrupt , DMA) [HAL-DRIVER 이용] (0) | 2024.05.08 |
GPIO 입출력 [HAL-DRIVER 이용] (0) | 2024.05.01 |