江协科技/江科大-STM32入门教程-4.示例程序(LED闪烁&LED流水灯&蜂鸣器)

文章详细介绍了STM32的LED闪烁、流水灯和蜂鸣器实现,包括代码示例和接线图,适合初学者参考学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0. 江协科技/江科大-STM32入门教程-各章节详细笔记-查阅传送门-STM32标准库开发_stm32江协大 csdn-CSDN博客文章浏览阅读3.4k次,点赞47次,收藏143次。江协科技/江科大-STM32标准库开发-各章节详细笔记-传送门至各个章节笔记。基本上课程讲的每句都详细记录,方便回顾。_stm32江协大 csdnhttps://blog.csdn.net/m0_61712829/article/details/132434192?spm=1001.2014.3001.5501目录

LED闪烁

LED流水灯

蜂鸣器

LED闪烁&LED流水灯&蜂鸣器的面包板接线图,及对应程序示例。


LED闪烁

面包板接线图如下。

#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);	//GPIO配置初始化
	
	//GPIO_SetBits(GPIOA,GPIO_Pin_0);
	
	
	
	while(1)
	{
		GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
		Delay_ms(500);
		GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
		Delay_ms(500);
		
		GPIO_ResetBits(GPIOA,GPIO_Pin_0);
		Delay_ms(500);
		GPIO_SetBits(GPIOA,GPIO_Pin_0);
		Delay_ms(500);
		
		GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)0);
		Delay_ms(500);
		GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)1);
		Delay_ms(500);
			 
	}
}

LED流水灯

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启时钟
	
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
//	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
	// |或运算  按键右转  前三个引脚或后为0x0111  ...
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_All;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	while(1)
	{
		GPIO_Write(GPIOA,~0x0001);// 0000 0000 0000 0001   取反前~
		Delay_ms(500);
		GPIO_Write(GPIOA,~0x0002);// 0000 0000 0000 0010
		Delay_ms(500);
		GPIO_Write(GPIOA,~0x0004);// 0000 0000 0000 0100
		Delay_ms(500);
		GPIO_Write(GPIOA,~0x0008);// 0000 0000 0000 1000
		Delay_ms(500);
		GPIO_Write(GPIOA,~0x0010);// 0000 0000 0001 0000
		Delay_ms(500);
		GPIO_Write(GPIOA,~0x0020);// 0000 0000 0010 0000
		Delay_ms(500);
		GPIO_Write(GPIOA,~0x0040);// 0000 0000 0100 0000
		Delay_ms(500);
		GPIO_Write(GPIOA,~0x0080);// 0000 0000 1000 0000
		Delay_ms(500);
	}

}


蜂鸣器

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
int main(void)
{
    //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
    
    GPIO_InitTypeDef GPIO_Initstruct;
    GPIO_Initstruct.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Initstruct.GPIO_Pin = GPIO_Pin_12;
    GPIO_Initstruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB,&GPIO_Initstruct);
    
    
    
    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);
    }
    

}

<think>好的,我需要回答用户关于STM32点亮LED灯的示例代码和教程的问题,特别是与江科大课程相关的。首先,我需要回顾用户提供的引用内容,看看有没有相关的信息。 在引用[2]中提到了科技/江科大-STM32入门教程的CSDN博客链接,里面可能有详细的笔记和教程。这可能包含用户需要的LED示例代码和配置步骤。另外,引用[3]中提到了GPIO配置默认低电平,导致LED默认亮的状态,还提到了驱动函数文件夹Hardware的创建,这些信息对用户有帮助。引用[4]提到了启动文件的选择,这可能与硬件配置有关,但用户主要关注的是LED点亮的代码和教程。 接下来,我需要整理一个清晰的步骤说明,包括GPIO配置、代码结构、示例代码以及可能的问题和解决方法。同时,按照用户的格式要求,使用正确的LaTeX语法,比如独立公式用$$...$$,行内用$...$。例如,在讲解PWM时,可以提到占空比的概念,如占空比为$D = \frac{T_{on}}{T}$,其中$T$是周期,$T_{on}$是导通时间。 用户还要求生成相关问题,我需要根据回答内容提出几个相关的问题,比如如何配置GPIO模式、PWM实现亮度控制的问题,或者工程结构优化的方法。这些问题需要与主题紧密相关,帮助用户进一步学习。 最后,确保所有引用正确标注,如引用[^1]用于PWM控制LED亮度的解释,引用[^2]提供教程链接,引用[^3]涉及GPIO配置和驱动代码结构,引用[^4]涉及启动文件选择。检查是否有遗漏的信息,并确保回答结构清晰,符合用户的要求。</think>### STM32 点亮 LED 示例代码与教程(江科大课程相关) #### 1. **GPIO配置与原理** STM32通过配置GPIO(通用输入输出)引脚控制LED亮灭。以江科大课程实验为例,通常步骤如下: - **GPIO模式设置**:LED需配置为**推挽输出模式**(GPIO_Mode_Out_PP),确保引脚可输出高/低电平。 - **时钟使能**:通过`RCC_APB2PeriphClockCmd()`函数开启对应GPIO端口的时钟。 - **初始化参数**:定义`GPIO_InitTypeDef`结构体,设置引脚号、速度(如GPIO_Speed_50MHz)和模式。 #### 2. **示例代码(标准库版本)** ```c #include "stm32f10x.h" void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; // 使能GPIOB时钟(假设LED接在PB12) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 配置PB12为推挽输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); // 默认关闭LED(高电平熄灭,低电平点亮取决于电路设计) GPIO_SetBits(GPIOB, GPIO_Pin_12); } int main(void) { LED_Init(); while(1) { GPIO_ResetBits(GPIOB, GPIO_Pin_12); // LED亮 Delay_ms(500); // 延时500ms GPIO_SetBits(GPIOB, GPIO_Pin_12); // LED灭 Delay_ms(500); } } ``` #### 3. **关键点解析** - **电平逻辑**:LED亮灭取决于硬件电路设计。若LED阳极接VCC,则**低电平点亮**(如引用[^3]中默认低电平导致LED亮);若阴极接地,则高电平点亮。 - **驱动函数提取**:江科大课程建议将外设驱动代码(如LED、按键)单独存放在`Hardware`文件夹,便于维护。 - **延时函数**:需自行实现`Delay_ms()`,或使用SysTick定时器生成精确延时。 #### 4. **PWM调光进阶** 若需调节LED亮度,可通过PWM(脉冲宽度调制)实现。例如,使用定时器输出PWM波形: - **占空比公式**:亮度由占空比$D = \frac{T_{on}}{T}$控制,其中$T$为周期,$T_{on}$为高电平时间。 - **代码实现**:配置TIM定时器的PWM模式,调节CCR(捕获比较寄存器)值改变占空比。 #### 5. **常见问题** - **LED不亮**:检查GPIO模式、时钟使能、电路极性(高/低电平驱动)。 - **代码提示失效**:若Keil中代码提示框未弹出,按`Ctrl+Space`或调整输入法快捷键冲突[^3]。 - **启动文件选择**:根据芯片型号(如STM32F103C8T6)选择正确启动文件(如`startup_stm32f10x_md.s`)。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿齐Archie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值