stm32f407之GPIO(操作寄存器)

四、GPIO




       stm32f407VG這款單片機上共有PA-PE共5×16共80個複用IO口,每個通用I / O端口有4個32位配置寄存器(GPIOx_MODERGPIOx_OTYPER GPIOx_OSPEEDR GPIOx_PUPDR),兩個32位數據寄存器(GPIOx_IDR和GPIOx_ODR),一個32位的置位/復位寄存器(GPIOx_BSRR),32位鎖定寄存器(GPIOx_LCKR)和兩個32位的備用功能選擇寄存器(GPIOx_AFRHGPIOx_AFRL)。

 

 

 

設置步驟:

1.     使能相關時鐘

2.     設置相應的IO口爲輸入或輸出

3.     設置輸入\輸出的類型

4.     設置輸出的速度(如果設置爲輸入,此步跳過)

5.     如果輸出速度>=50M,開啓補償單元

6.     設置上拉下拉寄存器

7.     通過復位置位寄存器和輸入輸出數據寄存器進行操作。



程序:

/************************************
    標題:操作GPIO的練習
    軟件平臺:IAR for ARM6.21
    硬件平臺:stm32f4-discovery
    主頻:168M
    
    author:小船
    data:2012-01-16
*************************************/

#include <stm32f4xx.h> 

uint32_t Gb_TimingDelay;

void Delay(uint32_t nTime);

void main ()
{   
  SysTick_Config(SystemCoreClock / 1000);	 //設置systemtick一毫秒中斷
  
  RCC->AHB1ENR |= 0x00000008; 	//使能GPIOD時鐘
  RCC->APB2ENR |= (1<<14);  	//使能syscfg時鐘
  
  GPIOD->MODER &= 0x00FFFFFF;	 //設置PD12,13,14,15輸出
  GPIOD->MODER |= 0x55000000; 
  
  GPIOD->OTYPER &= 0xFFFF0FFF; 	//設置PD12,13,14,15推輓輸出
  
  GPIOD->OSPEEDR &= 0x00FFFFFF; 	//PD12,13,14,15 速度100m
  GPIOD->OSPEEDR |= 0xff000000;
  
  SYSCFG->CMPCR = 0x00000001; 	//使用IO補償單元,
//當GPIO速度超過50M的時候要考慮使用此設置
  
  GPIOD->PUPDR &= 0x00FFFFFF;  	//PD12,13,14,15 無上拉無下拉
  
  GPIOD->BSRRH = 0xf000; 	 //reset register GPIOx_BSRRH, write only
                          	//set register GPIOx_BSRRL, write only
  
  while(1)
  {
      GPIOD->BSRRH = 0xf000;
      GPIOD->BSRRL = 0x1000; 
      Delay(500);
      
      GPIOD->BSRRH = 0xf000;
      GPIOD->BSRRL = 0x1000<<1;
      Delay(500);
      
      GPIOD->BSRRH = 0xf000;
      GPIOD->BSRRL = 0x1000<<2;
      Delay(500);
      
      GPIOD->BSRRH = 0xf000;
      GPIOD->BSRRL = 0x1000<<3;
      Delay(500);
  }
}

void Delay(uint32_t nTime)
{ 
  Gb_TimingDelay = nTime;

  while(Gb_TimingDelay != 0);
}


void SysTick_Handler(void)
{
  if (Gb_TimingDelay != 0x00)
  { 
    Gb_TimingDelay--;
  }
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章