STM32F407 跑马灯实验

STM32F407 跑马灯实验

                                           
 
                                     
STM32F4系列的GPIO寄存器和F1系列稍有不同,在这里介绍一下各个寄存器和专业名词。
PP:推挽输出  PP+PU:带上拉的推挽输出  PP+PD:带下拉的推挽输出 
OD:开漏输出  OD+PU:带上拉的开漏输出  OD+PD:带下拉的开漏输出
Floating :浮空输入   Analog:模拟输入 
 
 
MODER寄存器:设置GPIO模式寄存器,00输入模式,01输出模式,10复用模式,11模拟输入模式。
                    
 
 
OTYPER寄存器:设置GPIO类型寄存器,仅在做输出时使用,0是推挽输出,1是开漏输出。
 
	    
OSPEEDR寄存器:设置GPIO速度寄存器,有四种速度。
        
PUPDR寄存器:设置上拉下拉寄存器
	   
 
 
  

设置步骤:

1.     使能GPIO时钟

2.     设置相应的IO口为输入或输出(MODER寄存器)

3.     设置输入\输出的类型(OTYPER寄存器

4.     设置输出的速度(OSPEEDR寄存器

5.     如果输出速度>=50M,开启补偿单元

6.     设置上拉下拉寄存器(PUPDR寄存器

7.     通过复位置位寄存器和输入输出数据寄存器进行操作。

 

 

 

/*-----------------------------------------------------------------------------------------------------------------------------
					实 验 一: 跑 马 灯           
							
					作 者   :  冰 点
							
					日 期   :2014.2.20
							
					软 件 平 台 : M D K 5.05
------------------------------------------------------------------------------------------------------------------------------*/
#include                   
uint32_t Delaytime;
void Delay(int time)
{
	  Delaytime=time;
		while(Delaytime!=0x00);
			
}
void LED_init(void)
{
		RCC->AHB1ENR|=(1<<2);//开GPIOC时钟
	  GPIOC->MODER&=0xfffffcfc;
	  GPIOC->MODER|=0x00000101;//MODER寄存器设置IO作为输入还是输出 
	  GPIOC->OTYPER&=~((1<<0)|(1<<4));
	  GPIOC->OSPEEDR&=0xfffffcfc;
	  GPIOC->OSPEEDR|=0x00000303;//速度最快
	  GPIOC->PUPDR&=0xfffffcfc;//无上拉下拉
	  SYSCFG->CMPCR = 0x00000001;    //使用IO补偿单元 F2 F4新增功能,速度超过50MHZ时使用
}

	    

void SysTick_Handler(void)
{
		if(Delaytime!=0x00)
		Delaytime--;
}
int main(void)
{
	  SystemInit();
	  SysTick_Config(SystemCoreClock/1000);      // 每1ms中断1次  SystemCoreClock=168MHZ 也就是1S 168M次  	  	  	 
           LED_init();                                                           // 中断时间 =168M/1000/168M=0.001S=1ms		  
           while(1)
		{
			
			GPIOC->ODR^=((1<<0)|(1<<4));
			Delay(1000);
		}	
}

你可能感兴趣的:(STM32F4)