标题:
TIM—全彩LED灯控制 简单STM32实验程序
[打印本页]
作者:
lier
时间:
2019-4-10 14:12
标题:
TIM—全彩LED灯控制 简单STM32实验程序
制作出来的实物图如下:
02.jpg
(123.29 KB, 下载次数: 62)
下载附件
状态 演示
2019-4-10 14:11 上传
01.jpg
(129.82 KB, 下载次数: 51)
下载附件
代码截图
2019-4-10 14:11 上传
单片机源程序如下:
#include "./color_led/bsp_color_led.h"
/**
* @brief 配置COLOR_TIMx复用输出PWM时用到的I/O
* @param 无
* @retval 无
*/
static void COLOR_TIMx_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* GPIO clock enable */
RCC_APB2PeriphClockCmd(COLOR_TIM_GPIO_CLK, ENABLE);
/*IO设置*/
COLOR_GPIO_REMAP_FUN();
/* 配置LED灯用到的引脚 */
//红
GPIO_InitStructure.GPIO_Pin = COLOR_RED_TIM_LED_PIN ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(COLOR_RED_TIM_LED_PORT, &GPIO_InitStructure);
//绿
GPIO_InitStructure.GPIO_Pin = COLOR_GREEN_TIM_LED_PIN ;
GPIO_Init(COLOR_GREEN_TIM_LED_PORT, &GPIO_InitStructure);
//蓝
GPIO_InitStructure.GPIO_Pin = COLOR_BLUE_TIM_LED_PIN ;
GPIO_Init(COLOR_BLUE_TIM_LED_PORT, &GPIO_InitStructure);
}
/**
* @brief 配置COLOR_TIMx输出的PWM信号的模式,如周期、极性
* @param 无
* @retval 无
*/
static void COLOR_TIMx_Mode_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
/* 设置TIM CLK 时钟 */
COLOR_TIM_APBxClock_FUN(COLOR_TIM_CLK, ENABLE); //使能COLOR_TIMx时钟
/* 基本定时器配置 */
TIM_TimeBaseStructure.TIM_Period = 255; //当定时器从0计数到255,即为256次,为一个定时周期
TIM_TimeBaseStructure.TIM_Prescaler = 1999; //设置预分频
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ; //设置时钟分频系数:不分频(这里用不到)
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInit(COLOR_TIMx, &TIM_TimeBaseStructure);
/* PWM模式配置 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //配置为PWM模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //使能输出
TIM_OCInitStructure.TIM_Pulse = 0; //设置初始PWM脉冲宽度为0
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //当定时器计数值小于CCR_Val时为低电平
//使能通道和预装载
COLOR_RED_TIM_OCxInit(COLOR_TIMx, &TIM_OCInitStructure);
COLOR_RED_TIM_OCxPreloadConfig(COLOR_TIMx, TIM_OCPreload_Enable);
//使能通道和预装载
COLOR_GREEN_TIM_OCxInit(COLOR_TIMx, &TIM_OCInitStructure);
COLOR_GREEN_TIM_OCxPreloadConfig(COLOR_TIMx, TIM_OCPreload_Enable);
//使能通道和预装载
COLOR_BLUE_TIM_OCxInit(COLOR_TIMx, &TIM_OCInitStructure);
COLOR_BLUE_TIM_OCxPreloadConfig(COLOR_TIMx, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(COLOR_TIMx, ENABLE); //使能COLOR_TIMx重载寄存器ARR
/* COLOR_TIMx enable counter */
TIM_Cmd(COLOR_TIMx, ENABLE); //使能定时器
}
/**
* @brief COLOR_TIMx 呼吸灯初始化
* 配置PWM模式和GPIO
* @param 无
* @retval 无
*/
void COLOR_TIMx_LED_Init(void)
{
COLOR_TIMx_GPIO_Config();
COLOR_TIMx_Mode_Config();
}
//停止pwm输出
void COLOR_TIMx_LED_Close(void)
{
SetColorValue(0,0,0);
TIM_Cmd(COLOR_TIMx, DISABLE); //失能定时器
COLOR_TIM_APBxClock_FUN(COLOR_TIM_CLK, DISABLE); //失能定时器时钟
//关闭LED灯
GPIO_SetBits(COLOR_RED_TIM_LED_PORT,COLOR_RED_TIM_LED_PIN);
GPIO_SetBits(COLOR_GREEN_TIM_LED_PORT,COLOR_GREEN_TIM_LED_PIN);
GPIO_SetBits(COLOR_BLUE_TIM_LED_PORT,COLOR_BLUE_TIM_LED_PIN);
}
/**
* @brief 设置RGB LED的颜色
* @param rgb:要设置LED显示的颜色值格式RGB888
* @retval 无
*/
void SetRGBColor(uint32_t rgb)
{
//根据颜色值修改定时器的比较寄存器值
COLOR_TIMx->COLOR_RED_CCRx = (uint8_t)(rgb>>16); //R
COLOR_TIMx->COLOR_GREEN_CCRx = (uint8_t)(rgb>>8); //G
COLOR_TIMx->COLOR_BLUE_CCRx = (uint8_t)rgb; //B
}
/**
* @brief 设置RGB LED的颜色
* @param r\g\b:要设置LED显示的颜色值
* @retval 无
*/
void SetColorValue(uint8_t r,uint8_t g,uint8_t b)
{
//根据颜色值修改定时器的比较寄存器值
COLOR_TIMx->COLOR_RED_CCRx = r;
COLOR_TIMx->COLOR_GREEN_CCRx = g;
COLOR_TIMx->COLOR_BLUE_CCRx = b;
}
/*********************************************END OF FILE**********************/
复制代码
/**
******************************************************************************
* @file main.c
* @author fire
* @version V1.0
* @brief 全彩LED灯例程
******************************************************************************
*/
#include "stm32f10x.h"
#include "./color_led/bsp_color_led.h"
#define SOFT_DELAY() Delay(0xFFFFFF);
void Delay(__IO u32 nCount);
/**
* @brief 主函数
* @param 无
* @retval 无
*/
int main(void)
{
/* 初始化LED灯 */
COLOR_TIMx_LED_Init();
while(1)
{
//显示各种颜色
SetRGBColor(0x8080ff);
SOFT_DELAY();
SetRGBColor(0xff8000);
SOFT_DELAY();
SetRGBColor(0xffc90e);
SOFT_DELAY();
SetColorValue(181,230,29);
SOFT_DELAY();
SetColorValue(255,128,64);
SOFT_DELAY();
}
}
void Delay(__IO uint32_t nCount) //简单的延时函数
{
for(; nCount != 0; nCount--);
}
/*********************************************END OF FILE**********************/
复制代码
所有资料51hei提供下载:
TIM—全彩LED灯.7z
(180.64 KB, 下载次数: 56)
2019-4-10 16:14 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
万妮马
时间:
2020-3-13 23:53
哈哈,不错,踏破铁鞋无觅处,得来全不费工夫
作者:
被宁神的小Y
时间:
2020-3-16 16:00
好东西 希望有机会可以试一试 lz好人
作者:
285623501
时间:
2020-3-17 11:21
好东西 希望有机会
作者:
xxlll
时间:
2020-10-7 15:06
我一摸一样照着写的 为社么我的灯不亮啊
function "COLOR_TIMx_Mode_Config" was declared but never referenced
有这个警告
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1