Blinky LED 燈閃爍

     

     

     

    
    #include <stm32l1xx.h>
    #include "LED.h"
    
    const unsigned long led1=6UL;
    const unsigned long led2=7UL;
    
    const unsigned long led_mask[] = {1UL << led1, 1UL << led2};
    
    /*-----------------------------------------------------------------------------
     *      LED_Init:  Initialize LED Pins
     *
     * Parameters: (none)
     * Return:     (none)
     *----------------------------------------------------------------------------*/
    void LED_Init (void) {
    
      RCC->AHBENR |=  (1UL <<  2);                  /* Enable GPIOC clock         */
      
      RCC->AHBENR |= RCC_AHBENR_GPIOBEN; //enable clock for LEDs        /* Enable GPIOC clock         */
    
      /* Configure LED (PC.8..9) pins as push-pull outputs, No pull-up, pull-down */
      GPIOB->MODER   &= ~((3UL << 2*led1) | (3UL << 2*led2));
      GPIOB->MODER   |=  ((1UL << 2*led1) | (1UL << 2*led2));
      GPIOB->OTYPER  &= ~((1UL <<   led1) | (1UL <<   led2));
      GPIOB->OSPEEDR &= ~((3UL << 2*led1) | (3UL << 2*led2));
      GPIOB->OSPEEDR |=  ((1UL << 2*led1) | (1UL << 2*led2));
      GPIOB->PUPDR   &= ~((3UL << 2*led1) | (3UL << 2*led2));
    }
    
    
    /*-----------------------------------------------------------------------------
     *      LED_On: Turns on requested LED
     *
     * Parameters:  num - LED number
     * Return:     (none)
     *----------------------------------------------------------------------------*/
    void LED_On (uint32_t num) {
    
      if (num < LED_NUM) {
        GPIOB->BSRRL = led_mask[num];
      }
    }
    
    /*-----------------------------------------------------------------------------
     *       LED_Off: Turns off requested LED
     *
     * Parameters:  num - LED number
     * Return:     (none)
     *----------------------------------------------------------------------------*/
    void LED_Off (uint32_t num) {
    
      if (num < LED_NUM) {
        GPIOB->BSRRH = led_mask[num];
      }
    }
    
    /*-----------------------------------------------------------------------------
     *       LED_Val: Write value to LEDs
     *
     * Parameters:  val - value to be displayed on LEDs
     * Return:     (none)
     *----------------------------------------------------------------------------*/
    void LED_Out (uint32_t value) {
      int i;
    
      for (i = 0; i < LED_NUM; i++) {
        if (value & (1<<i)) {
          LED_On (i);
        } else {
          LED_Off(i);
        }
      }
    }