#include "LIGHT/Light.h"
#include "DELAY/Delay.h"
#include "TIMx/TIMx.h"
u16 RGB_buffer[69] = {0};
/**
* 功能:初始灯光
* 参数:
* brightness:初始化亮度 10-100
* colortemp:初始化色温 0-100
* red:RGB红色比例 0-255
* green:RGB绿色比例 0-255
* blue:RGB蓝色比例 0-255
* 返回值:None
*/
void initLight(u8 brightness,u8 colortemp,u8 red,u8 green,u8 blue)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //禁止JTAG保留SWD
GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2, ENABLE); //设置JTAG为定时器2部分映射,只使用SWD模式
/*设置冷光灯*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/*设置暖光灯*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/*设置RGB*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
setLight(brightness,colortemp);
setRGB(red,green,blue);
}
/**
* 功能:设置灯光亮度和色温
* 参数:
* brightness:亮度 10-100
* colortemp:色温 0-100
* 返回值:None
*/
void setLight(u8 brightness,u8 colortemp)
{
/**
* 无论是亮度还是色温,最终都体现在LED的亮度上
* LED最终的亮度计算公式为:满占空比(重装载值) * 亮度百分比 * 色温百分比
* 并且要保证冷光和暖光的色温比值之和为100%
* */
TIM_SetCompare1(TIM2,getPeriod(TIM2)*brightness/100*colortemp/100); //设置冷光 对应PA15 TIM2_CH1
TIM_SetCompare2(TIM2,getPeriod(TIM2)*brightness/100*(100-colortemp)/100); //设置暖光 对应PB3 TIM2_CH2
}
/**
* 功能:设置RGB颜色
* 参数:
* red:RGB红色比例 0-255
* green:RGB绿色比例 0-255
* blue:RGB蓝色比例 0-255
* 返回值:None
*/
void setRGB(u8 red,u8 green,u8 blue)
{
u8 i = 0;
u32 rgb_value = green<<16 | red<<8 | blue;
while(DMA_GetFlagStatus(DMA1_FLAG_TC1)==RESET);
DMA_ClearFlag(DMA1_FLAG_TC1);
DMA_Cmd(DMA1_Channel1, DISABLE);
DMA_SetCurrDataCounter(DMA1_Channel1,sizeof(RGB_buffer));
for(i=0;i<24;++i)
{
if((rgb_value< {
RGB_buffer[i+45] = 61; //68%占空比
}else
{
RGB_buffer[i+45] = 28; //32%占空比
}
}
DMA_Cmd(DMA1_Channel1, ENABLE);
}
上一篇:STM32F103超极精简的OS
下一篇:STM32F103ZET6任意频率正弦波+三角波工程源码
推荐阅读最新更新时间:2024-11-08 18:37
设计资源 培训 开发板 精华推荐
- ESP32_GRBL_V4.0_PUB
- 将 12V 转换为 1.2V(负载电流大于 6A)的三种不同降压转换器电路参考设计
- Sg1526 驱动 N 沟道功率 MOSFET 的典型应用
- 【涂鸦智能】温湿度传感器
- LTC3851AIMSE-1 高效同步降压转换器的典型应用电路
- EVAL-AD7472CB,用于 AD7472、12 位、1.5 MSPS ADC 的仪表评估板
- DER-708 - 9.9 W 宽范围输入、双输出、隔离反激式转换器,用于使用 LinkSwitch-XT2 900 V 的电表中的抗磁干扰
- ADA4000-2ARZ运算放大器缓冲网络配置的典型应用电路
- 使用 Microchip Technology 的 MIC2920A-4.8WS 的参考设计
- 使用 Richtek Technology Corporation 的 RT8278 的参考设计