05、W601电亮led
一、电亮led的原理
led就是一个发光二极管,具有单向导电性。在二极管的正极添加电压就可以电亮,反之在负极添加电压则点不亮(前提是不超过反向击穿电压)。
二、看原理图,找到led的有关引脚号
由原理图可知,W601有三个led,LED_R,LED_G,LED_B,分别对应PA_13,PA_14,PA_15。
再看原理图,W601的引脚是接led的负极,led的正极接的是3.3v,所以我们只需要将PA_13,PA_14,PA_15引脚全部设置成低电平就可以电亮led了。
三、配置相关引脚
找到有关GPIO的文件,找到有关api:
/**
* @brief This function is used to config gpio function
*
* @param[in] gpio_pin gpio pin num
* @param[in] dir gpio direction
* @param[in] attr gpio attribute
*
* @return None
*
* @note None
*/
void tls_gpio_cfg(enum tls_io_name gpio_pin, enum tls_gpio_dir dir, enum tls_gpio_attr attr);//函数文档写的很清楚,这是配置引脚的函数
下面我们写一个初始化led的函数
/**
* @brief: led 初始化,默认是不点亮led
* @param: NULL
* @return: NULL
*/
void led_init(void)
{
/**
* PA_13 LED_R
* PA_14 LED_G
* PA_15 LED_B
*/
tls_gpio_cfg(WM_IO_PA_13, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_PULLHIGH);
tls_gpio_cfg(WM_IO_PA_14, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_PULLHIGH);
tls_gpio_cfg(WM_IO_PA_15, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_PULLHIGH);
}
下面我们写一个测试函数,因为led的引脚已经配置好了,我们只需要改变这些引脚的高低电平就可以电亮和熄灭led了。
/**
* @brief: 测试led
* @param: NULL
* @return: NULL
*/
void led_test(void)
{
tls_gpio_write(WM_IO_PA_13, 0);//open LED_R
delay_ms(500);
tls_gpio_write(WM_IO_PA_13, 1);//close LED_R
tls_gpio_write(WM_IO_PA_14, 0);//open LED_G
delay_ms(500);
tls_gpio_write(WM_IO_PA_14, 1);//close LED_G
tls_gpio_write(WM_IO_PA_15, 0);//open LED_B
delay_ms(500);
tls_gpio_write(WM_IO_PA_15, 1);//close LED_B
}
编译,下载。测试成功