stm32 cortex-m3(STM32F103C8T6)led를 깜박여보자(2)!!!!!
stm32 cortex-m3(STM32F103C8T6)led를 깜박여보자(1)!!!!! 글에서는 GPIOB_ODR 레지스터를 사용해서 LED를 깜박여 보았는데요.
GPIOB_ODR 레지스터를 사용해서 LED를 깜박이면 레지스터를 32개 모두 건들여 주기 때문에 비효율적일 수 있습니다. 그래서 GPIOB_BSRR 레지스터를 사용해서 깜박여보도록 하겠습니다.
GPIOB_BSRR레지스터를 사용하면 비트 1개만 건들여서 LED를 제어할 수 있기 때문에 실행속도가 매우 빨라집니다
#define RCC_BPB2ENR (*(volatile unsigned int*)0x40021018)
#define GPIOB_BSRR (*(volatile unsigned *)0x40010C10)
#define GPIOB_CRL (*(volatile unsigned *)0x40010C00)
int main()
{
int i = 0;
//클럭인가
RCC_BPB2ENR &= 0xfffffff0; //변경하려는 비트만 0으로 초기화
RCC_BPB2ENR |= 0x00000008; //portB 클럭인가
//인아웃모드설정
GPIOB_CRL &= 0xff0fffff; //변경하려는 비트만 0으로 초기화
GPIOB_CRL |= 0x00100000; //PB5 pushpull // outputmode max speed 10mhz
while(1)
{
for(i=0;i<1000000;i++)
{
GPIOB_BSRR |= 0x00200000; //변경하려는 비트만 0으로 초기화
}
for(i=0;i<1000000;i++)
{
GPIOB_BSRR |= 0x00000020; // pb5 Port output data
}
}
}