小白跟做江科大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
 }
}

5.最终效果

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CC2530-操作外部flash】

zigbee cc2530操作flash,以cc2530读flash_id为例子; void InitIO() {CLKCONCMD & ~0x40; //设置系统时钟源为32MHZ晶振 while(CLKCONSTA & 0x40); //等待晶振稳定为32M CLKCONCMD & ~0x47; //设置系统主时钟频率为32MHZ…

面试(五)

目录 1. 知道大顶堆小顶端吗,代码怎么区分大顶端小顶端 2. 计算机中栈地址与内存地址增长方向相反吗? 3. %p和%d输出指针地址 4. 为什么定义第二个变量时候,地址反而减了 5. 12,32,64位中数据的占字节?…

物质的量质量,它们可不是一个概念

物质的量&质量,它们可不是一个概念。 物质的量&质量 乍一听物质的量,还以为是和质量有什么关系,是不是?其实物质的量和质量没什么直接的联系。 物质的量是国际单位制中7个基本物理量之一,其符号为n&#xf…

Aras Innovator-Team(群组)的使用方法

当Aras Innovator在处理权限时,在不使用Team的情况下,系统的权限配置可以满足大部分业务场景,如:常见的按照组织架构,成员和角色分配权限,按照生命周期分配权限等。 如果遇到比较复杂的权限需求&#xff0c…

AltiumDesigner/AD添加数据库连接

1.首先确保本机电脑有无对应的数据库驱动,例如我这边要添加MySQL的数据,则需要首先下载MySQL数据驱动:MySQL :: Download MySQL Connector/ODBC (Archived Versions) 2.运行“odbcad32.exe”,如下图添加对应的数据库配置&#xf…

【C/C++】C/C++车辆交通违章管理系统(源码+数据文件)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

面试题:useEffect的Clean Up 什么时候触发?

​ useEffect作为做常用的Hook,以下三个知识点你有必要了解下~ 防止写出奇怪的代码祸害队友,而我不幸就是这个受害者!!!!! useEffect的依赖项为空 useEffect的dependencyList作为一个可选参数…

Pytest框架中用例用例执行常用参数介绍

pytest 支持通过命令行参数来定制测试运行的方式。以下是一些常用的 pytest 执行参数介绍。 学习目录 -q 或 --quiet: 安静模式,只显示进度和摘要 -s : 选项允许在测试的输出中捕获 stdout 和 stderr。 -v : 选项会使 pytest 的输出更加详细。 -k :…

Git 恢复已删除的branch

六一节晚上改了点code, 做完之后commit, 然后误删了这个branch, 并且新建了branch. 那么怎样恢复已删除的branch呢? 网上查询一番,找到了答案: 1. git reflog 找到被删的branch中最后一笔commit, 记录它的SHA1。 怎么看SHA1是被删除的bra…

鸿蒙应用Stage模型【应用/组件级配置】

应用/组件级配置 在开发应用时,需要配置应用的一些标签,例如应用的包名、图标等标识特征的属性。本文描述了在开发应用需要配置的一些关键标签。 应用包名配置 应用需要在工程的AppScope目录下的[app.json5配置文件]中配置bundleName标签,…

Python PyInstaller打包方法介绍

为了将开发好的Python工具交付给其他人使用,除了在目标电脑部署Python编译环境以外,我们还可以将它打包成可执行文件,这样目标电脑不需要安装Python环境就可以运行。将Python程序打包成可执行文件的方法有多种,比如Nuitka、PyInst…

微博增强-tampermonkey脚本实现网页管理悄悄关注

不是很明白微博为什么不出个x的列表功能,毕竟现在信息洪流,有些东西只是要看要了解,但不希望天天在首页轰炸眼睛,扰乱心智。 这个tampermonkey脚本适配了pc web和手机pwa版本(weibo.com/m.weibo.cn),解决了…

golang map部分原理源码个人走读-附个人理解过程图解

近期再写map的demo时出现了下面一段报错,于是带着疑惑去看了一下源码 目的:主要想知道为啥map不让并发读写 fatal error: concurrent map read and map write 一.map的数据结构 先有个印象,后续会详细介绍 // A header for a Go map. ty…

NDIS Filter开发-OID 请求

NDIS 定义对象标识符 (OID) 值来标识适配器参数,其中包括操作参数,例如设备特征、可配置的设置和统计信息。 Filter驱动程序可以查询或设置基础驱动程序的操作参数,或过滤/覆盖顶层驱动程序的 OID 请求。 NDIS 还为 NDIS 6.1 及更高版本的Fi…

Informer

I n f o r m e r Informer Informer 摘要: 长序列时间序列的预测 i n f o r m e r informer informer优点: P r o b s p a r e Probspare Probspare自关注机制,在时间复杂度和内存使用方面达到 O ( N l o g N ) O(NlogN) O(NlogN),在序列依…

IP协议1.0

基本概念: • 主机: 配有IP地址, 但是不进⾏路由控制的设备; • 路由器: 即配有IP地址, ⼜能进⾏路由控制; • 节点: 主机和路由器的统称; IP协议的报头 • 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4. • 4位头部⻓度(header length): IP头部的⻓…

mybatis增删改查模板设置及设置调用

mybatis增删改查模板设置 系统配置文件完成以及连接好数据之后,就可以用这个mybatis了,首先写这个数据库的增删改查模板StashMapper.xml,这个东西是要放在DAO层中的奥,切记。 1.编写mybatis对应数据库的增删改查模板 在我的Sta…

DKTCDR:Domain-Oriented Knowledge Transfer for Cross-Domain Recommendation

Domain-Oriented Knowledge Transfer for Cross-Domain Recommendation IEEE(CCF B.SCI 1)-Guoshuai Zhao, Xiaolong Zhang, Hao Tang, Jialie Shen, and Xueming Qian-2024 思路 在CDR中,构建连接两个域的桥梁是实现跨域推荐的基础。然而现在的CDR方法往往在连接两个域时忽…

软件测试进阶

目录 一、自动化测试 1.概念 2.Selenium 2.1 概念 2.1.1 Selenium是什么? 2.1.2 Selenium特点 2.1.3 工作原理 2.2 SeleniumJava环境搭配 2.3 定位元素 2.3.1 CSS语法 2.3.2 XPath语法 2.4 应用 2.4.1 点击提交文本 2.4.2 模拟输入 2.4.3 清除文本 2…

统信UOS桌面操作系统1070上使用notepad--文本编辑器

原文链接:统信UOS桌面操作系统1070上使用notepad–文本编辑器 Hello,大家好啊!今天我要向大家推荐一款在统信UOS桌面操作系统1070上非常好用的文本编辑器软件——“notepad–”。这款软件功能强大、操作简便,特别适合开发人员和日…