小白跟做江科大32单片机之LED闪烁

原理介绍

原理介绍详见:

【STM32】江科大STM32学习笔记汇总(已完结)_stm32江科大笔记-CSDN博客https://blog.csdn.net/u010249597/article/details/134762513


项目准备

1.在项目文件夹中新建3-1 LED文件夹

2.keil新建项目,打开新建的3-1 LED,命名为project

4.工程芯片选择STM32F103C8,因为课程中的芯片是STM32F10318C8T6

5.新建start,library,User文件夹

6.按照下面给出的网址将三个文件夹各自所需的文件加入对应的文件夹中

小白跟做江科大32单片机之新建工程-CSDN博客https://blog.csdn.net/weixin_58051657/article/details/139169087

注意

在User文件夹中要么自己新建一个main.c要么将江科大老师给的main.c文件复制到User文件夹中

7.添加完成之后,点击那个三个小正方体,新建三个组------start,library,User,在start组下添加下图的文件

8.将外部Library文件夹汇中所有文件都添加到软件中新建的Library组中

9.将外部User文件夹汇中所有文件都添加到软件中新建的User组中

10.添加外部文件对应路径

11.添加USE_STDPERIPH_DRIVER定义

12.配置debug

13.debug中setting选择

14.编译测试,要保证0错误,0报错

提示

可以在江科大老师分享的第二个文件夹中找到keilkill.bat文件,删除中间文件,减小项目占用的空间


具体实现

1.按照江科大老师给的连接示意图连接LED

操作GPIO需要提前准备三步:

①.用RCC开启GPIO时钟

②.GPIO_Init初始化GPIO

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

2.编写代码

由上图可知,要点亮需要选择0A这个端口点亮LED

所以,在main中编写

#include "stm32f10x.h" // Device header

int main()

{

/*操作GPIO的三步*/

//1.开启RCC时钟,RCC_APB2Periph_GPIOA表示要点亮OA的LED

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟

//使用各个外设前必须开启时钟,否则对外设的操作无效

//2.引用结构体,初始化GPIO

GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO模式,赋值为推挽输出模式

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //GPIO外设P0引脚,赋值为第0号引脚

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO速度,默认赋值为50MHz

GPIO_Init(GPIOA, &GPIO_InitStructure); //将赋值后的构体变量传递给GPIO_Init函数

GPIO_ResetBits(GPIOA, GPIO_Pin_0); //将PA0引脚设置为低电平,LED亮

GPIO_SetBits(GPIOA, GPIO_Pin_0); //将PA0引脚设置为高电平,LED灭

while(1)

{

}

}

但上面这些代码只能实现一瞬间LED的亮灭,或在上电后LED始终保持灭或始终保持亮

改进:

3.引入Delay函数

①新建system文件夹,把江科大老师提供的Delay相关文件添加到system文件夹中

②按照项目准备中的步骤,将system文件夹的内容加入到3-1 LED项目中

4.引入Delay函数

#include "stm32f10x.h" // Device header

#include "Delay.h"

int main()

{

/*操作GPIO的三步*/

//1.开启RCC时钟,RCC_APB2Periph_GPIOA表示要点亮OA的LED

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟

//使用各个外设前必须开启时钟,否则对外设的操作无效

//2.引用结构体,初始化GPIO

GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO模式,赋值为推挽输出模式

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //GPIO外设P0引脚,赋值为第0号引脚

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO速度,默认赋值为50MHz

GPIO_Init(GPIOA, &GPIO_InitStructure); //将赋值后的构体变量传递给GPIO_Init函数

GPIO_ResetBits(GPIOA, GPIO_Pin_0); //将PA0引脚设置为低电平,LED亮

GPIO_SetBits(GPIOA, GPIO_Pin_0); //将PA0引脚设置为高电平,LED灭

while(1)

{

/*通过设置PA0引脚的高低电平,实现LED闪烁,有下面3种方法*/

/*最终我选用方法3点亮LED*/

/*方法1:GPIO_ResetBits设置低电平,GPIO_SetBits设置高电平*/

/*GPIO_ResetBits(GPIOA, GPIO_Pin_0); //将PA0引脚设置为低电平

Delay_ms(500); //延时500ms

GPIO_SetBits(GPIOA, GPIO_Pin_0); //将PA0引脚设置为高电平

Delay_ms(500); //延时500ms*/

/*方法2:GPIO_WriteBit设置低/高电平,由Bit_RESET/Bit_SET指定*/

/* GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET); //将PA0引脚设置为低电平

Delay_ms(500); //延时500ms

GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET); //将PA0引脚设置为高电平

Delay_ms(500); //延时500ms*/

/*方法3:GPIO_WriteBit设置低/高电平,由数据0/1指定,数据需要强转为BitAction类型*/

GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0); //将PA0引脚设置为低电平

Delay_ms(500); //延时500ms

GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)1); //将PA0引脚设置为高电平

Delay_ms(500); //延时500ms

}

}

5.最终效果

相关推荐
m0_689618282 小时前
会“变形”的软3D电磁结构,让4D电子、柔性机器人迎来新可能
笔记·学习·机器人
柒柒钏2 小时前
PyTorch学习总结(一)
人工智能·pytorch·学习
ℳ๓. Sweet4 小时前
【从零开发STM32(HAL版)】一、开发硬件环境准备
stm32·单片机·嵌入式硬件
一条破秋裤4 小时前
零样本学习指标
深度学习·学习·机器学习
喜欢踢足球的老罗4 小时前
Qoder AI IDE深度体验:用Repo Wiki与AskModel重塑开源库学习范式
人工智能·学习·qoder
ACP广源盛139246256735 小时前
GSV2202D@ACP#DisplayPort 1.4 到 HDMI 2.0 转换器(带嵌入式 MCU)
单片机·嵌入式硬件·计算机外设·音视频
可可苏饼干5 小时前
NoSQL 与 Redis
数据库·redis·笔记·学习·nosql
重生之我在番茄自学网安拯救世界5 小时前
网络安全中级阶段学习笔记(一):DVWA靶场安装配置教程与网络空间搜索语法
笔记·学习·网络安全·靶场·dvwa·fofa·google hack
梓德原5 小时前
【总结】STM32 SPI DMA 的使用
stm32·单片机·嵌入式硬件
源代码•宸5 小时前
GoLang并发简单例子(goroutine + channel + WaitGroup)
开发语言·经验分享·后端·学习·golang