arm cortex-m3

stm32 cortex-m3(STM32F103C8T6)led를 깜박여보자(2)!!!!!

세상모든방법 2015. 8. 14. 16:09

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    
   }
  }
}