|
制作出來的實(shí)物圖如下:
狀態(tài) 演示
代碼截圖
單片機(jī)源程序如下:
- #include "./color_led/bsp_color_led.h"
- /**
- * @brief 配置COLOR_TIMx復(fù)用輸出PWM時(shí)用到的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設(shè)置*/
- COLOR_GPIO_REMAP_FUN();
-
- /* 配置LED燈用到的引腳 */
- //紅
- GPIO_InitStructure.GPIO_Pin = COLOR_RED_TIM_LED_PIN ;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 復(fù)用推挽輸出
- 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);
-
- //藍(lán)
- GPIO_InitStructure.GPIO_Pin = COLOR_BLUE_TIM_LED_PIN ;
- GPIO_Init(COLOR_BLUE_TIM_LED_PORT, &GPIO_InitStructure);
- }
- /**
- * @brief 配置COLOR_TIMx輸出的PWM信號(hào)的模式,如周期、極性
- * @param 無
- * @retval 無
- */
- static void COLOR_TIMx_Mode_Config(void)
- {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- TIM_OCInitTypeDef TIM_OCInitStructure;
-
- /* 設(shè)置TIM CLK 時(shí)鐘 */
- COLOR_TIM_APBxClock_FUN(COLOR_TIM_CLK, ENABLE); //使能COLOR_TIMx時(shí)鐘
- /* 基本定時(shí)器配置 */
- TIM_TimeBaseStructure.TIM_Period = 255; //當(dāng)定時(shí)器從0計(jì)數(shù)到255,即為256次,為一個(gè)定時(shí)周期
- TIM_TimeBaseStructure.TIM_Prescaler = 1999; //設(shè)置預(yù)分頻
- TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ; //設(shè)置時(shí)鐘分頻系數(shù):不分頻(這里用不到)
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上計(jì)數(shù)模式
- 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; //設(shè)置初始PWM脈沖寬度為0
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //當(dāng)定時(shí)器計(jì)數(shù)值小于CCR_Val時(shí)為低電平
- //使能通道和預(yù)裝載
- COLOR_RED_TIM_OCxInit(COLOR_TIMx, &TIM_OCInitStructure);
- COLOR_RED_TIM_OCxPreloadConfig(COLOR_TIMx, TIM_OCPreload_Enable);
-
- //使能通道和預(yù)裝載
- COLOR_GREEN_TIM_OCxInit(COLOR_TIMx, &TIM_OCInitStructure);
- COLOR_GREEN_TIM_OCxPreloadConfig(COLOR_TIMx, TIM_OCPreload_Enable);
-
- //使能通道和預(yù)裝載
- 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); //使能定時(shí)器
- }
- /**
- * @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); //失能定時(shí)器
- COLOR_TIM_APBxClock_FUN(COLOR_TIM_CLK, DISABLE); //失能定時(shí)器時(shí)鐘
-
- //關(guān)閉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 設(shè)置RGB LED的顏色
- * @param rgb:要設(shè)置LED顯示的顏色值格式RGB888
- * @retval 無
- */
- void SetRGBColor(uint32_t rgb)
- {
- //根據(jù)顏色值修改定時(shí)器的比較寄存器值
- 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 設(shè)置RGB LED的顏色
- * @param r\g\b:要設(shè)置LED顯示的顏色值
- * @retval 無
- */
- void SetColorValue(uint8_t r,uint8_t g,uint8_t b)
- {
- //根據(jù)顏色值修改定時(shí)器的比較寄存器值
- COLOR_TIMx->COLOR_RED_CCRx = r;
- COLOR_TIMx->COLOR_GREEN_CCRx = g;
- COLOR_TIMx->COLOR_BLUE_CCRx = b;
- }
- /*********************************************END OF FILE**********************/
復(fù)制代碼- /**
- ******************************************************************************
- * @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 主函數(shù)
- * @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) //簡(jiǎn)單的延時(shí)函數(shù)
- {
- for(; nCount != 0; nCount--);
- }
- /*********************************************END OF FILE**********************/
復(fù)制代碼
所有資料51hei提供下載:
TIM—全彩LED燈.7z
(180.64 KB, 下載次數(shù): 56)
2019-4-10 16:14 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|