基于STM32的pwmRGB调色程序

发布者:czm721002最新更新时间:2019-10-15 来源: eefocus关键字:STM32  pwm  RGB调色 手机看文章 扫描二维码
随时随地手机看文章

#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);

}


关键字:STM32  pwm  RGB调色 引用地址:基于STM32的pwmRGB调色程序

上一篇:STM32F103超极精简的OS
下一篇:STM32F103ZET6任意频率正弦波+三角波工程源码

推荐阅读最新更新时间:2024-11-08 18:37

stm32中断分组学习
STM32的中断优先级包括:抢占式优先级和响应优先级 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之 后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。 STM32 可以支持的 68 个外部中断通道,已经固定的分配给相应的外部设备。每个中断通道都具备自己的
[单片机]
STM32 SysTick 精准延时 简单分析
在设计软件的时候,有的对时序要求比较严格,但是简单的延时函数又不能准确延时---STM32中有一个系统滴答时钟是不错的配置--- ----第一部分是---向滴答时钟寄存器写初值,也就是要根据系统频率来递减----然后为0 则产生中断 void SysTick_Init(uint32_t a) //a-us { /* SystemFrequency / 1000 1ms中断一次 * SystemFrequency / 100000 10us中断一次 * SystemFrequency / 1000000 1us中断一次 */ // if (SysTick_Config(SystemCoreClock / 100
[单片机]
STM32中GPIO的8中模式详解
一、推挽输出:可以输出高、低电平,连接数字器件;推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源决定。 推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。 二、开漏输出:输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行。适合于做电流型的驱动,其吸收电流的能力相对强(一般20mA以内)。开漏形式的电路有以下几个特点:
[单片机]
STM32 CRC32与对应的软件CRC32
简单实现STM32 CRC32使用 使用前记得使能STM32 CRC时钟 //STM32硬件CRC32 byte数据计算,将数据移到最高位,低位补上FF u32 stm32_crc32_byte(u8 *pBuff, u32 len) { u32 i; u8 buff ; u32 *p32 = (u32 *)buff; CRC- CR = 1; //复位CRC寄存器 buff = buff = buff = buff = 0XFF; for(i = 0;i len;i ++) { buff = pBuff ; CRC- DR
[单片机]
STM32 USATR固件库中定义的几个中断标志的含义
在stm32f10x_usart.h中有以下宏定义: #define USART_IT_PE ((uint16_t)0x0028) #define USART_IT_TXE ((uint16_t)0x0727) #define USART_IT_TC ((uint16_t)0x0626) #define USART_IT_RXNE ((uint16_t)0x0525) #define USART_IT_IDLE ((uint16_t)0x0424) #define USART_IT_LBD ((uint16
[单片机]
意法半导体发布STM32WBA52无线微控制器 具有SESIP3 安全性,为物联网量身定制
意法半导体发布STM32WBA52无线微控制器 具有SESIP3 安全性,为物联网量身定制 STM32WBA新系列MCU的首款产品,为设计人员带来 Bluetooth® Low Energy 5.3应用所需的性能、能效和安全性 2023年3月17日,中国—— 意法半导体的STM32WBA52微控制器(MCU)整合 Bluetooth® LE 5.3 连接技术、超低功耗模式和先进安全性,以及 STM32 开发者熟悉的多种外设 。新产品的上市为开发者在下一代物联网设备中增加无线连接,降低功耗,加强网络保护,提升边缘算力提供了便利。STM32WBA 无线 MCU 平台包含意法半导体的前沿专利技术。目标应用包括智能家居、工
[单片机]
意法半导体发布STM32WBA52无线微控制器  具有SESIP3 安全性,为物联网量身定制
STM32定时器所支持的三种计数模式及计数过程
STM32常规定时器主要包括基本定时器、通用定时器和高级定时器。不论哪一类定时器,都有个共同的计数定时单元,我们把它称之为时基单元。 该单元主要由三部分组成: 分频模块、计数模块、自动重装载模块‍。 分频模块用来对外来的计数时钟进行分频,这里有个分频计数器,通过它来实现对时钟的分频功能。与之对应的有个分频器寄存器TIMx_PSC,用来配置和存放分频比、分频系数。 计数模块用来对来自分频器输出的计数脉冲进行计数。相应的这里有个寄存器—计数器寄存器TIMx_CNT,为了把该计数器跟别的计数器区别开来,不妨称它为核心计数器。 自动重装载模块用来配合计数器溢出,当计数器溢出时为之赋予初始计数值的功能单元。与之相应的有个自动重装
[单片机]
<font color='red'>STM32</font>定时器所支持的三种计数模式及计数过程
stm32 TIM定时器[操作寄存器+库函数]
stm32配备了2个高级定时器TIM1和TIM8,4个通用定时器 TIM2,TIM3,TIM4和TIM5,还有两个基本定时器TIM6和TIM7。 高级定时器常用于电机控制,因为其加入了死区控制,紧急制动,定时器同步等高级特性。基本定时器可以为数模转化器提供准确的时间基准。 stm32的通用定时器由一个通过可编程预分频器驱动的16位自动装载计数器构成。通用定时器可以用于测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等。 通用计时器的使用,需要先配置一个时基单元,就是设定一个基准时间,确定计数一次耗去的时间,可以设定在几个微妙到几个毫秒之间。 通用定时器的都有4个独立通道(TIMx_CH1~4),这
[单片机]
<font color='red'>stm32</font> TIM定时器[操作寄存器+库函数]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved