这是一个新的系列,stm32单片机系列,资料都是从网上找的,主要参考江协科技还有正点原子以及csdn博客等资料,以一个一点没有接触过单片机但有一点编程基础的小白视角开始stm32单片机的学习,希望能对也没有学过51直接学32的同学们有一定的作用和帮助 文章内容有很多是自己的理解,希望各位嵌入式大佬们可以看一下文章然后帮忙指正一下错误,感谢!
正片开始
一、准备条件
直接在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接口、晶振电路、滤波电容
通过这些小电路引脚的名称确定它们所要接到的位置,除了直接看它的结构,也可以通过引脚名称来获取它的功能,只要清除引脚的作用就可以了
分享到这里~