113 lines
2.8 KiB
C
Raw Normal View History

#include "mw_led.h"
#include <stdio.h>
/* led pin define */
// LED0 PA8
#define IO_LED0_PORT (GPIOC)
#define IO_LED0_RCC_PERIPH (RCC_APB2Periph_GPIOC)
#define IO_LED0_PIN (GPIO_Pin_13)
// LED0 PD2
#define IO_LED1_PORT (GPIOC)
#define IO_LED1_RCC_PERIPH (RCC_APB2Periph_GPIOC)
#define IO_LED1_PIN (GPIO_Pin_14)
// led middleware instantiation
mw_led_t led_drv_buf[led_num];
// {
// [Led0] = {mw_led0_init, mw_led0_on, mw_led0_off},
// [Led1] = {mw_led1_init, mw_led1_on, mw_led1_off}
// };
mw_led_t mw_get_led_obj(led_type_enum e_led_type)
{
if(e_led_type < led_num)
{
return led_drv_buf[e_led_type];
}
else
{
while(1);
// return NULL;
}
}
/* led 0 start */
void mw_led0_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(IO_LED0_RCC_PERIPH, ENABLE); //使能 PA 端口时钟
GPIO_InitStructure.GPIO_Pin = IO_LED0_PIN; //LED0-->PA.8 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO 口速度为 50MHz
GPIO_Init(IO_LED0_PORT, &GPIO_InitStructure); //初始化 GPIOA.8
// 初始化:高
GPIO_SetBits(IO_LED0_PORT, IO_LED0_PIN); //PA.8 输出高
}
void mw_led0_on(void)
{
GPIO_SetBits(IO_LED0_PORT, IO_LED0_PIN);
}
void mw_led0_off(void)
{
GPIO_ResetBits(IO_LED0_PORT, IO_LED0_PIN);
}
/* led 0 end */
/* led 1 start */
void mw_led1_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(IO_LED1_RCC_PERIPH, ENABLE); //使能 PD 端口时钟
GPIO_InitStructure.GPIO_Pin = IO_LED1_PIN; //LED0-->PD.2 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO 口速度为 50MHz
GPIO_Init(IO_LED1_PORT, &GPIO_InitStructure); //初始化 GPIOD.2
// 初始化:高
GPIO_SetBits(IO_LED1_PORT, IO_LED1_PIN); //PD.2 输出高
}
void mw_led1_on(void)
{
GPIO_SetBits(IO_LED1_PORT, IO_LED1_PIN);
}
void mw_led1_off(void)
{
GPIO_ResetBits(IO_LED1_PORT, IO_LED1_PIN);
}
/* led 1 end */
void mw_led_drv_init(void)
{
led_type_enum e_val;
/* led0 installation */
led_drv_buf[Led0].led_drv = Led0;
led_drv_buf[Led0].init = mw_led0_init;
led_drv_buf[Led0].on = mw_led0_on;
led_drv_buf[Led0].off = mw_led0_off;
/* led1 installation */
led_drv_buf[Led1].led_drv = Led1;
led_drv_buf[Led1].init = mw_led1_init;
led_drv_buf[Led1].on = mw_led1_on;
led_drv_buf[Led1].off = mw_led1_off;
/* init all led peripherals */
for(e_val = Led0; e_val < led_num; e_val++)
{
led_drv_buf[e_val].init();
}
}