GPIO 輸出—使用固件庫點亮 LED


 

編程要點

  1. 使能 GPIO 端口時鍾;
  2. 初始化 GPIO 目標引腳為推挽輸出模式;
  3. 編寫簡單測試程序,控制 GPIO 引腳輸出高、低電平。

LED的電路圖

過程:

          1.拷貝一個庫函數編程模板,重新命名。

          2.user新建led文件夾,目錄下新建bsp_led.h bsp_led.c

          3.keil打開項目,user添加bsp_led.c,點擊魔術棒,c/c++選項卡的include path添加led文件夾。

          4. 下面我將給出各個文件的內容:

            main.c文件中

#include "stm32f10x.h"   // 相當於51單片機中的  #include <reg51.h>
#include "bsp_led.h"   //調用自己寫的功能函數的頭文件即可。

void Delay( uint32_t count){
  for( ;count!=0;count--);

}


int main(void)
{
	// 來到這里的時候,系統的時鍾已經被配置成72M。
	LED_GPIO_Config();
	while(1){
        /*         LED長亮           */
        //GPIO_SetBits(LED_GPIO_PORT, GPIO_Pin_2);
        /*        下面為閃爍點亮LED    */
	GPIO_SetBits(LED_GPIO_PORT, GPIO_Pin_2);
	Delay(0xfffff);
        GPIO_ResetBits(LED_GPIO_PORT, GPIO_Pin_2);
	Delay(0xfffff);
   }
}

         bsp_led.c中

/*  在bsp_led.c中只需要引入它自己的頭文件即可,因為在它頭文件中已經調用了 stm32f10x.h,所以這里可以不重復調用   */

#include "bsp_led.h" void LED_GPIO_Config(){ GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(LED_GPIOC_CLOCK, ENABLE); GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Pin=LED_GPIO_PIN; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct); }

       bsp_led.h中

#ifndef BSP_LED_H_
#define BSP_LED_H_

#include "stm32f10x.h"

#define LED_GPIO_PIN     GPIO_Pin_2
#define LED_GPIO_PORT    GPIOC
#define LED_GPIOC_CLOCK  RCC_APB2Periph_GPIOC

void LED_GPIO_Config(void);

#endif

關於LED點亮函數和延遲函數的宏定義寫法

  延遲函數的宏定義

#define SOFT_DELAY    Delay(0x0FFFFF);
/*        在main函數中調用 SOFT_DELAY即可;

點亮LED燈的函數

      第一種:

  /* 使用標准的固件庫控制 IO*/
 
         

#define ON 0

#define OFF 1

 
 #define LED(a) if (a) \
           GPIO_SetBits(LED_GPIO_PORT,LED_GPIO_PIN);\
           else \
           GPIO_ResetBits(LED_GPIO_PORT,LED_GPIO_PIN)
 
         
/*        在main中調用即可,例如 LED(ON);       */

    第二種 

/* 直接操作寄存器的方法控制 IO */
  #define digitalHi(p,i) {p->BSRR=i;} //輸出為高電平
  #define digitalLo(p,i) {p->BRR=i;} //輸出低電平
  #define digitalToggle(p,i) {p->ODR ^=i;} //輸出反轉狀態

 /* 定義控制 IO 的宏 */
  #define LED_TOGGLE digitalToggle(LED_GPIO_PORT,LED_GPIO_PIN)
  #define LED_OFF digitalHi(LED_GPIO_PORT,LED_GPIO_PIN)
  #define LED_ON digitalLo(LED_GPIO_PORT,LED_GPIO_PIN)


/*在main中調用即可,例如 LED_ON;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM