Files
Hero-C-Board-Legacy/底盘/底盘-old/底盘/Hardware/LED.c

256 lines
6.3 KiB
C

#include "stm32f4xx.h" // Device header
#include "stm32f4xx_conf.h"
/*
*函数简介:三色单色LED初始化
*参数说明:无
*返回类型:无
*备注:蓝色-PH10,绿色-PH11,红色-PH12
*/
void LED_Init(void)
{
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH,ENABLE);//开启时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//默认上拉
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_Init(GPIOH,&GPIO_InitStructure);
GPIO_ResetBits(GPIOH,GPIO_Pin_10);
GPIO_ResetBits(GPIOH,GPIO_Pin_11);
GPIO_ResetBits(GPIOH,GPIO_Pin_12);//默认三灯均熄灭
}
/*
*函数简介:蓝色单色LED初始化
*参数说明:无
*返回类型:无
*备注:引脚PH10
*/
void LED_BInit(void)
{
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH,ENABLE);//开启时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//默认上拉
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_Init(GPIOH,&GPIO_InitStructure);
GPIO_ResetBits(GPIOH,GPIO_Pin_10);//默认熄灭
}
/*
*函数简介:蓝灯点亮
*参数说明:无
*返回类型:无
*备注:无
*/
void LED_BON(void)
{
GPIO_SetBits(GPIOH,GPIO_Pin_10);
}
/*
*函数简介:蓝灯熄灭
*参数说明:无
*返回类型:无
*备注:无
*/
void LED_BOFF(void)
{
GPIO_ResetBits(GPIOH,GPIO_Pin_10);
}
/*
*函数简介:蓝灯亮灭反转
*参数说明:无
*返回类型:无
*备注:无
*/
void LED_BTurn(void)
{
if(GPIO_ReadInputDataBit(GPIOH,GPIO_Pin_10)==0)//当前蓝灯灭
GPIO_SetBits(GPIOH,GPIO_Pin_10);
else//当前蓝灯亮
GPIO_ResetBits(GPIOH,GPIO_Pin_10);
}
/*
*函数简介:绿色单色LED初始化
*参数说明:无
*返回类型:无
*备注:引脚PH11
*/
void LED_GInit(void)
{
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH,ENABLE);//开启时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//默认上拉
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_Init(GPIOH,&GPIO_InitStructure);
GPIO_ResetBits(GPIOH,GPIO_Pin_11);//默认熄灭
}
/*
*函数简介:绿灯点亮
*参数说明:无
*返回类型:无
*备注:无
*/
void LED_GON(void)
{
GPIO_SetBits(GPIOH,GPIO_Pin_11);
}
/*
*函数简介:绿灯熄灭
*参数说明:无
*返回类型:无
*备注:无
*/
void LED_GOFF(void)
{
GPIO_ResetBits(GPIOH,GPIO_Pin_11);
}
/*
*函数简介:绿灯亮灭反转
*参数说明:无
*返回类型:无
*备注:无
*/
void LED_GTurn(void)
{
if(GPIO_ReadInputDataBit(GPIOH,GPIO_Pin_11)==0)//当前绿灯灭
GPIO_SetBits(GPIOH,GPIO_Pin_11);
else//当前绿灯亮
GPIO_ResetBits(GPIOH,GPIO_Pin_11);
}
/*
*函数简介:红色单色LED初始化
*参数说明:无
*返回类型:无
*备注:无
*/
void LED_RInit(void)
{
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH,ENABLE);//开启时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//默认上拉
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_Init(GPIOH,&GPIO_InitStructure);
GPIO_ResetBits(GPIOH,GPIO_Pin_12);//默认熄灭
}
/*
*函数简介:红灯点亮
*参数说明:无
*返回类型:无
*备注:无
*/
void LED_RON(void)
{
GPIO_SetBits(GPIOH,GPIO_Pin_12);
}
/*
*函数简介:红灯熄灭
*参数说明:无
*返回类型:无
*备注:无
*/
void LED_ROFF(void)
{
GPIO_ResetBits(GPIOH,GPIO_Pin_12);
}
/*
*函数简介:红灯亮灭反转
*参数说明:无
*返回类型:无
*备注:无
*/
void LED_RTurn(void)
{
if(GPIO_ReadInputDataBit(GPIOH,GPIO_Pin_12)==0)//当前红灯灭
GPIO_SetBits(GPIOH,GPIO_Pin_12);
else//当前红灯亮
GPIO_ResetBits(GPIOH,GPIO_Pin_12);
}
/*
*函数简介:RGB混色LED初始化
*参数说明:无
*返回类型:无
*备注:蓝色-PH10,绿色-PH11,红色-PH12
*/
void LED_MaxInit(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH,ENABLE);//开启时钟
TIM_InternalClockConfig(TIM5);//选择时基单元TIM5
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//复用推挽
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//默认上拉
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_Init(GPIOH,&GPIO_InitStructure);//配置TIM5的CH1-3
GPIO_PinAFConfig(GPIOH,GPIO_PinSource10,GPIO_AF_TIM5);
GPIO_PinAFConfig(GPIOH,GPIO_PinSource11,GPIO_AF_TIM5);
GPIO_PinAFConfig(GPIOH,GPIO_PinSource12,GPIO_AF_TIM5);//开启PH10-12的TIM5复用模式
TIM_TimeBaseInitTypeDef TIM_InitStructure;
TIM_InitStructure.TIM_ClockDivision=TIM_CKD_DIV1;//配置时钟分频为1分频
TIM_InitStructure.TIM_CounterMode=TIM_CounterMode_Up;//配置计数器模式为向上计数
TIM_InitStructure.TIM_Period=1000-1;//ARR,PWM为千分位
TIM_InitStructure.TIM_Prescaler=84-1;//PSC,默认1000Hz
TIM_InitStructure.TIM_RepetitionCounter=0;//配置重复计数单元的置为0
TIM_TimeBaseInit(TIM5,&TIM_InitStructure);
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_OCStructInit(&TIM_OCInitStructure);
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//配置输出比较模式
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//配置输出比较的极性
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//输出使能
TIM_OCInitStructure.TIM_Pulse=0;//配置输出比较寄存器CCR的值
TIM_OC1Init(TIM5,&TIM_OCInitStructure);
TIM_OC2Init(TIM5,&TIM_OCInitStructure);
TIM_OC3Init(TIM5,&TIM_OCInitStructure);
TIM_Cmd(TIM5,ENABLE);//启动定时器
}
/*
*函数简介:设置混色LED的RGB
*参数说明:三个8位整型,表示RGB的三个值
*返回类型:无
*备注:无
*/
void LED_SetColor(uint8_t R,uint8_t G,uint8_t B)
{
TIM_SetCompare1(TIM5,B*1000/255);
TIM_SetCompare2(TIM5,G*1000/255);
TIM_SetCompare3(TIM5,R*1000/255);
}