【STM32】STM32单片机入门

在这里插入图片描述
个人主页~

这是一个新的系列,stm32单片机系列,资料都是从网上找的,主要参考江协科技还有正点原子以及csdn博客等资料,以一个一点没有接触过单片机但有一点编程基础的小白视角开始stm32单片机的学习,希望能对也没有学过51直接学32的同学们有一定的作用和帮助
文章内容有很多是自己的理解,希望各位嵌入式大佬们可以看一下文章然后帮忙指正一下错误,感谢!

正片开始


初学stm32单片机

  • 一、准备条件
  • 二、外设
    • 1、GPIO通用输入输出口
    • 2、调试工具
    • 3、EXTI外部中断
      • AFIO复用输入输出口
    • 4、TIM定时器
    • 5、USART串口
    • 6、I2C通信
    • 7、SPI通信
    • 8、RTC实时时钟
  • 三、创建工程
  • 四、分析系统结构
  • 五、引脚定义
  • 六、启动配置
  • 七、最小系统电路

一、准备条件

直接在B站上搜索stm32江协科技,在那里下载安装包,按照2-1和2-2的步骤下载好安装好需要的配件:Keil5MDK以及F1单片机资源,新建好一个工程

啰嗦的我就不再叙述了,这款芯片使用的是STM32F1
内核为ARM Cortex-M3
主频为72MHz
随机存取存储器RAM大小为20K,实际存储介质为SRAM
只读存储器ROM大小为64K,实际存储介质为Flash
标准3.3V供电

SRAM和Flash的位置:
在这里插入图片描述
这张图下面再分解

二、外设

在江协科技的PPT中,up为我们整理了整个芯片所有的外设,但有些外设用的比较少,有句话叫做20%的外设可以应用到80%的场景下,所以作为入门博客,我会把常用的外设罗列清楚,不太用的就不再介绍了

每个单片机都要用到的一个外设就是RCC,它负责控制系统时钟和复位相关功能,只要MCU想要驱动程序,必须由RCC来设置初始化时钟,因为静息状态下硬件为了节省功耗是不工作的

除了RCC以外,最常用的就是以下八个外设:

1、GPIO通用输入输出口

单片机芯片引脚大多数都是GPIO口,用来输入和输出,根据引脚的数量分为GPIOA、GPIOB、GPIOC等,GPIOA又分为GPIOA0到GPIOA15,简写问PA0到PA15,16个引脚

GPIO有四种输入模式四种输出模式
输入模式:浮空输入、上拉输入、下拉输入、模拟输入
输出模式:开漏输出、推挽输出、复用开漏输出、复用推挽输出

其中输出模式全部为数字输出,输入模式仅模拟输入为模拟输入,其他都为数字输入

引脚定义图:
在这里插入图片描述
可以看到大多数的引脚都为GPIO通用输入输出口

2、调试工具

这一章主要讲怎么调试,有三种调试方式:
(1)串口调试,通过串口通信,电脑使用串口助手显示调试信息
(2)显示屏调试,也就是使用OLED屏调试
(3)Keil调试,也就是使用开发软件进行调试

这里我在学习的过程中不知道串口是什么,在网上搜了一下得出的答案是:多用途的接口,它允许计算机和外部设备之间的数据传输

这里我们更加推荐显示屏调试以及Keil调试,显示屏调试时最简单的,对于学过C语言的同学而言使用Keil软件进行调试应该是比较容易上手的

在这里插入图片描述

3、EXTI外部中断

中断是在主程序的运行过程中,出现了特定的中断触发条件(也就是中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后返回原来的位置继续执行程序

当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急选择相应更加紧急的中断源,更紧急的中断源优先级更高,我们可以通过编写程序的方式决定中断源优先级

当一个中断程序正在运行时,优先级更高的中断源申请中断,那么当前程序中断,先执行优先级更高的中断程序

AFIO复用输入输出口

AFIO主要用于引脚复用功能的选择和重定义
它主要完成两个任务:复用功能引脚重映射、中断引脚选择

4、TIM定时器

TIM就是timer,定时器的简写,可以对输入的时钟进行计数,并且在计数值达到设定值时触发中断

时钟:一个周期性的信号,用于为定时器提供一个稳定的、可测量的时间基准。这个时钟信号可以是STM32内部生成的,也可以是外部提供的

根据复杂度和应用场景定时器分为高级定时器、通用定时器、基本定时器三种类型

5、USART串口

USART是一种全双工通用同步(异步)串行收发模块,用于实现数据在微控制器与外部设备之间的串行通信,它支持同步和异步操作,能够独立地进行数据的接收和发送

6、I2C通信

I2C是一种双向、二线制、串行总线标准,用于连接低速外围设备
I2C总线由两根信号线组成,分别是时钟线(由主机设备控制,用于同步数据传输的时钟信号)和数据线(用于在主机和从机之间传输数据)

7、SPI通信

SPI通信以主从方式工作,即一个主机和一个或多个从机之间的通信
SPI也支持全双工通信,主设备和从设备可以同时发送和接收数据

8、RTC实时时钟

RTC模块的工作原理基于一个32位的计数器,该计数器以固定的时间间隔(通常为1秒)递增。当计数器溢出时,会产生一个中断或触发其他事件。在STM32中,RTC模块通常与电源管理模块和备份寄存器配合使用,以实现断电保护和数据恢复功能

三、创建工程

根据视频的步骤安装好后大约就是这样的效果:

在这里插入图片描述

四、分析系统结构

在这里插入图片描述
这里的系统结构视频中应该已经分析的挺清楚了,但是我第一遍听的时候也是没有听懂,所以搁这里做一个复盘

左上角的Cortex-M3是MCU,引出三根总线,通过ICode总线连接Flash接口,加载程序指令;DCode数据总线也连接Flash,加载数据;System系统总线,连接比如SRAM,存储运行时的变量数据,还有FSMC,FSMC是外接存储,不为我们所要梳理的内容

AHB系统总线用于挂载主要外设,意思是先进高性能总线,挂载着RCC和SDIO,SDIO用于连接外接SD卡,不为我们所要梳理的内容
通过桥接1和桥接2分别接到APB2和APB1两个外设总线上,APB用于连接一般的外设,APB2一般连接外设中比较重要的部分,APB1主要连接外设中稍微不重要的部分

由于MCU主要进行一些重要的工作,某些简单的工作我们不准备使用MCU来进行了,这里给MCU配备了DMA,用来处理一些很简单的程序,比如数据的挪用等简单但是要反复作用的事情,它通过DMA总线连接到总线矩阵上,它与MCU一样有总线的控制权,用于访问外设,当需要搬运数据等的操作时,外设会通过请求线向DMA发出请求,然后DMA就会获得总线控制权,进行操作

五、引脚定义

在这里插入图片描述
这份材料是由江协科技up整理出来的,对初学者是友好的,因为一上来就看手册很容易被劝退,stm32的手册又长又多,看起来是很难受的,这里简单梳理一下引脚的作用

类型S代表电源,I代表输入,O代表输出,I/O代表输入输出,I/O口电平代表I/O口所能容忍的电压,FT的为5V,其他为3.3V

主功能就是默认功能,配置I/O口的时候可以选择是通用I/O口还是默认复用功能,连接到对应外设的话可以调整为默认复用功能,如果同一个I/O口的两种复用功能我都需要用,在其他引脚有该重定义功能以及没有连接的时候可以连接后将该口配置为重定义功能

1号引脚VBAT是一个备用电源,可以接电池,系统电源断电时,电池可以给RTC和备份寄存器提供电源

2号引脚有三个功能,分别是普通I/O口、侵入检测、RTC时钟

3、4号引脚是I/O口或者接32.768KHz的RTC晶振

5、6号引脚接系统的主晶振,一般为8MHz,通过特殊电路产生72MHz的频率作为系统的主时钟

7号引脚NRST是系统复位引脚,N代表是低电平复位的

8、9号引脚是内部模拟部分的电源,VSS负极接GND,VDD正极接3.3V

10 ~ 19、21 ~ 22号、25 ~ 33号、41 ~ 43号、45 ~ 46号引脚都是I/O口,PA0有wake up的功能,可以用于唤醒处于待机模式的STM32

20号引脚是I/O口或者BOOT1引脚,BOOT1引脚用来配置启动模式

44号引脚是BOOT0引脚,BOOT0引脚用来配置启动模式

STM32采用分区供电的方式,供电口多
23 、24、35、36、47、48号引脚VSS_n和VDD_n是系统的主电源口

37 ~ 40号都是默认主功能都是调试端口,用来调试和下载程序,支持SWD和JTAG两种调试方式,SWD两根线:34号SWDIO和37号SWCLK
JTAG五根线:34号JTMS、37号JTCK、38号JTDI、39号JTDO、40号NJTRST

这里我们说的多少号引脚有什么样的作用不是每个板子的该号引脚就是这样的作用,作用是要看它的功能的

六、启动配置

在STM32中,可以通过配置BOOT0和BOOT1引脚来配置三种不同的启动模式
当BOOT0引脚接地时,这时不论BOOT1接地还是接3.3V,启动模式都是主闪存存储器模式,也就是使用Flash
当BOOT0引脚接3.3V,BOOT1引脚接地,启动模式就是系统存储器,可以用于串口下载程序
当BOOT0引脚和BOOT1引脚同时接3.3V,启动模式就是内置的SRAM

BOOT引脚是在通电的一瞬间有效的,过了这段时间就会变为普通引脚

七、最小系统电路

从左到右,从上到下依次是复位电路,BOOT配置电路、电源指示灯以及I/O口测试灯、下载电路、稳压芯片、引脚排针,芯片、USB接口、晶振电路、滤波电容

通过这些小电路引脚的名称确定它们所要接到的位置,除了直接看它的结构,也可以通过引脚名称来获取它的功能,只要清除引脚的作用就可以了
在这里插入图片描述


分享到这里~

在这里插入图片描述

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

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

相关文章

昇思25天学习打卡营第3天|基础知识-数据集Dataset

目录 环境 环境 导包 数据集加载 数据集迭代 数据集常用操作 shuffle map batch 自定义数据集 可随机访问数据集 可迭代数据集 生成器 MindSpore提供基于Pipeline的数据引擎,通过数据集(Dataset)和数据变换(Transfor…

Kylin 入门教程

Apache Kylin 是一个开源的分布式数据仓库和 OLAP(在线分析处理)引擎,旨在提供亚秒级查询响应时间,即使在处理超大规模数据集时也是如此。Kylin 可以有效地将原始数据预计算为多维数据立方体(Cube),并利用这些预计算结果来提供快速查询。本文将带你从基础知识到操作实践…

构建大规模账号池与本地部署:GitHub爬虫项目详解

账号池搭建 必要性 常见登录方式: 基于Session Cookie的登录基于JWT的登录:登录生成JWT字符串 账号池存储cookie或者JWT字符串 方便后续发请求爬取数据 本地部署 conda建立一个虚拟环境 conda create -n new_env python3.x # 替换 x 为你需要的 P…

p28 vs环境-C语言实用调试技巧

int main() { int i0; for(i0;i<100;i) { printf("%d",i); } } 1.Debug 和Release的介绍 Debug通常称为调试版本&#xff0c;它包含调试信息&#xff0c;并且不做任何优化&#xff0c;便于程序员调试程序。 Release称为发布版本&#x…

MySQL数据库的DQL的高级数据查询语句

目录 非等值联查&#xff1a; 等值联查&#xff1a; eg&#xff1a;5张表联查 连接查询——left/right/inner join on eg: 连接查询——union Eg&#xff1a; 不去重的并集——union all 子查询&#xff08;内部查询&#xff09; 1、where型子查询 2、from型子查询&a…

Linux下git入门操作

0.创建仓库 可以按这个配置来&#xff0c;.gitignore中存放了上传时忽略的文件类型后缀。 1.clone仓库 在gitee上创建好仓库&#xff0c;点击克隆/下载&#xff0c; 复制地址fyehong/Linux_notes 。 在所需的文件夹中放置仓库。比如我在文件夹lesson9下存储仓库。就在less…

实验2-2-5 将x的平方赋值给y

#include <stdio.h> #include <math.h> int main(){int x3,y;printf("%d%d*%d\n",x*x,x,x);printf("%d*%d%d\n",x,x,x*x); }

【BUG】已解决:ERROR: Failed building wheel for jupyter-nbextensions-configurator

ERROR: Failed building wheel for jupyter-nbextensions-configurator 目录 ERROR: Failed building wheel for jupyter-nbextensions-configurator 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我…

华为诺亚发布无限上下文大模型,超越SoTA 4.3%

你的大语言模型是不是也患上了"长文健忘症"&#xff1f;当使用大模型遇到长上下文时总是会出现词不达意&#xff1f;别担心&#xff0c;LLM界的"记忆大师"来啦&#xff01;华为诺亚方舟实验室最新推出的EM-LLM模型&#xff0c;就像是给大模型装上了"超…

linux系统进程占cpu 100%解决步骤

1.查找进程 ps aux 查看指定进程: ps aux | grep process_name2.根据进程查找对应的主进程 pstree -p | grep process_name 3.查看主进程目录并删除 ps -axu | grep process_name rm -rf /usr/bin/2cbbb

数据库实验:SQL Server基本表单表查询

一、实验目的&#xff1a; 1、掌握使用SQL语法实现单表查询 二、实验内容&#xff1a; 1. 查询订购日期为2001年5月22日的订单情况。&#xff08;Orders&#xff09;&#xff08;时间日期的表达方式为 dOrderDate ‘2001-5-22’&#xff0c;类似字符串&#xff0c;使用单引号…

音视频入门基础:PCM专题(3)——使用Audacity工具分析PCM音频文件

音视频入门基础&#xff1a;PCM专题系列文章&#xff1a; 音视频入门基础&#xff1a;PCM专题&#xff08;1&#xff09;——使用FFmpeg命令生成PCM音频文件并播放 音视频入门基础&#xff1a;PCM专题&#xff08;2&#xff09;——使用Qt播放PCM音频文件 音视频入门基础&am…

从0开始搭建vue + flask 旅游景点数据分析系统(一):创建前端项目

根据前面的爬虫课程&#xff0c;我们重新开一个坑&#xff0c;就是基于爬取到的数据&#xff0c;搭建一个vueflask的前后端分离的数据分析系统 1 通过这个系列教程可以学习到什么&#xff1f; 从0开始搭建一个 vue flask 的数据分析系统&#xff1b;了解系统的整体架构&…

19.延迟队列优化

问题 前面所讲的延迟队列有一个不足之处&#xff0c;比如现在有一个需求需要延迟半个小时的消息&#xff0c;那么就只有添加一个新的队列。那就意味着&#xff0c;每新增一个不同时间需求&#xff0c;就会新创建一个队列。 解决方案 应该讲消息的时间不要跟队列绑定&#xf…

AI绘画入门实践 | Midjourney:使用 --chaos 给图像风格来点惊喜

在 Midjourney 中&#xff0c;--chaos 影响初始图像网格的多样性&#xff0c;指 MJ 每次出的4张图之间的差异性。 默认值为0&#xff0c;值越高&#xff0c;差异性越大。 使用格式&#xff1a;--chaos 0-100的整数值 使用演示 a lot of flowers --chaos 0 --v 6.0a lot of fl…

AOP~面向切面编程介绍

AOP基础 概述 AOP&#xff1a;Aspect Oriented Programming&#xff08;面向切面编程、面向方面编程&#xff09;&#xff0c;面向特定方法的编程。 动态代理是面向切面编程最主流的实现。 SpringAOP是Spring框架的高级技术&#xff0c;旨在管理bean对象的过程中&#xff0c…

C# datetimePicker

1. 直接把控件拉到设计器中&#xff0c;此时不要调整控件的values属性&#xff0c;这样就可以 打开后每次默认显示当天日期。 2. 属性Format long长日期格式默认值short短日期格式Time时间格式custom自定义时间格式在customFormat这个属性设置&#xff0c;比如yyyy-MM-dd HH…

golang 文件

golang 文件 概念 文件是计算机系统中用于存储和管理的 数据集合&#xff0c;具有唯一的名称&#xff0c;存在于存储介质上&#xff0c;包含创建、修改等属性&#xff0c;通过文件系统进行组织&#xff0c;用户可进行读取、写入等操作 文件流 文件输入流&#xff08;InputS…

Redis底层数据结构的实现

文章目录 1、Redis数据结构1.1 动态字符串1.2 intset1.3 Dict1.4 ZipList1.5 ZipList的连锁更新问题1.6 QuickList1.7 SkipList1.8 RedisObject 2、五种数据类型2.1 String2.2 List2.3 Set2.4 ZSET2.5 Hash 1、Redis数据结构 1.1 动态字符串 Redis中保存的Key是字符串&#xf…

漏洞复现-F6-11泛微-E-Cology-SQL

本文来自无问社区&#xff0c;更多漏洞信息可前往查看http://www.wwlib.cn/index.php/artread/artid/15575.html 0x01 产品简介 泛微协同管理应用平台e-cology是一套企业级大型协同管理平台 0x02 漏洞概述 该漏洞是由于泛微e-cology未对用户的输入进行有效的过滤&#xff0…