STM32实现LED闪烁、流水灯与蜂鸣器功能详解教程

发布者:EternalSmile最新更新时间:2025-10-17 来源: cnblogs关键字:STM32  LED闪烁  流水灯 手机看文章 扫描二维码
随时随地手机看文章

一、LED闪烁

1.新建文件夹

选择一个地方新建文件夹—3-1 LED灯闪烁



点开keil软件,点击Project–New ,新建工程

选择STM32F103C8,点ok


在刚才创建的文件夹LED灯闪烁里面,新建Start、Library、User 3个文件夹

2.配置文件

将固件库中arm下的文件和STM32F10x文件下的后3个文件,还有core文件复制到start文件夹下


start文件完成


同上步骤,将inc、和src的文件都复制到Library(这里只是一部分)


Project的Template中这些复制到User文件夹中


3.添加工程组合文件

点击有三个箱子的标志(工程文件管理),默认的组×掉,再新建Start、Library、User

选Start,点击右边的添加文件

文件类型选所有文件


添加后缀md的启动文件,还有.c和.h文件


在Library点击右边的添加文件,文件类型选所有文件,全选


在User点击右边的添加文件,文件类型选所有文件,全选

最后点击OK,工程里的组合文件都添加成功

4.工程选项配置

点击魔术棒,选择C/C++,在include paths中把自己建的文件夹路径都添加进去

点击添加按钮,3个文件都添加进来,点击OK

在define中添加USE使用、STD标准、PERIPH外设、DRIVER驱动这个字符串

点击Debug,在Use中选择ST-Link Debugger,然后点击Settings

点击Flash Driverload,勾上复位并执行

点击确定,工程选项配置完成

5.工程编译

在User中把main.c原本的代码删除,右键添加头文件

写上主函数(最后一行一定要空行)

点击编译按钮,不报错,整个工程编译完成

如果报错,可以这样解决

6.操作STM32的GPIO总共3步

使用RCC开启GPIO时钟

使用GPIO_Init函数初始化GPIO

使用输入或输出的函数控制GPIO口

跳转定义点这个

7. 正式开始,GPIO初始化

点开Library的rcc.h文件,调用RCC里的外设时钟控制函数(GPIO属于APB2外设)

复制到main.c,然后右键跳转到定义

要点亮PA0口的LED,选择RCC_APB2Periph_GPIOA放到第一个参数

第二个参数选择ENABLE,此时时钟开启

调用GPIO_Init函数,复制后同样跳转函数

第一个参数选GPIOA,第二个参数是结构体,粘贴在GPIO_Init上面,起名字为GPIO_InitStructure(变量名随便起,自己看懂就行)

复制结构体名字,用“.”引出结构体成员(没有引出试一下保存退出软件,再进入)

选择GPIO_Mode同样右键跳转定义,选择CTRL+F搜索,复制GPIO_Mode_Out_PP(推挽输出)

选择GPIO_Pin,右键跳转定义,GPIO_Pin有多定义,选择member,双击,然后同上操作CTRL+F,选择GPIO_Pin_0

GPIO_Speed同样操作

最后,把GPIO初始化结构体地址放到GPIO_Init第二个参数

GPIO初始化完成

8.实现LED闪烁

GPIO4个输出函数

GPIO_SetBits,把指定的端口设置为高电平

GPIO_ResetBits,把指定的端口设置为低电平

GPIO_WriteBit,前两个指定端口,BitVal根据第三个参数的值设置指定端口

GPIO_Write,GPIOX选择外设,PortVal,对16个端口进行写入操作

在LED灯闪烁文件夹中新建文件夹System,添加延时函数模块,再回到软件,点三个箱子,添加System组

点击魔术棒,添加System头文件路径

使用延时函数模块,在main.c文件上面添加#include 'Delay.h'

复制毫秒延时函数Delay_ms,设置500ms,就可以闪烁了

特殊

如果想要设置1是高电平,0是低电平

复制WriteBit,设置强制类型转换,将1和0类型转换为BitAction枚举类型

9.完整代码

#include 'stm32f10x.h'                  // Device header
#include 'Delay.h'


int main(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度
    GPIO_Init(GPIOA, &GPIO_InitStructure); 
    
    while(1)
    {
        GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);//点亮
        Delay_ms(1000);
        GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);//熄灭
        Delay_ms(1000);
    }
}
 

二、LED流水灯

直接复制前面做的LED灯闪烁的文件夹,改为LED流水灯

All(L小写)

低电平点亮,前面加“~”按位取反,依此类推~0x0004、~0x0008、~0x0010、~0x0020、~0x0040、~0x0080(有几个灯写几个就行)

完整代码

#include 'stm32f10x.h'                  // Device header
#include 'Delay.h'

int main(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//打开GPIO时钟
    
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度
    GPIO_Init(GPIOA, &GPIO_InitStructure); 
     
    
    while(1)
    {
        GPIO_Write(GPIOA, 0x0001);//0000 0000 0000 0001
        Delay_ms(1000);
        GPIO_Write(GPIOA, 0x0002);//0000 0000 0000 0010
        Delay_ms(1000);
        GPIO_Write(GPIOA, 0x0004);//0000 0000 0000 0100
        Delay_ms(1000);
        GPIO_Write(GPIOA, 0x0008);//0000 0000 0000 0100
        Delay_ms(1000);
        GPIO_Write(GPIOA, 0x0010);//0000 0000 0000 0100
        Delay_ms(1000);
        GPIO_Write(GPIOA, 0x0020);//0000 0000 0000 0100
        Delay_ms(1000);
        GPIO_Write(GPIOA, ~0x0040);//0000 0000 0000 0100
        Delay_ms(1000);
        GPIO_Write(GPIOA, ~0x0080);//0000 0000 0000 0100
        Delay_ms(1000);
    }
}
 

三、蜂鸣器

直接复制前面做的LED灯闪烁的文件夹,改为蜂鸣器

这里用到的是PB口,改为GPIOB,端口改为Pin_12

想要实现不同的响声可以这样改

完整代码

#include 'stm32f10x.h'                  // Device header
#include 'Delay.h'

int main(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度
    GPIO_Init(GPIOB, &GPIO_InitStructure); 
    
    while(1)
    {
        GPIO_ResetBits(GPIOB, GPIO_Pin_12);
        Delay_ms(100);
        GPIO_SetBits(GPIOB, GPIO_Pin_12);
        Delay_ms(100);
        GPIO_ResetBits(GPIOB, GPIO_Pin_12);
        Delay_ms(100);
        GPIO_SetBits(GPIOB, GPIO_Pin_12);
        Delay_ms(700);
    
    }
}



关键字:STM32  LED闪烁  流水灯 引用地址:STM32实现LED闪烁、流水灯与蜂鸣器功能详解教程

上一篇: STM32CUBEMX(2)--USART通过DMA方式接收不定长数据
下一篇:STM32中中断标志位与中断挂起位详解:TIM_ClearFlag与TIM_ClearITPendingBit函数应用指南

推荐阅读最新更新时间:2026-03-25 16:07

单片机LED流水灯闪烁灯程序大集合
/* 点亮LED灯:方1 位操作方式 sbit D1=P1^0; 方2 总线方工 P1=0x??; 让LED灯闪烁 */ /* //方1:位操作方式点亮LED #include reg52.h sbit D1=P1^0; //P1^0的P必须是大写 void main() { D1=0; //使用P1^0必须先经过sbit定义,而不能直接用P1^0=0;否则编译过不了 } */ //------------------------------------------------- :总线方式点亮LED #include reg52.h void main() { P1=0xfd; //1111
[单片机]
STM32蜂鸣器与按键功能详解
一、蜂鸣器的原理与应用 基本概念 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。 工作原理 蜂鸣器一般分为两类:有源蜂鸣器 or 无源蜂鸣器,有源或者无源指的是蜂鸣器内部是否具有振荡电路,无源蜂鸣器内部没有振荡器,所以通电之后是不会鸣叫,必须提供一个驱动信号。 三极管在电路中一般有截止、放大、饱和三种工作状态,不同状态下作用不同,如下所示: 截止状态:此时三极管的发射结反偏,集电结也反偏(以 NPN 型三极管为例,即基极电压低于发射极电压 ,且集电极电压高于基极电压),基极电压低于一定阈值,集电极和发射极
[单片机]
<font color='red'>STM32</font><font color='red'>蜂鸣器</font>与按键<font color='red'>功能</font>详解
STM32之一 建立工程及led闪烁
摸索了好久,今天终于实现了自己的工程模板,首先看下我的工程结构: 我的工程文件夹建立了五个文件夹,CMSIS、Libraries、Project、Startup、USER。里面分别存放了各自的初始文件, 关于MDK中的工程树情况如上图,分别在各自的文件夹下存放各自的文件,我们采用的是模块化编程,例如编写led程序就建立led.h和led.c文件,添加至工程,另外建立了延时函数文件,即delay.c和delay.h文件,而且这文件以后都可以用在其他工程中,led灯闪烁即led.c中, 首先要建立GPIO对象,然后首先要进行时钟使能,然后对GPIO进行初始化,下面来看led.h文件: 关键是中间的两个宏定义,定义ledon代表了
[单片机]
<font color='red'>STM32</font>之一 建立工程及<font color='red'>led</font><font color='red'>闪烁</font>
STM32点亮闪烁LED
1/*本程序实现STM开发板上LED灯红绿蓝闪烁*/ 2 3 4 5 #include stm32f10x.h // 相当于51单片机中的 #include reg51.h 6 #include stm32f10x_gpio.h 7 /* 8 9 *由于STM32的GPIO工作模式有8种(输入4种+输出4种) 10 *在GPIO输出之前要先对要操作的GPIO进行配置 11 知识点: 12 一个结构体 13 typedef struct//结构体 14 { 15 uint16_t GPIO_Pin; 16 GPIOS
[单片机]
<font color='red'>STM32</font>点亮<font color='red'>闪烁</font><font color='red'>LED</font>灯
STM32标准库编程之LED闪烁
【1】工程截图 【2】代码解读 有了前面文章的基础,工程建立我不再赘述,我们来看主函数所在的源文件(这里完全可以把开头的宏定义和函数声明放到同名的头文件中)。 这里我只引用了delay.h和sys.h 可以看到这三个文件放到一个文件夹里,说明他们三个比较特殊,这里就详细介绍一下(辅助编程文件夹里的开发指南里说的很详细)。SYSTEM 文件夹下包含了 delay、 sys、 usart 等三个文件夹。分别包含了 delay.c、 sys.c、 usart.c及其头文件。通过这 3 个 c 文件,可以快速的给任何一款 STM32F1 构建最基本的框架。使用起来是很方便的。 delay 延时的编程思想: CM3 内核的处理
[单片机]
<font color='red'>STM32</font>标准库编程之<font color='red'>LED</font><font color='red'>闪烁</font>
STM32开发笔记82: 使用C++语言控制LED闪烁
单片机型号:STM32L053R8T6 本文介绍应用C++语言控制LED闪烁的方法。 先看电路图,单片机PB12引脚控制LED的亮灭,当PB12引脚给出低电平LED亮,当PB12引脚给出高电平LED灭。 步骤如下: 1、打开hal.h文件,建立CLed类,其从CIO_Output_OST_High类继承,CIO_Output_OST_High类为引脚输出类,OST是指其具有3个成员函数,分别为Open(打开操作),Shut(关闭操作)和Turn(翻转操作),High的意思是指其上电为高电平。 同样还有CIO_Output_OST_Low类,其上电为低电平。 class CLed:public CIO_Out
[单片机]
<font color='red'>STM32</font>开发笔记82: 使用C++语言控制<font color='red'>LED</font><font color='red'>闪烁</font>
STM32cubeMX 基于stm32的定时器实现定时1秒LED闪烁
软件: STM32CubeMX V4.25.0 keil_u5 固件库版本: STM32Cube FW_F1 V1.6.1 硬件: OneNet 麒麟座V1.4 在STM32CubeMX中新建项目,选择正确的MCU型号 首先设置RCC和SYS,如下图 启用TIM1,选择内部时钟源(Internal Clock)。 然后根据板子实际情况设置时钟(麒麟座外部晶振是12M,STM32F103x的最高主频是72M),如下图 GPIO设置 PC7和 PC10为GPIO_OUTPUT, (这是麒麟座V1.4的四个LED管脚其中的两个) 设置其中一个默认为高电平,另一个默认为低电平,User Label分别是LED1
[单片机]
STM32cubeMX 基于<font color='red'>stm32</font>的定时器实现定时1秒<font color='red'>LED</font><font color='red'>闪烁</font>
STM32LED闪烁实验
下面我就把点亮STM32 的LED灯过程分享一下: 首先你的了解以下俩点: 1、 了解 STM32 用有几种 GPIO 模式。 2、 怎么学会设置 STM32 的 GPIO 输出控制 LED 灯。 首先我们来看一下我们开发板上面 LED 的接线图: 从上面的图,我们可以看到 LED 灯是接到单片机的 PC 口的 PC0 到 PC7。而 点 亮一盏LED的原理就是把相应LED接到单片机的相应的IO口输出低电平, IO 口 输出为高电平就能够熄灭 LED(由图中得LED灯都是共阳极接高电平,所以 当所接开发板的引脚输出低电平时,有电流流过LED灯,灯才亮)。 了解了这些以后就可以开始动工了》
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved