/****************************************************************************
|
* Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com
|
* Author: GuoWenxue<guowenxue@gmail.com> QQ: 281143292
|
* Description: ±¾Àý³ÌÔڷܶ·STM32 V5¿ª·¢°åÉϵ÷ͨ¹ý; LED1-PB5 LED2-PD6 LED3-PD3
|
*
|
* ChangeLog:
|
* °æ±¾ºÅ ÈÕÆÚ ×÷Õß ËµÃ÷
|
* V1.0.0 2014.08.22 GuoWenxue ·¢²¼¸Ã°æ±¾
|
****************************************************************************/
|
|
#include"stm32f10x.h"
|
|
#define ON 1
|
#define OFF 0
|
|
#define DELAY_TIME 0x3FFFFF
|
|
enum
|
{
|
LED1 = 0,
|
LED2,
|
LED3,
|
MAX_LED,
|
};
|
|
typedef struct led_gpio_s
|
{
|
int num; /* LED񅧏 */
|
GPIO_TypeDef *group; /* LEDʹÓõÄGPIOÔÚÄÄÒ»×é: GPIOB or GPIOD */
|
uint16_t pin; /* LEDʹÓõÄGPIO×éÖеÄÄÇÒ»¸öpin: GPIO_Pin_x */
|
} led_gpio_t;
|
|
|
led_gpio_t leds_gpio[MAX_LED] =
|
{
|
{LED1, GPIOB, GPIO_Pin_5}, /* LED1 ÓõÄGPB5 */
|
{LED2, GPIOD, GPIO_Pin_6}, /* LED2 ÓõÄGPD6 */
|
{LED3, GPIOD, GPIO_Pin_3}, /* LED3 ÓõÄGPD3 */
|
};
|
|
|
void init_led_gpio(void)
|
{
|
int i;
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
/* ʹÄÜPBºÍPD×é GPIOµÄʱÖÓ */
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD , ENABLE);
|
|
/*ÉèÖà PB5(LED1), PD6(LED2), PD3(LED3)Ϊ GPIO Êä³öÍÆÃâģʽ£¬¿ÚÏ߷תËÙ¶ÈΪ50MHz */
|
for(i=0; i<MAX_LED; i++)
|
{
|
/*ÉèÖà PB5(LED1)Ϊ GPIO Êä³öÍÆÃâģʽ£¬¿ÚÏ߷תËÙ¶ÈΪ50MHz */
|
GPIO_InitStructure.GPIO_Pin = leds_gpio[i].pin;
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
GPIO_Init(leds_gpio[i].group, &GPIO_InitStructure);
|
}
|
}
|
|
void turn_led(int which, int cmd)
|
{
|
if(which<0 || which> MAX_LED )
|
return;
|
|
if(OFF == cmd)
|
GPIO_ResetBits(leds_gpio[which].group, leds_gpio[which].pin);
|
else
|
GPIO_SetBits(leds_gpio[which].group, leds_gpio[which].pin);
|
}
|
|
void Delay(__IO uint32_t nCount)
|
{
|
for(; nCount != 0; nCount--) ;
|
}
|
|
int main(void)
|
{
|
/* ³õʼ»¯ÏµÍ³Ê±ÖÓ */
|
SystemInit();
|
|
/* ³õʼ»¯¸÷¸öLEDµÄGPIO¹Ü½Å */
|
init_led_gpio();
|
|
while(1)
|
{
|
/* °ÑLED1µãÁÁ£¬ LED2ºÍLED3Ãðµô */
|
turn_led(LED1, ON);
|
turn_led(LED2, OFF);
|
turn_led(LED3, OFF);
|
Delay(DELAY_TIME);
|
|
/* °ÑLED2µãÁÁ£¬ LED1ºÍLED3Ãðµô */
|
turn_led(LED2, ON);
|
turn_led(LED1, OFF);
|
turn_led(LED3, OFF);
|
Delay(DELAY_TIME);
|
|
/* °ÑLED3µãÁÁ£¬ LED1ºÍLED2Ãðµô */
|
turn_led(LED3, ON);
|
turn_led(LED2, OFF);
|
turn_led(LED1, OFF);
|
Delay(DELAY_TIME);
|
}
|
}
|
|