打印
[STM32F1]

基于STM32F103C8T6的智能LED灯控制系统

[复制链接]
820|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
周半梅|  楼主 | 2024-10-15 08:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器,因其高性价比和强大的功能被广泛应用于嵌入式系统中。本项目基于这款MCU,实现了智能LED灯的控制系统,能够通过按键调节LED灯的亮度,并在不同模式之间切换。

系统功能
  • 按键控制:短按改变亮度,长按切换工作模式(如闪烁模式)。
  • PWM调光:通过PWM控制LED亮度,实现平滑变化。
  • 低功耗设计:在无操作时进入待机模式。

电路设计
  • MCU:STM32F103C8T6
  • LED灯:通过GPIO输出控制
  • 按键:实现模式切换和亮度调整
  • 供电:使用USB 5V供电

代码实现
#include "stm32f10x.h"  

void GPIO_Config(void) {
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  

    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}

void PWM_Config(void) {
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);  

    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    TIM_TimeBaseStructure.TIM_Period = 999;
    TIM_TimeBaseStructure.TIM_Prescaler = 71;
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

    TIM_OCInitTypeDef TIM_OCInitStructure;
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = 0;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OC1Init(TIM3, &TIM_OCInitStructure);
    TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);

    TIM_Cmd(TIM3, ENABLE);
}

void Delay(volatile uint32_t nCount) {
    for (; nCount != 0; nCount--);
}

int main(void) {
    GPIO_Config();
    PWM_Config();

    uint16_t brightness = 0;
    uint8_t mode = 0;  

    while (1) {
        if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) == 0) {
            Delay(300000);
            if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) == 0) {
                mode = !mode;
            } else {
                brightness = (brightness + 100) % 1000;
            }
            TIM_SetCompare1(TIM3, brightness);
        }

        if (mode) {
            TIM_SetCompare1(TIM3, brightness);
            Delay(1000000);
            TIM_SetCompare1(TIM3, 0);
            Delay(1000000);
        }
    }
}
系统设计要点
  • PWM调光
    使用定时器TIM3产生PWM信号,通过改变占空比来调节LED亮度,带来平滑的亮度变化效果。
  • 按键控制逻辑
    短按按键增加亮度,长按按键切换模式。在闪烁模式下,LED灯以一定频率开关。
  • 低功耗管理
    当系统在一段时间内无按键操作时,可以进一步进入待机模式,节省电量。


项目扩展
  • 远程控制:可添加蓝牙模块,通过手机APP控制LED。
  • RGB灯控制:升级为RGB LED,实现颜色变化。
  • 定时功能:添加RTC模块,实现定时开关灯。

结论通过本项目,我们展示了如何使用STM32F103C8T6实现一个智能LED控制系统。STM32F103C8T6的强大功能和丰富的外设资源使其在照明系统中的应用具有极大的优势。未来,我们可以进一步扩展系统功能,实现更加智能化的控制。

使用特权

评论回复
沙发
公羊子丹| | 2024-10-15 08:23 | 只看该作者
这个项目真棒!我正好在学STM32,代码清晰易懂。

使用特权

评论回复
板凳
帛灿灿| | 2024-10-15 08:23 | 只看该作者
用PWM控制LED亮度效果很好,平滑的亮度变化确实更舒服。

使用特权

评论回复
地板
童雨竹| | 2024-10-15 08:23 | 只看该作者
长按切换模式的设计挺有创意的,避免了复杂的操作。

使用特权

评论回复
5
万图| | 2024-10-15 08:24 | 只看该作者
STM32F103的资源确实丰富,这块板子做这种项目真合适。

使用特权

评论回复
6
Wordsworth| | 2024-10-15 08:24 | 只看该作者
如果能加个遥控功能就更好了,比如用红外模块。

使用特权

评论回复
7
Bblythe| | 2024-10-15 08:25 | 只看该作者
这个项目我可以直接拿来做实验课的演示了,太实用了!

使用特权

评论回复
8
Pulitzer| | 2024-10-15 08:25 | 只看该作者
代码部分很详细,尤其是GPIO和PWM的配置,受教了。

使用特权

评论回复
9
Uriah| | 2024-10-15 08:26 | 只看该作者
期待后续的扩展版本,尤其是RGB灯的控制模块。

使用特权

评论回复
10
Clyde011| | 2024-10-15 08:27 | 只看该作者
如果支持Wi-Fi连接,那就是个完整的智能家居项目了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

41

主题

3715

帖子

0

粉丝