【FireBLE试用体验】外设篇(1)指示灯LED

  • gjianw217
  • LV4工程师
  • |      2015-10-04 21:47:28
  • 浏览量 762
  • 回复:0

    本篇主要分为4部分:硬件分析、软件编程、演示效果和附录(GPIO接口)

1 硬件分析

    在【FireBLE试用体验】环境篇(2)认识硬件开发环境 曾分析过FireBLE原理图,具体LED电路如下图所示,板上设计了3个LED灯,分别对应QN9021P2_7、P0_6和P0_7,即可以通过控制对应引脚输出高低电平来控制LED的状态。

    但需要说明2点:

(1)SWD接口的管脚线与LED3/LED4是复用,而系统默认是将P0_6和P0_7设置为SWD工作模式,所以如果使用该两脚控制LED,需要重新将其设置为GPIO工作模式,具体引脚功能如下表所示:

P0_7

0:SWD

1:Led

0: SWCLK (I):Default to SWCLK (input with pull-up)

1: P0_7 (I/O):GPIO

2: AIN3 (AI):ADC input channel 3

3: ACMP1- (AI):Analog comparator 1 negative input

P0_6

0:SWD

1:Led

0: SWDIO (I/O):Default to SWDIO (input with pull-up)

1: P0_6 (I/O):GPIO

2: AIN2 (AI):ADC input channel 2

3: ACMP1+ (AI):Analog comparator 1 positive input

(2)其实红色LED对应P0_7,绿色对应P0_6,蓝色对应P2_7

2 软件编程

(1)LED初始化

void LED_Init(void)

{

	gpio_clock_on();                         //启动GPIO时钟

	gpio_pull_set(GPIO_P06,GPIO_PULL_UP);    //由于引脚低电平有效,故设置为上拉械

	gpio_pull_set(GPIO_P07,GPIO_PULL_UP);

	gpio_pull_set(GPIO_P27,GPIO_PULL_UP);;

	

	gpio_set_direction_field(GPIO_P27, (uint32_t)GPIO_OUTPUT); //设置为输出

	gpio_set_direction_field(GPIO_P07, (uint32_t)GPIO_OUTPUT);

	gpio_set_direction_field(GPIO_P06, (uint32_t)GPIO_OUTPUT);

    

    gpio_write_pin_field(GPIO_P06,(uint32_t)GPIO_HIGH);//默认为高电平,即LED处于灭状态

	gpio_write_pin_field(GPIO_P27,(uint32_t)GPIO_HIGH);

    gpio_write_pin_field(GPIO_P07,(uint32_t)GPIO_HIGH);

}
(2)控制LED的状态



void LED_Red(LedStatus status)

{

	if(ON==status)                               //如果设置LED为点亮状态

	{

		gpio_write_pin_field(GPIO_P07,GPIO_LOW);  //则输出低电平

	}

	else

	{

		gpio_write_pin_field(GPIO_P07,(uint32_t)GPIO_HIGH);

	}

	

}

void LED_Green(LedStatus status)

{

	if(ON==status)

	{

		gpio_write_pin_field(GPIO_P06,GPIO_LOW);

	}

	else

	{

		gpio_write_pin_field(GPIO_P06,(uint32_t)GPIO_HIGH);

	}

}

void LED_Blue(LedStatus status)

{

	if(ON==status)

	{

		gpio_write_pin_field(GPIO_P27,GPIO_LOW);

	}

	else

	{

		gpio_write_pin_field(GPIO_P27,(uint32_t)GPIO_HIGH);

	}	



}


(3)测试LED,该函数直接由main函数调用

void TestLed(void)

{

	SystemInit();//系统初始化

    GPIOReConfig();//重新配置P0_6和P0_7为GPIO工作模式

    LED_Init();    //LED初始化

    

    while(1)       //每隔5ms,LED依次按照红、绿、蓝的顺序处于点亮状态

    {

		

		LED_Red(ON);

		LED_Green(OFF);

		LED_Blue(OFF);

		delay(500000);

		

		LED_Red(OFF);

		LED_Green(ON);

		LED_Blue(OFF);

		delay(500000);



		LED_Red(OFF);

		LED_Green(OFF);

		LED_Blue(ON);

		delay(500000);		



    }

}
3 演示效果

附录:GPIO驱动接口

extern void gpio_init(gpio_callback_t p_callback);

extern enum gpio_level gpio_read_pin(enum gpio_pin pin);

extern void gpio_write_pin(enum gpio_pin pin, enum gpio_level level);

extern void gpio_set_direction(enum gpio_pin pin, enum gpio_direction direction);



extern uint32_t gpio_read_pin_field(uint32_t pin_mask);

extern void gpio_write_pin_field(uint32_t pin_mask, uint32_t level_value);

extern void gpio_set_direction_field(uint32_t pin_mask, uint32_t direction_value);



extern void gpio_toggle_pin(enum gpio_pin pin);

extern void gpio_set_interrupt(enum gpio_pin pin, enum gpio_int_trig_type trig_type);

extern void gpio_enable_interrupt(enum gpio_pin pin);

extern void gpio_disable_interrupt(enum gpio_pin pin);

extern void gpio_pull_set(enum gpio_pin pin, enum gpio_pull pull_state);

extern void gpio_wakeup_config(enum gpio_pin pin, enum gpio_wakeup_type type);

extern bool gpio_sleep_allowed(void);


【FireBLE试用体验】试用报告汇总

  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:0
x
收藏成功!点击 我的收藏 查看收藏的全部帖子