STM32f103入门(1) 配置点亮Led灯

news2024/12/24 3:26:22
  • 1 安装keil5 MDK

    • 双击 MDK524a.EXE
    • 安装成功后管理员模式打开
    • CID复制到破解软件 选择ARM
    • 生成代码复制到New License ID Code
    • Add LIC
    • 破解完毕
      在这里插入图片描述
      在这里插入图片描述
  • 2安装stm32芯片

    • 可找资料自行安装 如下
      在这里插入图片描述
  • 3 创建工程

    • Project->new project 本篇芯片为stm32f103
    • 保存到自定义文件夹下
    • 在根目录下创建以下文件夹用来储存环境文件

配置STM32环境
分别储存在

  • User
  • Library
  • Start
  • System
  1. User(用户文件夹):
    这个文件夹是为了用户自己编写的代码而存在的。在这个文件夹中,用户可以编写自定义的应用程序代码,包括配置外设、处理中断、主程序等。
  1. Library(库文件夹):
    这个文件夹中包含了STM32的标准外设库(Standard Peripheral Library,简称SPL)。SPL是STM32官方提供的库文件,方便用户对各个外设进行配置和操作。库文件包含了许多头文件和源文件,用于提供函数和宏定义,以方便用户使用和控制STM32的各个外设。
  1. Startup(启动文件夹):
    这个文件夹中包含了STM32的启动文件,其中最重要的是启动代码(startup code)。启动代码主要是设置芯片的初始状态和初始化相关的处理,如设置中断向量表、堆栈指针初始化、外设时钟初始化等。启动文件夹也包含一些链接脚本和连接文件,用于指导编译和链接的过程。
  1. 在STM32的头文件中,System文件夹通常包含与系统初始化和底层支持相关的内容。以下是System文件夹中可能包含的内容:
    1.系统启动文件(startup文件):
    System文件夹中可能包含与启动代码相关的文件,用于设置芯片的初始状态和初始化处理。这些文件包括启动代码(startup code)、中断向量表等,并可能包含链接脚本和连接文件。
    2. 系统初始化文件:
    System文件夹中可能包含与系统初始化相关的文件,用于设置芯片的各种时钟配置、中断初始化等。这些文件可能包含有关时钟配置、中断向量表初始化、堆栈初始化等的代码。
    3. 系统配置文件:
    System文件夹中可能包含与系统配置相关的文件,用于设置芯片的默认配置和参数。这些文件可能包含有关系统时钟、外设配置等的宏定义和配置数据。
    4. 系统库文件:
    System文件夹中可能包含与系统底层支持相关的库文件,例如提供底层操作函数和宏定义的库文件。
    请注意,System文件夹的具体内容可能因不同的STM32系列和开发工具链而有所差异。上述列举的内容仅是一般情况下可能存在于System文件夹中的内容。具体的内容可能需要根据实际情况和目标芯片的文档进行确认。
  • 4将路径信息以及组配置到keil
  • 在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    然后就可以在main文件中写代码了
    点亮PA0的led灯

#include "stm32f10x.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_ResetBits(GPIOA,GPIO_Pin_0);
	
	while(1){
			
	}
	
}

1. `RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);`
   这行代码是使用`RCC_APB2PeriphClockCmd`函数打开GPIOA外设的时钟。`RCC_APB2PeriphClockCmd`函数用于使能特定外设的时钟,这里使能的是GPIOA外设的时钟。

2. `GPIO_InitTypeDef GPIO_InitStructure;`
   定义了一个名为`GPIO_InitStructure`的结构体变量`GPIO_InitTypeDef`,用于存储GPIO口的初始化参数。

3. `GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;`
   设置`GPIO_InitStructure`结构体变量的成员`GPIO_Mode`为输出推挽模式。这意味着GPIOA的第0引脚是被配置为输出模式,可以提供高或低电平输出。

4. `GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;`
   设置`GPIO_InitStructure`结构体变量的成员`GPIO_Pin`为GPIO_Pin_0。这表示要配置的GPIO口引脚为GPIOA的第0引脚。

5. `GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;`
   设置`GPIO_InitStructure`结构体变量的成员`GPIO_Speed`为50MHz。这表示GPIOA的输出速率被设置为50MHz,即输出电平的切换速度为50MHz。

6. `GPIO_Init(GPIOA, &GPIO_InitStructure);`
   使用`GPIO_Init`函数将上述配置应用到GPIOA外设。该函数将GPIOA的相关参数和配置信息作为参数传递进去,以完成GPIO口的初始化。

7. `GPIO_ResetBits(GPIOA, GPIO_Pin_0);`
   最后一行代码将GPIOA的第0引脚输出拉低,即设置为逻辑低电平。这样可以确保初始化后,GPIOA的第0引脚输出为低电平状态。

在这里插入图片描述

端口赋值常用函数

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
对指定端口置0

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
对指定端口置1

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
对指定端口置自定义值(BitsVal = Bit_RESET/Bit_SET)

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

//Led闪烁程序
#include "stm32f10x.h"
#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_ResetBits(GPIOA,GPIO_Pin_0);
	
	while(1){
		GPIO_ResetBits(GPIOA,GPIO_Pin_0);
		Delay_ms(500);
		GPIO_SetBits(GPIOA,GPIO_Pin_0);
		Delay_ms(500);
	}
	
}

//开漏输出 
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_OD; //开漏输出 高电平相当于高阻态没有驱动能力
//低电平有驱动能力


//推免输出
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP; //推挽输出均有驱动能力

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

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

相关文章

JavaScript立即执行函数(自执行函数)的3种写法

一、什么是立即执行函数 顾名思义,声明一个函数并马上调用这个函数就叫做立即执行函数;也可以说立即执行函数是一种语法,让你的函数在定义以后立即执行;立即执行函数又叫做自执行函数。 二、立即执行函数的写法 立即执行函数的…

快速排序笔记

一、quick_sort方法中如果 il,jr 会死循环的分析 1、示例代码 void quick_sort(int a[],int l,int r){if(l>r) return;int il,jr; //此处设置会导致死循环int x num[(lr)>>1];while(i<j){while(a[i] <x); //死循环的地方while(a[--j] >x);if(i<j) swap(a…

RabbitMQ---订阅模型-Direct

1、 订阅模型-Direct • 有选择性的接收消息 • 在订阅模式中&#xff0c;生产者发布消息&#xff0c;所有消费者都可以获取所有消息。 • 在路由模式中&#xff0c;我们将添加一个功能 - 我们将只能订阅一部分消息。 例如&#xff0c;我们只能将重要的错误消息引导到日志文件…

网站常见安全漏洞 | 青训营

Powered by:NEFU AB-IN 文章目录 网站常见安全漏洞 | 青训营 网站基本组成及漏洞定义服务端漏洞**SQL注入****命令执行****越权漏洞****SSRF****文件上传漏洞** 客户端漏洞**开放重定向****XSS****CSRF****点击劫持****CORS跨域配置错误****WebSocket** 网站常见安全漏洞 | 青训…

软件架构业务及技术复杂度分析总结

目录 一、综述分析 二、业务复杂性分析 &#xff08;一&#xff09;领域建模 &#xff08;二&#xff09;领域分层 &#xff08;三&#xff09;服务粒度 &#xff08;四&#xff09;流程编排 三、技术复杂性分析 &#xff08;一&#xff09;高可用 底层逻辑 CAP原则 …

Mac OS 13.4.1 搜狗输入法导致的卡顿问题

一、Mac OS 系统版本 搜狗输入法已经更新到最新 二、解决方案 解决方案一 在我的电脑上面需要关闭 VSCode 和 Chrmoe 以后&#xff0c;搜狗输入法回复正常。 解决方案二 强制重启一下搜狗输入法。 可以用 unix 定时任务去隔 2个小时自动 kill 掉一次进程 # kill 掉 mac …

EWM怎么取消pinking,SAP_EWM取消拣配报错处理方式

EWM是SAP的一个模块&#xff0c;代表扩展仓库管理&#xff08;Extended Warehouse Management&#xff09;&#xff0c;是SAP企业资源计划&#xff08;ERP&#xff09;的一部分。它提供了一个完整的、高级的仓库管理解决方案&#xff0c;支持企业在全球范围内的仓库管理、订单管…

QGIS学习1-入门学习

QGIS作为一个广受欢迎的开源GIS&#xff0c;很多GIS的学生都了解过。但是因为学校老师都是教的Arcgis&#xff0c;因此很少去充分的学习。QGIS和arcgis一样&#xff0c;有完整的官方帮助文档&#xff0c;我也是要根据官方的帮助文档进行学习等。 https://www.qgis.org/zh-Hans/…

一文看懂Cat.1、Cat.4、NB-IOT、4G之间的区别

01 什么是Cat.1&#xff1f; Cat.1的全称是LTEUE-Category1&#xff0c;其中UE指的是用户设备&#xff0c;它是LTE网络下用户终端设备的无线性能的分类。根据3GPP的定义&#xff0c;UE类别以1-15分为15个等级。Cat.1&#xff0c;可以称为“低配版”的 4G 终端&#xff0c;上行…

微信小程序发布迭代版本后如何提示用户强制更新新版本

在点击小程序发布的时候选择&#xff0c;升级选项 之前用户使用过的再打开小程序页面就会弹出升级弹窗modal

企业博客搭建:经营好企业博客,能让你的业务蹭蹭上涨!

企业博客本身作为企业产品知识的沉淀&#xff0c;搭建并且经营好企业博客不仅有利于企业文化建设&#xff0c;更可以利用博客来推动业务增长。 何谓企业博客营销&#xff1f;简单地说&#xff0c;就是利用HelpLook这种工具创建并开展网络营销活动&#xff0c;称之为博客营销。 …

Linux学习之nginx虚拟域名主机,lsof和netstat命令查看端口是否被监听

需要先参考我的博客《Linux学习之Ubuntu 20.04在https://openresty.org下载源码安装Openresty 1.19.3.1&#xff0c;使用systemd管理OpenResty服务》安装好Openresty。 虚拟域名可以使用让不同的域名访问到同一台主机。 cd /usr/local/openresty切换当前访问目录到/usr/local/o…

stm32之USART(总结)

串行通信 UART串口内部结构示意图 普中科技的详细介绍 中断知识补充 代码 #ifndef __USART_H #define __USART_H #include "stdio.h" #include "stm32f10x_usart.h" #define USART1_REC_LEN 200 //定义最大接收字节数 200extern u8 USART1_RX_BUF[US…

LeetCode--HOT100题(42)

目录 题目描述&#xff1a;108. 将有序数组转换为二叉搜索树&#xff08;简单&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;108. 将有序数组转换为二叉搜索树&#xff08;简单&#xff09; 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xf…

Linux 应用 Segmentation fault 分析手段

前言 本文主要介绍,在Linux 下应用程序发生Segmentation fault 错误时,如何使用gdb 通过core dump文件查找错误具体发生的地方。 一、生成core dump文件 在板子上执行ulimit -c 或者 ulimit -a 命令查看core 文件大小的配置情况,如下图所示 此时 “ core file size ”大小…

芯讯通SIMCOM A7680C (4G Cat.1)AT指令测试 TCP通信过程

A7680C TCP通信 1、文档准备 去SIMCOM官网找到A7680C的AT指令集 AT指令官网 进入官网有这么多AT指令文件&#xff0c;只需要找到你需要用到的&#xff0c;这里我们用到了HTTP和TCP的&#xff0c;所以下载这两个即可。 2、串口助手 任意准备一个串口助手即可 这里我使用的是XC…

EWM是什么

EWM是SAP的一个模块&#xff0c;代表扩展仓库管理&#xff08;Extended Warehouse Management&#xff09;&#xff0c;是SAP企业资源计划&#xff08;ERP&#xff09;的一部分。它提供了一个完整的、高级的仓库管理解决方案&#xff0c;支持企业在全球范围内的仓库管理、订单管…

python+TensorFlow实现人脸识别智能小程序的项目(包含TensorFlow版本与Pytorch版本)

pythonTensorFlow实现人脸识别智能小程序的项目&#xff08;包含TensorFlow版本与Pytorch版本&#xff09; 一&#xff1a;TensorFlow基础知识内容部分&#xff08;简明扼要&#xff0c;快速适应&#xff09;1、下载Cifar10数据集&#xff0c;并进行解压缩处理2、将Cifar10数据…

STL-常用容器-queue 容器(队列)

1 queue 基本概念 概念&#xff1a;Queue是一种先进先出(First In First Out,FIFO)的数据结构&#xff0c;它有两个出口。 队列容器允许从一端新增元素&#xff0c;从另一端移除元素 队列中只有队头和队尾才可以被外界使用&#xff0c;因此队列不允许有遍历行为 队列中进数据…

macbookpro如何清理系统数据 macbookpro怎么删除软件

Macbook Pro是苹果公司的一款高性能笔记本电脑&#xff0c;它拥有强大的硬件和流畅的操作系统。然而&#xff0c;随着时间的推移&#xff0c;你可能会发现你的Macbook Pro变得越来越慢&#xff0c;储存空间也越来越紧张。这时候&#xff0c;你需要对你的Macbook Pro进行一些清理…