#include "mw_led.h" #include /* 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(); } }