首页 论坛 芯片产品和产业 北京交通大学 《stm32,我来了》原创小白教程 :LED灯闪烁和颜色变换

发帖 回复

[原创] 《stm32,我来了》原创小白教程 :LED灯闪烁和颜色变换
5457 查看
6 回复
 楼主 | 发布于 2018-12-30 | 只看楼主
分享到:

配套资料链接: https://pan.baidu.com/s/1_sqXpUlzkaSbeNAq-q8PbQ 提取码: k54j


 上一节课已经简简单单地成功点亮了一个LED灯,那么如何控制LED灯闪烁呢?
我们打算用软件延时,当然,用STM32自带的Systick也可以做精准延时,在之后的篇幅中会有一章是专门来讲Systick,我们现在使用的是软件延时。

        野火指南者用的8MHz的晶振,经过9倍频,最后的时钟频率达到72MHz,所以执行一段语句的时间为频率的倒数,即1/72 000 000 s,等同于1/72 us,那么,如果要延时一秒的话,就需要执行14000次语句。

一、定义一个延时函数Delay

(当然函数名按自己的来随便改也是可以的)

void Delay(unsigned int i)

{

while(i--);

}
然后在main函数中加入Delay(14000000),就可以达到延时一秒。
还有,我们知道之前


引脚的那一端拉低就可以点亮LED灯,那么拉高的话,就会使LED灯熄灭,再结合我们之前所讲的延时函数就可以实现一个”LED灯闪烁”的现象了
二、main主函数中添加一个while循环来让LED灯持续闪烁
while(1)
        {
        GPIO_SetBits(GPIOB, GPIO_Pin_5);
        Delay(14000000);
        GPIO_ResetBits(GPIOB, GPIO_Pin_5);
        Delay(14000000);
        }
三、最后的效果
所以,我们在上一节课的代码上要修改为:
GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
        GPIO_ResetBits(GPIOB, GPIO_Pin_5);
        //将相关的引脚置位,拉高,默认为熄灭
        while(1)
        {
                        GPIO_ResetBits(GPIOB, GPIO_Pin_5);//点亮红灯
                        Delay(14000000);
                        GPIO_SetBits(GPIOB, GPIO_Pin_5);//熄灭红灯
                        Delay(14000000);
        }
LED灯颜色变换

从原理图我们可以发现,这是一个RGB灯,之前我们只是点亮了他的一种颜色,如果需要改变颜色,初始化对应的GPIO即可,所以需要修改:


端口号
引脚号


到代码中所要修改的就是(红色的部分):


同理,因为这个开发板RGB灯都是挂载到GPIOB这个IO口,所以初始化不同灯的GPIO的时候,只需要改变引脚即可,在以上的代码中追加:


然后main函数中的while中修改代码,使每间隔1秒灯交换亮:

while(1)
        {
                        GPIO_ResetBits(GPIOB, GPIO_Pin_5);//点亮红灯
                        GPIO_SetBits(GPIOB, GPIO_Pin_0);//熄灭绿灯
                        GPIO_SetBits(GPIOB, GPIO_Pin_1);//熄灭蓝灯
                        Delay(14000000);
                        GPIO_ResetBits(GPIOB, GPIO_Pin_0);//点亮绿灯
                        GPIO_SetBits(GPIOB, GPIO_Pin_5);//熄灭红灯
                        GPIO_SetBits(GPIOB, GPIO_Pin_1);//熄灭蓝灯
                        Delay(14000000);
                        GPIO_ResetBits(GPIOB, GPIO_Pin_1);//点亮蓝灯
                        GPIO_SetBits(GPIOB, GPIO_Pin_0);//熄灭绿灯
                        GPIO_SetBits(GPIOB, GPIO_Pin_5);//熄灭红灯
                        Delay(14000000);
        }
至此,我们将02LED灯闪烁和颜色变换\点灯项目源代码\Output\led.hex文件利用mcuisp下载到板子里就可会发现三种色灯交替闪亮!


(1 ) (0 )
回复 举报

回复于 2018-12-30 沙发

支持下,谢谢分享!
(0 )
评论 (1) 举报

回复于 2018-12-31 2#

感谢分享,很有帮助!!
(0 )
评论 (1) 举报

回复于 2018-12-31 3#

谢谢分享!!!
(0 )
评论 (1) 举报

回复于 2019-01-04 4#

谢谢分享!
(0 )
评论 (1) 举报

回复于 2019-01-23 5#

感谢分享!
(0 )
评论 (1) 举报

回复于 2019-04-20 6#

感谢分享;
(0 )
评论 (1) 举报
  • 发表回复
    0/3000





    举报

    请选择举报类别

    • 广告垃圾
    • 违规内容
    • 恶意灌水
    • 重复发帖

    全部板块

    返回顶部