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;

转载于:https://www.cnblogs.com/wenshinlee/p/8845857.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值