【STM32】STM32单片机入门

news2024/9/19 14:26:15

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

这是一个新的系列,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.coloradmin.cn/o/1966232.html

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

相关文章

深度学习图像处理环境搭建

Anaconda安装 Anaconda介绍 Anaconda是一个用于科学计算和数据科学的开源发行版,它包含了许多流行的Python库和工具,旨在简化数据分析和机器学习任务的开发过程。Anaconda提供了一个集成的开发环境,包括Python解释器、包管理工具&#xff0…

打造安全自养号测评系统:亚马逊卖家必备的防关联技术

在搭建一个稳定的测评自养号系统过程中,账号的管理、底层环境、IP纯净度与维护确实是核心中的关键一环。以下几点是构建和运营高效、安全、稳定测评系统时必须重点考虑的因素: 1稳定的网络环境: 使用独立、纯净且未被标记的国外IP地址&…

【Python】趣味游戏编程练习记录

最近在阅读童晶写的《Python游戏趣味编程》,边学边记录吧,蛮有意思。 一、学习要点 1.安装游戏开发库pgzero pip install pgzero 2.导入游戏开发库及基础绘图操作 import pgzrun #导入游戏开发库 def draw(): #定义绘图函数screen.fill(white)#屏幕…

day14 Java基础——三元运算符(条件运算符)及小结

day14 Java基础——三元运算符(条件运算符)及小结 1.条件运算符(偷懒) package operator;public class Demo10 {public static void main(String[] args) {//x ? y : z//如果xtrue,则结果为y,否则结果为zint score …

vscode中使用 cmake 配置MSVC 编译C++代码, output输出日志存在中文乱码问题,排查

更改控制面板的时钟区域设置会导致2022版本的msvc编译不过出现bug-(无法解决问题) 通过打开setting解密搜索cmake,更改Cmake:Output Log Encoding(已解决) 乱码输出 解决乱码

15.4 zookeeper java client之Curator使用(❤❤❤❤❤)

Curator使用 1. 为什么使用Curator对比Zookeeper原生2. 集成Curator2.1 依赖引入curator-frameworkcurator-recipes2.2 `yml`配置连接信息2.3 CuratorConfig配置类2.4 业务:可重入锁和不可重入锁2.4.1 可重入锁和不可重入锁2.4.2 InterProcessMutex 可重入锁的使用2.4.3 InterP…

React——配置环境、ES6语法补充、Components

文章目录 架构设计前置知识DOM树 配置环境安装 create-react-app安装两个插件创建安装 nodejs仍然无法创建 下次需要创建新项目就使用这三行命令安装 bootstrap使用 bootstrap 包画图追求写 jsx短路原则绑定函数快捷键修改变量名箭头函数简写删除无用的文件写组件调用组件使用 …

办公必备!一键把PDF转换为PPT文件,只需这3款神器!

在当今数字化办公环境中,文件格式的转换已成为提高工作效率的关键因素之一。其中,PDF(便携式文档格式)和PPT(PowerPoint演示文稿)是两种广泛使用的文件格式。然而,有时我们需要将PDF文件转换为PPT格式,以便进行编辑或演示。 为方…

DaoCloud配置不同环境的流水线(Q)

在DaoCloud自动化部署时,不知道如何分别构建生产,测试环境镜像。 Dockfile文件里有 ARG BUILD_ENV"uat" RUN npm run build:${BUILD_ENV} 这样两行代码来区分环境打包的,ARG是用于指定传递给构建运行时的变量,可是…

windows 环境 Visual Studio 2022 新建 cmake 工程测试 cuda 代码编译

1. 参考博客: 1. 【CUDA】CUDA编译:https://blog.csdn.net/u011285477/article/details/104408296 2. 项目文件夹结构: c_cuda/cuda/CMakeLists.txtfoo.cufoo.cuhCMakeLists.txtmain.cpp3. 完整代码: 1. c_cuda/CMakeLis…

只有IP地址怎么部署HTTPS证书

只有IP地址可以申请部署SSL证书。SSL证书不仅能够通过域名进行申请,还可以通过IP地址进行申请和部署。在两种情况下,SSL证书的主要作用是确保网站或服务器与客户端之间的数据传输安全。以下是对SSL证书的相关介绍: 一、选择证书服务商并注册…

初普,stop,射频美容仪拆机图

初普,stop,射频美容仪拆机图

新手教程——HyperMesh静力学分析步骤

仿真技术的飞速发展,为产品在产前进行风险技术性评估,保证设计质量、提高产品设计水平提供了广阔的舞台。而有限元分析已经成为机械类产品仿真分析的关键手段。通过应用有限元分析,在生产制造前的设计阶段,运用现代技术充分反映设…

vue给数组对象赋值改变对象里面的数据,数据没有更新this.$set

替换数组startTime的值: 原数据 this.serviceTimeList.push({serviceTimeName: 服务时间段,startTime: this.startTime,endTime: this.endTime,currentDateStart: this.currentDate,currentDateEnd: this.currentDate}) this.$set(this.array, index, newValue); …

springboot 基于mybatis plus 整合clickHouse以及mysql (多数据源)

一.服务安装 docker安装clickhouse数据库_docker 安装clickhouse-CSDN博客 使用idea链接clickHouse 执行创建数据库 create database student; -- auto-generated definition create table web_visits (date Date default toDate(datetime),datetime DateTime def…

【Dash】Dash链接 csv/excel 文件

一、Dash如何连接csv数据? There area many ways to add data to an app: APIs, external databases, local .txt files, JSON files, and more. In this example, we will highlight one of the most common ways of incorporating data from a CSV sheet. # Imp…

使用 useState 管理响应式状态

title: 使用 useState 管理响应式状态 date: 2024/8/1 updated: 2024/8/1 author: cmdragon excerpt: 摘要:本文详细介绍了在Nuxt3框架中使用useState进行响应式状态管理的方法,包括其基本概念、优势、使用方法、共享状态实现以及性能优化技巧。useSt…

职业教育大数据实验实训室建设应用案例

大数据作为一种重要的信息技术,对各行各业产生了深远的影响。职业教育作为培养应用型人才的摇篮,建设大数据实验实训室,对于提高学生的数据分析能力和解决实际问题的能力具有重要意义。唯众作为一家专注于教育技术领域的企业,凭借…

职场成功全攻略:从简历到薪资谈判的秘诀分享

进入职场是一场漫长而精彩的旅程,它不仅仅是一份工作,更是个人成长、技能提升和实现价值的过程。本篇博客旨在为正在求职或期望在职场更进一步的您提供全面指导,内容涵盖简历制作、面试准备、薪资谈判、职场规划、技能评估到求职策略等多个方…

非递归的快速排序

其实,我们快速排序还有一种更加快的方法就是不采用递归的方法,那就是非递归,所以这一篇文章我们就研究这个非递归到底怎么实现。 首先,我们先思考一个问题:递归的时候,我们存到栈里面的到底是什么&#xf…