找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5741|回复: 4
收起左侧

TIM—全彩LED灯控制 简单STM32实验程序

[复制链接]
ID:508689 发表于 2019-4-10 14:12 | 显示全部楼层 |阅读模式
制作出来的实物图如下:

状态 演示

状态   演示

代码截图

代码截图


单片机源程序如下:
  1. #include "./color_led/bsp_color_led.h"


  2. /**
  3.   * @brief  配置COLOR_TIMx复用输出PWM时用到的I/O
  4.   * @param  无
  5.   * @retval 无
  6.   */
  7. static void COLOR_TIMx_GPIO_Config(void)
  8. {
  9.   GPIO_InitTypeDef GPIO_InitStructure;

  10.   /* GPIO clock enable */
  11.   RCC_APB2PeriphClockCmd(COLOR_TIM_GPIO_CLK, ENABLE);

  12.           /*IO设置*/
  13.         COLOR_GPIO_REMAP_FUN();
  14.   
  15.   /* 配置LED灯用到的引脚 */
  16.         //红
  17.   GPIO_InitStructure.GPIO_Pin =  COLOR_RED_TIM_LED_PIN ;        
  18.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                    // 复用推挽输出
  19.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  20.   GPIO_Init(COLOR_RED_TIM_LED_PORT, &GPIO_InitStructure);
  21.         
  22.         //绿
  23.         GPIO_InitStructure.GPIO_Pin =  COLOR_GREEN_TIM_LED_PIN ;
  24.   GPIO_Init(COLOR_GREEN_TIM_LED_PORT, &GPIO_InitStructure);
  25.         
  26.         //蓝
  27.         GPIO_InitStructure.GPIO_Pin =  COLOR_BLUE_TIM_LED_PIN ;
  28.   GPIO_Init(COLOR_BLUE_TIM_LED_PORT, &GPIO_InitStructure);

  29. }

  30. /**
  31.   * @brief  配置COLOR_TIMx输出的PWM信号的模式,如周期、极性
  32.   * @param  无
  33.   * @retval 无
  34.   */
  35. static void COLOR_TIMx_Mode_Config(void)
  36. {
  37.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  38.         TIM_OCInitTypeDef  TIM_OCInitStructure;                                                                                                                                                               
  39.         
  40.         /* 设置TIM CLK 时钟 */
  41.   COLOR_TIM_APBxClock_FUN(COLOR_TIM_CLK, ENABLE);                                         //使能COLOR_TIMx时钟

  42.   /* 基本定时器配置 */                 
  43.   TIM_TimeBaseStructure.TIM_Period = 255;                                                                 //当定时器从0计数到255,即为256次,为一个定时周期
  44.   TIM_TimeBaseStructure.TIM_Prescaler = 1999;                                                                    //设置预分频
  45.   TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;                        //设置时钟分频系数:不分频(这里用不到)
  46.   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;          //向上计数模式
  47.   TIM_TimeBaseInit(COLOR_TIMx, &TIM_TimeBaseStructure);

  48.   /* PWM模式配置 */
  49.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                                            //配置为PWM模式1
  50.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;        //使能输出
  51.   TIM_OCInitStructure.TIM_Pulse = 0;                                                                                                          //设置初始PWM脉冲宽度为0        
  52.   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;            //当定时器计数值小于CCR_Val时为低电平

  53.         //使能通道和预装载
  54.   COLOR_RED_TIM_OCxInit(COLOR_TIMx, &TIM_OCInitStructure);                                                                 
  55.   COLOR_RED_TIM_OCxPreloadConfig(COLOR_TIMx, TIM_OCPreload_Enable);                                                
  56.   
  57.         //使能通道和预装载
  58.   COLOR_GREEN_TIM_OCxInit(COLOR_TIMx, &TIM_OCInitStructure);                                                                                 
  59.   COLOR_GREEN_TIM_OCxPreloadConfig(COLOR_TIMx, TIM_OCPreload_Enable);                                                
  60.   
  61.         //使能通道和预装载
  62.   COLOR_BLUE_TIM_OCxInit(COLOR_TIMx, &TIM_OCInitStructure);                                                                                 
  63.   COLOR_BLUE_TIM_OCxPreloadConfig(COLOR_TIMx, TIM_OCPreload_Enable);                                                

  64.   TIM_ARRPreloadConfig(COLOR_TIMx, ENABLE);                                                                                                         //使能COLOR_TIMx重载寄存器ARR

  65.   /* COLOR_TIMx enable counter */
  66.   TIM_Cmd(COLOR_TIMx, ENABLE);                                                                                                   //使能定时器               
  67. }

  68. /**
  69.   * @brief  COLOR_TIMx 呼吸灯初始化
  70.   *         配置PWM模式和GPIO
  71.   * @param  无
  72.   * @retval 无
  73.   */
  74. void COLOR_TIMx_LED_Init(void)
  75. {
  76.         COLOR_TIMx_GPIO_Config();
  77.         COLOR_TIMx_Mode_Config();        
  78. }

  79. //停止pwm输出
  80. void COLOR_TIMx_LED_Close(void)
  81. {
  82.         SetColorValue(0,0,0);
  83.         TIM_Cmd(COLOR_TIMx, DISABLE);                                                                           //失能定时器                                                
  84.         COLOR_TIM_APBxClock_FUN(COLOR_TIM_CLK, DISABLE);         //失能定时器时钟
  85.         
  86.         //关闭LED灯
  87.         GPIO_SetBits(COLOR_RED_TIM_LED_PORT,COLOR_RED_TIM_LED_PIN);
  88.         GPIO_SetBits(COLOR_GREEN_TIM_LED_PORT,COLOR_GREEN_TIM_LED_PIN);
  89.         GPIO_SetBits(COLOR_BLUE_TIM_LED_PORT,COLOR_BLUE_TIM_LED_PIN);
  90. }

  91. /**
  92.   * @brief  设置RGB LED的颜色
  93.         * @param  rgb:要设置LED显示的颜色值格式RGB888
  94.   * @retval 无
  95.   */
  96. void SetRGBColor(uint32_t rgb)
  97. {
  98.         //根据颜色值修改定时器的比较寄存器值
  99.         COLOR_TIMx->COLOR_RED_CCRx = (uint8_t)(rgb>>16);                        //R
  100.         COLOR_TIMx->COLOR_GREEN_CCRx = (uint8_t)(rgb>>8);          //G     
  101.         COLOR_TIMx->COLOR_BLUE_CCRx = (uint8_t)rgb;                                                //B
  102. }


  103. /**
  104.   * @brief  设置RGB LED的颜色
  105.         * @param  r\g\b:要设置LED显示的颜色值
  106.   * @retval 无
  107.   */
  108. void SetColorValue(uint8_t r,uint8_t g,uint8_t b)
  109. {
  110.         //根据颜色值修改定时器的比较寄存器值
  111.         COLOR_TIMx->COLOR_RED_CCRx = r;        
  112.         COLOR_TIMx->COLOR_GREEN_CCRx = g;               
  113.         COLOR_TIMx->COLOR_BLUE_CCRx = b;        
  114. }
  115. /*********************************************END OF FILE**********************/
复制代码
  1. /**
  2.   ******************************************************************************
  3.   * @file    main.c
  4.   * @author  fire
  5.   * @version V1.0
  6.   * @brief   全彩LED灯例程

  7.   ******************************************************************************
  8.   */
  9.   
  10. #include "stm32f10x.h"
  11. #include "./color_led/bsp_color_led.h"


  12. #define SOFT_DELAY() Delay(0xFFFFFF);

  13. void Delay(__IO u32 nCount);

  14. /**
  15.   * @brief  主函数
  16.   * @param  无
  17.   * @retval 无
  18.   */
  19. int main(void)
  20. {                        
  21.         /* 初始化LED灯 */
  22.         COLOR_TIMx_LED_Init();

  23.         while(1)
  24.         {
  25.                 //显示各种颜色
  26.                 SetRGBColor(0x8080ff);
  27.                 SOFT_DELAY();
  28.                
  29.                 SetRGBColor(0xff8000);
  30.                 SOFT_DELAY();
  31.                
  32.                 SetRGBColor(0xffc90e);
  33.                 SOFT_DELAY();
  34.                
  35.                 SetColorValue(181,230,29);
  36.                 SOFT_DELAY();

  37.                 SetColorValue(255,128,64);
  38.                 SOFT_DELAY();               

  39.         }               
  40. }


  41. void Delay(__IO uint32_t nCount)         //简单的延时函数
  42. {
  43.         for(; nCount != 0; nCount--);
  44. }
  45. /*********************************************END OF FILE**********************/

复制代码


所有资料51hei提供下载:
TIM—全彩LED灯.7z (180.64 KB, 下载次数: 56)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:708043 发表于 2020-3-13 23:53 | 显示全部楼层
哈哈,不错,踏破铁鞋无觅处,得来全不费工夫
回复

使用道具 举报

ID:686417 发表于 2020-3-16 16:00 | 显示全部楼层
好东西  希望有机会可以试一试  lz好人
回复

使用道具 举报

ID:709978 发表于 2020-3-17 11:21 | 显示全部楼层
好东西  希望有机会
回复

使用道具 举报

ID:826544 发表于 2020-10-7 15:06 | 显示全部楼层
我一摸一样照着写的 为社么我的灯不亮啊   
function "COLOR_TIMx_Mode_Config" was declared but never referenced
有这个警告
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表