想了想,我还是觉得要从零开始学起,第一步点亮LED灯。库函数走起!!
	
	一、查看LED连接的原理图
	
 
	注意图示的LED方向错了 
	再原理图中LED灯连接 PB8 端口,根据图示说明 ,只要将 PB8 IO口的电平拉低,就将点亮LED灯!
	二、编写LED端口初始化的程序:在程序中,使用IO口模式为推挽输出。
	
 
	三、编写LED点亮的子程序;由于使用的位带(bit-band)操作,使得操作STM32的IO口如同51一样方便。大大提高了编程的速度!
	支持位带操作的两个内存区的范围是:
              0x2000_0000‐0x200F_FFFF(SRAM 区中的最低 1MB)
              0x4000_0000‐0x400F_FFFF(片上外设区中的最低 1MB)
       对 SRAM 位带区的某个比特,记它所在字节地址为 A,位序号为 n(0<=n<=7),则该比特在别名区的地址为:
              AliasAddr=0x22000000+((A-0x20000000)*8+n)*4=0x22000000+(A-0x20000000)*32+n*4
       对于片上外设位带区的某个比特,记它所在字节的地址为 A,位序号为 n(0<=n<=7),则该比特在别名区的地址为:
              AliasAddr=0x42000000+((A-0x40000000)*8+n)*4=0x42000000+(A-0x40000000)*32+n*4
       上式中,“*4”表示一个字为 4 个字节,“*8”表示一个字节中有 8 个比特。
举个例子 定义PBout端口,那么 
	 A = GPIOA_BASE + ODR的偏移地址  = GPIOA_BASE + 0x0c
	 A = GPIOA_BASE + IDR的偏移地址   = GPIOA_BASE + 0x08
	#define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C
	#define BitBand(Addr, BitNum)      *((volatile unsigned long  *) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))  //乘32等于左移5乘5等于左移2
	#define PBout(n) BitBand(GPIOB_ODR_Addr,n)
	#define LED1 PBout(8) 
	具体实现思想,参考<<CM3权威指南>>第五章(87页~92页).   
	这样就可以对LED1进行位操作
	在程序中是这么实现的:
	//位带操作,实现51类似的GPIO控制功能  
//IO口操作宏定义  
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))   
#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))   
#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum))   
 //IO口地址映射 
#define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C   
#define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C   
#define GPIOC_ODR_Addr    (GPIOC_BASE+12) //0x4001100C   
#define GPIOD_ODR_Addr    (GPIOD_BASE+12) //0x4001140C   
#define GPIOE_ODR_Addr    (GPIOE_BASE+12) //0x4001180C   
#define GPIOF_ODR_Addr    (GPIOF_BASE+12) //0x40011A0C      
#define GPIOG_ODR_Addr    (GPIOG_BASE+12) //0x40011E0C      
  
#define GPIOA_IDR_Addr    (GPIOA_BASE+8) //0x40010808   
#define GPIOB_IDR_Addr    (GPIOB_BASE+8) //0x40010C08   
#define GPIOC_IDR_Addr    (GPIOC_BASE+8) //0x40011008   
#define GPIOD_IDR_Addr    (GPIOD_BASE+8) //0x40011408   
#define GPIOE_IDR_Addr    (GPIOE_BASE+8) //0x40011808   
#define GPIOF_IDR_Addr    (GPIOF_BASE+8) //0x40011A08   
#define GPIOG_IDR_Addr    (GPIOG_BASE+8) //0x40011E08   
   
//IO口操作,只对单一的IO口!  
//确保n的值小于16!  
#define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  //输出   
#define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n)  //输入   
  
#define PBout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)  //输出   
#define PBin(n)    BIT_ADDR(GPIOB_IDR_Addr,n)  //输入   
  
#define PCout(n)   BIT_ADDR(GPIOC_ODR_Addr,n)  //输出   
#define PCin(n)    BIT_ADDR(GPIOC_IDR_Addr,n)  //输入   
  
#define PDout(n)   BIT_ADDR(GPIOD_ODR_Addr,n)  //输出   
#define PDin(n)    BIT_ADDR(GPIOD_IDR_Addr,n)  //输入   
  
#define PEout(n)   BIT_ADDR(GPIOE_ODR_Addr,n)  //输出   
#define PEin(n)    BIT_ADDR(GPIOE_IDR_Addr,n)  //输入  
  
#define PFout(n)   BIT_ADDR(GPIOF_ODR_Addr,n)  //输出   
#define PFin(n)    BIT_ADDR(GPIOF_IDR_Addr,n)  //输入  
  
#define PGout(n)   BIT_ADDR(GPIOG_ODR_Addr,n)  //输出   
#define PGin(n)    BIT_ADDR(GPIOG_IDR_Addr,n)  //输入
	 
	同时宏定义LED端口
#define LED1 PBout(8)
	LED点亮的子程序:
	
 
	最后、在主程序中点亮LED
	int main(void)
 {
     delay_init();
     LED_Init();
     while(1)
     {
         LED_Flash(200); //led闪烁延时200ms
     }
 }
	这样就顺利的点亮了LED灯!