/****************************************************************************
|
* 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);
|
}
|
}
|
|