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

原理介绍

原理介绍详见:

【STM32】江科大STM32学习笔记汇总(已完结)_stm32江科大笔记-CSDN博客icon-default.png?t=N7T8https://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博客icon-default.png?t=N7T8https://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
 }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/660042.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

gitlab 创建 ssh 和 token

文章目录 一、创建ssh key二、将密钥内容复制到gitlab三、创建token 一、创建ssh key 打开控制台cmd,执行命令 ssh-keygen -t rsa -C xxxxx xxxxx是你自己的邮箱 C:\Users\xx\.ssh 目录下会创建一个名为id_rsa.pub的文件,用记事本打开,并…

css-calc动态计算属性值无效

1.calc计算 可以使用css属性动态适应盒子的宽高,适用于布局中左侧固定宽或高,右侧宽度适应;右侧宽度等于calc(100vw - rightWidth); 2.属性值无效 3.解决 width: calc(100vw - 360px); 减号左右需要空格

通过AWR结合SQLHC对性能变低的SQL进行分析的过程

ESTDB数据库2020/4/29下午16点附近出现业务卡顿现象。 可以发现问题SQL为(SQL_ID fr0nhywcycrsa)。占问题时段数据库资源消耗的52.69%,通过对此SQL语句的执行效率进行分析,我们发现: 对SQL_ID fr0nhywcycrsa?进行分析,可以发现此…

如何解决 YUM源GPG密钥缺失:Public key for 猫头虎.rpm is not installed

如何解决 YUM源GPG密钥缺失:Public key for 猫头虎.rpm is not installed 博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝…

如何培养元技能?

如何培养元技能? 一、引言 在当今社会,仅仅依靠某一专业技能是远远不够的。我们需要拓宽自己的能力和视野,从而更好地应对日新月异的社会发展和工作需求。在这个过程中,培养元技能变得至关重要。元技能不仅有助于我们在各个领域中…

Facebook的魅力:数字时代的社交热点

在当今数字化时代,社交媒体已经成为人们日常生活中不可或缺的一部分,而Facebook作为其中的巨头,一直以其独特的魅力吸引着全球数十亿用户。本文将深入探讨Facebook的魅力所在,以及它在数字时代的社交热点。 1. 社交网络的霸主&…

【Java SE】超详细讲解String类

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. 初步认识String2. String类的常用方法2.1 字符串构造2.2 String对象比较2.2.1 比较是否引用同一个对象2.2…

乐鑫ESP串口驱动安装,安装cp210x驱动

windows11安装cp210x驱动: 1:第一步官网下载驱动: 官网地址如下: CP210x USB to UART Bridge VCP Drivers - Silicon Labs 第二步:解压文件夹并安装如图所示: 3:第三步安装成功后会给你个提示…

java后端框架-MyBatis

一、概述 1、起源 MyBatis本是Apache下的开源项目,名为iBatis,2010年转投谷歌,从iBatis3.x开始更名为MyBatis 2、优点 (1)优秀的数据持久层框架(对jdbc做了轻量级封装) 3、特点 (1)对jdbc中接口进行封装的同时还提供了一些自己的类实现…

怎么看qq注册时间?你的qq生日居然是这样查看的!

QQ账号就像是一个穿越时空的日记本,每一个聊天记录、每一条动态都是时间的印记。而QQ注册时间,便是这本日记本的开篇第一章,它见证了你的网络生活的起点。怎么看qq注册时间呢?别着急,接下来我将为你揭晓答案。 操作环境…

MATLAB分类与判别模型算法:基于Fisher算法的分类程序【含Matlab源码 MX_002期】

算法思路介绍: 费舍尔线性判别分析(Fishers Linear Discriminant Analysis,简称 LDA),用于将两个类别的数据点进行二分类。以下是代码的整体思路: 生成数据: 使用 randn 函数生成随机数&#x…

11. Django 常用的Web应用程序

11. 常用的Web应用程序 Django为开发者提供了常见的Web应用程序, 如会话控制, 缓存机制, CSRF防护, 消息框架, 分页功能, 国际化和本地化, 单元测试和自定义中间件. 内置的Web应用程序大大优化了网站性能, 并且完善了安全防护机制, 同时也提高了开发者的开发效率.11.1 会话控制…

IO系列(九) -什么是零拷贝

一、摘要 相信不少的网友,在很多的博客文章里面,已经见到过零拷贝这个词,会不禁的发出一些疑问,什么是零拷贝? 从字面上我们很容易理解出,零拷贝包含两个意思: 拷贝:就是指数据从…

宠物空气净化器:猫毛过敏者的终极解决方案,养猫不再是梦!

我有一位朋友,猫猫的深度爱好者。但是每当与猫咪接触的时候就会出现过敏反应,例如浑身发痒、打喷嚏、呼吸困难、起红疹等。对此,有专家给出权威的解释:引发铲屎官过敏的“罪魁祸首”是一种叫做Feld1的蛋白质成分,而这种…

性能击败99%PC用户,旗舰性能CPU 13700KF +技嘉Z790 + 德静界 机散装机配置思路分享

性能击败99%PC用户,旗舰性能CPU 13700KF 技嘉Z790 德静界 机散装机配置思路分享 又到了一年一度的618年中促销,今年的618比往年要来的更早。 很多人已经感受到,5月各大电脑相关配件都开始了今年的促销让利。 凑此机会,我又装了…

IT学习笔记--Kubernetes

kubernetes组件: 一个Kubernetes集群主要是由控制节点(master)、工作节点(node)构成,每个节点都会安装不同的组件。 master:集群的控制平面,负责集群的决策 ApiServer&#xff1a…

蓝桥杯物联网竞赛_STM32L071KBU6_对于EEPROM的新理解

EEPROM写函数: void Function_GetEepromData(){Function_EepromRead(4, BUFF);OLED_ShowChar(0, 0, BUFF[0] 0);OLED_ShowChar(0, 2, BUFF[1] 0); BUFF[0] ;BUFF[1] ;HAL_FLASHEx_DATAEEPROM_Unlock();HAL_FLASHEx_DATAEEPROM_Program(FLASH_TYPEPROGRAMDATA_WOR…

项目经理催开发进度的5大技巧

项目经理在催促开发进度时,采用的技巧对于项目成功至关重要。这不仅影响到项目的按时完成,还关系到团队的士气、效率和最终产品的质量。项目经理如果不去主动催促开发进度,可能导致项目延期,团队偏离原定路线,工作重点…

用于脑肿瘤分割的跨模态深度特征学习| 文献速递-深度学习肿瘤自动分割

Title 题目 Cross-modality deep feature learning for brain tumor segmentation 用于脑肿瘤分割的跨模态深度特征学习 01 文献速递介绍 作为最致命的流行病,脑肿瘤的研究越来越受到关注。本文研究了一种基于深度学习的自动分割胶质瘤的方法,称为脑…

java版CRM客户关系管理系统源码-CRM客户关系管理系统的技术架构与功能实现

CRM客户关系管理系统的技术架构与功能实现 一、引言 随着市场竞争的日益激烈,客户关系管理(CRM)已成为企业赢得市场、提升客户满意度、促 进业务增长的关键手段。本文旨在介绍一款先进的CRM客户关系管理系统的技术架构与功能实现&#xff0…