主函数:

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
int main(void)
{
    led_Init();                              //led初始化
    Delay_init();                          //延时函数初始化
    while(1)
    {    
        //正向
    GPIO_ResetBits(GPIOC,GPIO_Pin_8);  /**低电平**/
        Delay(300);
        GPIO_SetBits(GPIOC,GPIO_Pin_8);  /**高电平*/

        GPIO_ResetBits(GPIOC,GPIO_Pin_9);  /**低电平*/
        Delay(300);
        GPIO_SetBits(GPIOC,GPIO_Pin_9);  /**高电平*/
    
        GPIO_ResetBits(GPIOC,GPIO_Pin_10); /**低电平*/
        Delay(300);
        GPIO_SetBits(GPIOC,GPIO_Pin_10);  /**高电平*/
        
        GPIO_ResetBits(GPIOC,GPIO_Pin_11);  /**低电平*/
        Delay(300);
        GPIO_SetBits(GPIOC,GPIO_Pin_11);  /**高电平*/
        
        GPIO_ResetBits(GPIOC,GPIO_Pin_12);  /**低电平*/
        Delay(300); 
        GPIO_SetBits(GPIOC,GPIO_Pin_12);  /**高电平*/
        
        GPIO_ResetBits(GPIOC,GPIO_Pin_13);  /**低电平*/
        Delay(300);
        GPIO_SetBits(GPIOC,GPIO_Pin_13);  /**高电平*/
        
        GPIO_ResetBits(GPIOC,GPIO_Pin_14);  /**低电平*/
        Delay(300);
        GPIO_SetBits(GPIOC,GPIO_Pin_14);  /**高电平*/
    
        GPIO_ResetBits(GPIOC,GPIO_Pin_15);  /**低电平*/
        Delay(300);
        GPIO_SetBits(GPIOC,GPIO_Pin_15);  /**高电平*/
        Delay(500);


        //反向
        GPIO_ResetBits(GPIOC,GPIO_Pin_14);  /**低电平*/
        Delay(200);
        GPIO_SetBits(GPIOC,GPIO_Pin_14);  /**高电平*/
    
        GPIO_ResetBits(GPIOC,GPIO_Pin_13);  /**低电平*/
        Delay(200);
        GPIO_SetBits(GPIOC,GPIO_Pin_13);  /**高电平*/
        
        GPIO_ResetBits(GPIOC,GPIO_Pin_12);  /**低电平*/
        Delay(200);
        GPIO_SetBits(GPIOC,GPIO_Pin_12);  /**高电平*/
        
        GPIO_ResetBits(GPIOC,GPIO_Pin_11);  /**低电平*/
        Delay(200);
        GPIO_SetBits(GPIOC,GPIO_Pin_11);  /**高电平*/
        
        GPIO_ResetBits(GPIOC,GPIO_Pin_10);  /**低电平*/
        Delay(200);
        GPIO_SetBits(GPIOC,GPIO_Pin_10);  /**高电平*/
        
        GPIO_ResetBits(GPIOC,GPIO_Pin_9);  /**低电平*/
        Delay(200);
        GPIO_SetBits(GPIOC,GPIO_Pin_9);  /**高电平*/
    
        GPIO_ResetBits(GPIOC,GPIO_Pin_8);  /**低电平*/
        Delay(200);
        GPIO_SetBits(GPIOC,GPIO_Pin_8);  /**高电平*/
        Delay(500);
}
}

led.c

#include "led.h"
void led_Init(void)                                       
  //定义led初始化函数
{
  GPIO_InitTypeDef GPIO_InitStructure;                 
  //定义了一个GPIO_InitTypeDef类型的结构体,要想看到结构体中的内容,可以从stm32f10x.h中找到其结构体内部包含了哪些变量, Structure变量可随意取
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  //GPIOC的时钟被打开( 因为STM32为了实现低功耗,设计了很复杂的时钟系统,每个外设配置使用前都要开启外设时钟)
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
  //选择要控制的GPIO引脚
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  //设置引脚速率为50MHZ
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     
  //选择GPIOC引脚输出方式为推挽输出方式
  GPIO_Init(GPIOC, &GPIO_InitStructure);              
  //是把上面配置的信息写入这个结构体中,也叫对引脚配置的初始化
  GPIO_SetBits(GPIOC,GPIO_Pin_All);                      
  //开始全为高电平————全灭    /
}

led.h

#ifndef __LED_H_
#define __LED_H_
#include "stm32f10x.h"

void led_Init(void);

#endif

delay.c:

#include "delay.h"
u32 TimingDelay;
//32对应就是32位数据了,我们使用库开发时,库文件中已经把原本的unsigned int\short\char宏定义为u32、 u16、 u8等等数据类型了
//u8是unsigned char,u16是unsigned short,u32是unsigned int这些都属于变量类型
void Delay_init(void)
{
SysTick_Config(SystemCoreClock / 1000);
//是判断你配置的定时频率是否可以实现,如果可以就继续往下执行,如果不可以就一直停在这里。
}
void Delay(u32 nTime)
{ 
TimingDelay= nTime; 
//延时函数。1个nTime相当于时间:1ms
while(TimingDelay != 0);
}

delay.h:

#ifndef __DELAY_H_
#define __DELAY_H_
#include "stm32f10x.h"
void Delay_init(void);
void Delay(u32 nTime);
#endif

以上的流水灯重复度较高,改用switch.....case...语句,并将该功能写为一个函数:

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
void LED_Control(u8 LED_Number);   

int main(void)
{
    u8 LED_Number=0 ;
    led_Init();                              //led初始化
    Delay_init();                          //延时函数初始化
    while(1)
    {    
      LED_Control(LED_Number);
        Delay(200);
        LED_Number++;
        if(LED_Number==8)
        {
            LED_Number = 0;
        }
        
        
  }
}

void LED_Control(u8 LED_Number)
{
     GPIO_SetBits(GPIOC,GPIO_Pin_All);        //全灭
    switch(LED_Number)
    {
        case 0:
                    GPIO_ResetBits(GPIOC,GPIO_Pin_8); //
                    break;
        case 1:
                GPIO_ResetBits(GPIOC,GPIO_Pin_9);     
                break;
        case 2:
                GPIO_ResetBits(GPIOC,GPIO_Pin_10);        
                break;
        case 3:
                GPIO_ResetBits(GPIOC,GPIO_Pin_11);      
                break;
        case 4:
                    GPIO_ResetBits(GPIOC,GPIO_Pin_12);       
                    break;
        case 5:
                GPIO_ResetBits(GPIOC,GPIO_Pin_13);     
                break;
        case 6:
                GPIO_ResetBits(GPIOC,GPIO_Pin_14);        
                break;
        case 7:
                GPIO_ResetBits(GPIOC,GPIO_Pin_15);      
                break;
        default:
                  GPIO_SetBits(GPIOC,GPIO_Pin_All);
                  break;
  }
}

总结:

(1)设置输出电平函数:SetBits         高电平

                                          ResetBits     低电平

(2)推挽输出(GPIO_Mode_Out_PP)

         可以输出高低电平。

(3)GPIO

         GPIO是通用输入输出端口的简称,就是stm32可以控制的引脚。

         GPIOx:x可以是A、B、C、D、E,以此来选择GPIO外设。

 (4)GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15为控制八个LED等的端口。

每个人都会有一段异常艰难的时光 。 生活的压力 , 工作的失意 , 学业的压力。 爱的惶惶不可终日。 挺过来的 ,人生就会豁然开朗。 挺不过来的 ,时间也会教你 ,怎么与它们握手言和 ,所以不必害怕的。 ——杨绛