標題:
基于STM32的pwmRGB調色程序
[打印本頁]
作者:
@yy
時間:
2019-10-14 19:38
標題:
基于STM32的pwmRGB調色程序
#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)
{
/**
* 無論是亮度還是色溫,最終都體現(xiàn)在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<<i)&0x800000) //高位先發(fā),此時高位為1時
{
RGB_buffer[i+45] = 61; //68%占空比
}else
{
RGB_buffer[i+45] = 28; //32%占空比
}
}
DMA_Cmd(DMA1_Channel1, ENABLE);
}
復制代碼
PWM+DMA實現(xiàn)RGB調色.7z
2019-10-15 02:33 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
183.52 KB, 下載次數: 59, 下載積分: 黑幣 -5
作者:
aaaaaa。
時間:
2019-10-16 15:10
樓主,有沒有原理圖
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1