/**************************************************************************** * Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com * Author: GuoWenxue 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 ) 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); } }