STM32单片机初学1-STM32介绍-程序员宅基地

技术标签: stm32  控制器  单片机  

 STM32是意法半导体(STMicroelectronics) 公司推出的新一代基于Cortex-M内核的32位微控制器系列。STM32以其高性能、低功耗、一流的外设、简单易用等特点在近几年迅速发展,占领了很大市场,得到了很多开发者青睐。

        其应用领域包括电机驱动和应用控制,PC游戏外设和GPS平台 ,可编程控制器(PLC)、变频器、打印机和扫描仪等。(除了STM32,意法半导体公司还推出了8位微处理器STM8系列,因其高性价比也有很多开发者在使用。这里暂不介绍STM8系列)watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAI2xpdWZlbmdlcyM=,size_20,color_FFFFFF,t_70,g_se,x_16

        STM32系列成员众多,按其性能可分为入门型(F0系列),基础型(F1系列),增强型(F3系列),高性能型(F4,F7等)。按内核的不同分为Cortex-M0(F0系列),Cortex-M3(F1、F3系列),Cortex-M4(F4系列)等。一般初学者选择F103系列较多,既能满足学习要求,又不至于太贵。

        光凭一句“高性能”可能对其性能还是没有什么概念。下面是一个常见单片机的性能分数对照表,可供参考。

 

 

0142abde7dd84e769bd3db03ae3632ac.png

         对照表最下面的AT89C52就是最典型的51单片机,可以看到其分数只有2.36。而STM32F103的分数达到了177,STM32F407更是达到了566。

        近几年,国产单片机也迅速崛起,在性能上已经不输国外。例如ESP8266、ESP32系列已经获得众多单片机开发者的喜爱,不仅性能强大,而且自带wifi模块。又如对标STM32的GD32系列,其性能也已经不低于STM32,但其学习资源很少。

        很多人都是从51开始学习单片机,大学教材也大都以51单片机为例。STM32相比于51单片机,性能大幅提升,外设也更多,为了方便开发,ST官方专门发布了标准外设库,只要调用外设库里的函数就能轻松使用各种外设,而不需要对寄存器进行直接操作。

        由于STM32功能较强,内部寄存器复杂且多,所以使用起来也相对较麻烦。比如要给某个IO口置高电平,51单片机只要 P0^0=1; 一行程序就能实现,但是STM32首先要调用GPIO的标准外设库,然后进行GPIO初始化并使能对应的时钟,然后才能将GPIO置位(当然也可以直接操作寄存器,不过STM32寄存器太多,使用更不方便)。所以很多51单片机学习者刚开始学习STM32会觉得无从下手,其实只要了解了STM32的库函数,其开发就和51一样简单,而且对于大型的项目开发其优势就体现出来了。学习STM32就是学习其库函数,从官方的库函数使用手册入手,学习起来还是很简单的。

        STM32型号很多,所以有着规范的命名规则,从其型号便可知道其部分参数,如产品类型,Flash容量,封装。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAI2xpdWZlbmdlcyM=,size_20,color_FFFFFF,t_70,g_se,x_16

 本文将以STM32F103C8T6这款单片机为例来介绍STM32。

        从命名规则可以知道,STM32F103C8T6是STM32基础型单片机,采用LQFP 48 封装,带有64KB的Flash(闪存程序存储器)。其最高工作频率72MHz,20KB的SRAM,2个12位ADC(模数转换器),7通道DMA控制器并支持定时器、ADC、SPI、IIC等,带有7个定时器,多达9个通信接口(2个IIC、3个USART、2个SPI、CAN接口、USB2.0)。下图是其引脚图。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAI2xpdWZlbmdlcyM=,size_20,color_FFFFFF,t_70,g_se,x_16

 由于引脚有限,很多IO口都是功能复用,下图是其IO功能复用情况。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAI2xpdWZlbmdlcyM=,size_20,color_FFFFFF,t_70,g_se,x_16

 

-----------------------------------------------------------

接下来详细介绍各个外设

1.GPIO

        GPIO即通用输入输出口,也就是我们常说的IO口。这款单片机有PA(PA0-PA15)、PB(PB0-PB15)、PC 3组IO(PC13-PC15),类似于STC89C52的P0、P1、P2口,A与B组每组16个,但C组只有3个。GPIO的排列分布不像51单片机那么规则,其实是考虑到开发者需要扩展IO时减少电路图的更改。有些GPIO默认是不做普通IO口的,例如PB4、PB3默认是作为JTAG使用,PC14、PC15默认作为RTC的晶振接口,如需作为普通IO口使用,则需要将对应复用功能屏蔽。

关于GPIO的具体使用可参考文章《STM32-GPIO详解》。

2.ADC

        这款单片机有两个12位的ADC(PB0:ADC_IN8、PB1:ADC_IN9),用以将0-3.3V的电压模拟量转成数字量(0-2^12)。每个ADC共用多达16个外部通道, 可以实现单次或扫描转换。在扫描模式下,自动进行在选定的一组模拟输入上的转换。需要注意的是,ADC的电源是独立于供电电源的,其供电引脚为VSS-A与VDD-A,一般可以将这两个引脚直接与3.3V电源相连。包括其他的几组VDD和VSS,直接与3.3V电源连接即可(之所以分几个电源,是为了提高供电稳定性)。

3.晶振

        从上面的引脚图可以看出,STM32可以外接两个晶振。其中8M晶振就是单片机CPU运行用的,虽然晶振频率只有8M,但其内部频率最高可以达到72MHz,这得益于其内部的分频器,将8M震荡频率经二分频就得到了16M,经过多次分频就能得到更高的频率。

下图是其时钟树示意图。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAI2xpdWZlbmdlcyM=,size_20,color_FFFFFF,t_70,g_se,x_16

        另外一个32.768kHz的低频晶振是用于内部RTC时钟。STM32自带RTC时钟,类似于手机、电脑的系统时钟。不知大家有没有注意过,在我们的手机或者电脑没有联网的时候,重新开机后仍然可以显示时间,其实这就是RTC时钟。原理就是在手机或者电脑主电源断电的情况下,自动启用后备电源(电脑的后备电源就是主板上的纽扣电池),维持RTC时钟晶振工作,以实现主电源断电下也能计时。之所以不采用8M高频晶振作为RTC的振荡源,是因为高频晶振受温度、制作工艺影响大而容易出现误差(RTC的误差就小得多了)。要想使用STM32的RTC,只需要给1号引脚Vbat接一个纽扣电池即可,在未接3.3V电源时,会自动使用纽扣电池供电,接了3.3V电源又会自动切换至3.3V电源供电。因为RTC耗电极低,所以一颗纽扣电池也足够使用很长时间。但是在主电源断电情况下,如果纽扣电池也没电了,内部的时钟时间就会丢失,再次上电就恢复成了初始时间。

        除了内部的RTC,也可使用外置RTC芯片,实现断电计时的功能。外置RTC时钟IC的计时精度可以更高,但是其一般需要通过IIC通信来读写时钟数据。

cf9584ec1a1f47ac9a7219591c8b39e2.png

 关于其具体用法,以后再做详细介绍。

 4.IIC、USART、SPI通信

        STM32外设丰富,支持硬件级的IIC、USART、SP通信。相比于软件实现的通信,硬件级的更快,更稳定,更方便。

        IIC一般用于单片机与传感器、显示屏、EEPROM等外设间的数据传输。其IIC接口支持7位或10位寻址,7位从模式时支持双从地址寻址。内置了硬件 CRC发生器/ 校验器
它们可以使用 DMA操作并支持SMBus总线2.0版/PMBus总线。
5fddef57ba7440d394ea67fe2a1c37e1.png

 

参考文章:《 STM32-软件模拟IIC通信》,《 STM32-IIC驱动OLED屏幕》。
 
 

        USART可用于单片机与电脑的的串口通信。USART1接口通信速率可达4.5Mbps,其他接口的通信速率可达2.25Mbps。USART接口具有硬 件的CTS和RTS信号管理、支持IrDA SIR ENDEC传输编解码、兼容ISO7816的智能卡并提供LIN主/ 从功能。 所有USART接口都可以使用DMA操作。

07e05e1063bc48b7af81189582980cb6.png

 

参考文章《STM32-USART串口通信》。

 

        SPI比前两种通信拥有更快的通信速率,一般用于数据传输量大的场合,比如控制高分辨率或高刷新率的彩屏。SPI接口,在从或主模式下,全双工和半双工的通信速率可达18Mbps。3位的预分频器可 产生8种主模式频率,可配置成每帧8位或16位。硬件的CRC产生/校验支持基本的SD卡和MMC模式。 所有的SPI接口都可以使用DMA操作。

287557e74bcc499fbd0ae8bb813beb18.png

参考文章《STM32-SPI驱动IPS彩屏》。

5.JTAG、SWD与仿真器

        在STM32上有几个接口称为JTAG、SWD。JTAG接口(Joint Test Action Group,联合测试工作组),是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如DSPFPGA器件等。标准的JTAG接口是4线:TMS(PA13)、TCK(PA14)、TDI(PA15)、TDO(PB3),分别为模式选择、时钟、数据输入和数据输出线。有了JTAG,就可以对单片机程序进行在线调试,包括断点调试,变量监控,对于程序查错是非常方便。

ebc1f22cc2563257f4d1f11ad749f641.png

        SWD接口即串行调试(SerialWireDebug),是一种和JTAG不同的调试模式,最直接的区别是调试接口上,SWD只需要4(或者5)个引脚:3.3V、GND、SWDIO(PA13)、SWCLK(PA14)。他的SWDIO、SWCLK与JTAG的TMS、TCK复用了。

        要想实现在线调试,还需要专门的仿真工具。常用的仿真器有J-Link、U-Link、ST-Link。

        J-Link其实就是一个USB转JTAG的工具,可将电脑与JTAG端口相连。JLINK是一个通用的开发工具,可以用于KEIL、IAR、ADS 等平台。速度,效率,功能都很好。

983922ec89216973b3d955919589b74c.png

        U-Link是ARM/KEIL公司推出的仿真器,不过现在能买到的都是其升级版本ULINK2和ULINK Pro仿真器。ULINK/ULINK2可以配合Keil软件实现仿真功能,仅可以在Keil软件上使用(不支持IAR、ADS等其他平台)。

8bc6e4fe15a14226095cc397ae4023cc.png

        ST-Link是专门针对意法半导体STM8和STM32系列芯片的仿真器。ST-LINK /V2指定的SWIM标准接口和JTAG / SWD标准接口,通过ST-Link可直接将程序写入单片机(SWIM / JTAG / SWD)以及EEPROM烧写,当然也也支持在线仿真,相比另外两种,更具优势。所以个人非常推荐该仿真器。

3a0c43262fd18d9763553dc561dbb63b.png

6.程序开发平台

        STM32程序开发平台主要有Keil、IAR、STM32CudeIDE等。Keil支持众多单片机开发,版本如今已更新到Keil 5。IAR相比Keil,编译的代码更紧凑,实际使用与Keil差不多。STM32CudeIDE是STM专门为STM32开发的IDE,但是使用还是比不上前两种平台。

7.其他

        内部温度传感器:STM内部有一个温度传感器,并连接到PC13,可用于监测芯片温度。

        控制器区域网络(CAN):CAN接口兼容规范2.0A和2.0B(主动),位速率高达1Mbps。它可以接收和发送11位标识符的标准帧, 也可以接收和发送29位标识符的扩展帧。具有3个发送邮箱和2个接收FIFO,3级14个可调节的滤波器。一般用与单片机与上位机的通信。
 
        通用串行总线(USB):内嵌一个兼容全速USB的设备控制器,遵循全速USB设备(12Mbps
)标准,端点可由软件配置,具有待机/唤醒功能。
 
        定时器:中等容量的STM32F103xx增强型系列产品包含1个高级控制定时器、3个普通定时器,以及2个看门 狗定时器和1个系统嘀嗒定时器。
watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAI2xpdWZlbmdlcyM=,size_20,color_FFFFFF,t_70,g_se,x_16
        看门狗:用于防止程序跑偏。独立的看门狗是基于一个12位的递减计数器和一个8位的预分频器,它由一个内部独立的40kHz的RC 振荡器提供时钟;因为这个RC振荡器独立于主时钟,所以它可运行于停机和待机模式。它可以被当 成看门狗用于在发生问题时复位整个系统,或作为一个自由定时器为应用程序提供超时管理。通过 选项字节可以配置成是软件或硬件启动看门狗。
在调试模式下,计数器可以被冻结。窗口看门狗内有一个7位的递减计数器,并可以设置成自由运行。它可以被当成看门狗用于在发生问 题时复位整个系统。它由主时钟驱动,具有早期预警中断功能;在调试模式下,计数器可以被冻结。
 

 

 
本文纯属个人理解,如有错误,欢迎指正
 
 
如果觉得有用可以点个赞哦~
 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_55203246/article/details/123936773

智能推荐

详解活动图计算关键路径、最早开始时间、最晚开始时间、冗余时间,C++ 程序实现_活动图最早开始时间-程序员宅基地

文章浏览阅读2.6w次,点赞49次,收藏110次。题目下图是一个软件开发项目的活动图,对于图中每条边的数字表示完成这条边代表的活动的天数。例如,完成终止于里程碑E的活动需要 4 天时间。对于每个活动,列出它的前驱,并计算最早开始时间、最晚开始时间和时差,然后确定出关键路径。—— 《软件工程 第 4 版》中的原题写文缘由网上的文章大都是对于 “点” 求最早开始时间和最晚开始时间。在我看来,是不准确的。对于边的解法,有的写得又太复杂,还是自己写吧。误区在哪需要注意的是,图中的点,并不代表活动,并不能说活动 AAA 用 333 天到达活动 _活动图最早开始时间

Windows环境下通过Xshell发送文件到远程Linux主机_windows环境变量可以发给linux 通过xming-程序员宅基地

文章浏览阅读278次。windows与linux之间的中小型文件传递可以使用sz、rz命令来实现sz:将linux主机中选定的文件发送到windows主机。rz:执行该命令会弹出一个文件选择窗口,从windows主机选择文件发送到linux主机。首先检查linux主机上有没有安装lrzsz。如果已按照会显示按照的版本,如果没有安装不会有任何显示。(以下为已安装)[root]# yum list i..._windows环境变量可以发给linux 通过xming

CDH页面中Oozie的调度告警邮箱设置_cdh+oozie-程序员宅基地

文章浏览阅读725次。CDH页面中Oozie的调度告警邮箱设置1. 开启SLA2. smtp设置3. Hue中,对Workflow任务进行设置4. 设置收件邮箱,结束时间可根据任务时长修改,其他可以默认yyyy-MM-dd’T’HH:mm+0800标定时间2021-06-27T00:00+08005. 邮件通知内容..._cdh+oozie

Python 统计字典中key value 的最大值,最小值,以及统计key value的个数等_c# dictionary查找value最少的数量-程序员宅基地

文章浏览阅读1.6w次,点赞5次,收藏28次。1.字典:参考:https://www.runoob.com/python/python-dictionary.html键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。dict = {'a': 1, 'b': 2, 'b': '3'}print(dict['b'])print(dict)后面的会替换前面的:如上结果:'b': 2,被 'b': '3'替换,..._c# dictionary查找value最少的数量

验证计算机名出现一般性网络错误,一般性网络错误请检查网络文档-程序员宅基地

文章浏览阅读3.1k次。SQL codeMicrosoft][ODBC SQL Server Driver][TCPIP Sockets]一般性网络错误。请检查网络文档SQL Server连接中的四个最常见错误:一. "SQL Server 不存在或访问被拒绝 "这个是最复杂的,错误发生的原因比较多,需要检查的方面也比较多.一般说来,有以下几种可能性:1,SQL Server名称或IP地址拼写有误2,服务器端网络配置有误..._error(msg:[microsoft][odbc sql server driver][tcp/ip sockets]connectionwrite

[AMBA]AXI原子操作(AXI Atomic Operation)-程序员宅基地

文章浏览阅读4.3k次,点赞2次,收藏25次。AXI原子操作(AXI Atomic Operation)。​原子操作就是不可中断的一个或者一系列操作, 也就是不会被线程调度机制打断的操作, 运行期间不会有任何的上下文切换(context switch)。我们为什么要关注原子操作呢?如果确定某个操作是原子的, 就不用为了去保护这个操作而加上会耗费昂贵性能开销的锁,借助原子操作可以实现互斥锁(mutex),借助互斥锁, 可以实现让更多的操作变成原子操作。 前言:一、原子操作的基本概念..._axi原子操作

随便推点

Jenkins拉取Gitlab项目代码配置SSH Keys步骤_jenkins git ssh key-程序员宅基地

文章浏览阅读7.3k次,点赞3次,收藏10次。Jenkins容器生成秘钥进入目录:cd ~/.ssh如果没有该目录就创建:mkdir -p ~/.ssh生成秘钥:ssh-keygen -t rsa -C “登录gitlab的邮箱”查看对应的ssh-keyjenkins@f050d7fa04f0:~/.ssh$ lsid_rsa id_rsa.pubid_rsa.pub:公钥,复制到gitlab平台配置ssh-keyid_rsa:私钥,复制到jenkins平台配置jenkins凭据拷贝id_rsa.pub到gitlab配置ssh-_jenkins git ssh key

使用git命令时,系统报错:bash: git: command not found...-程序员宅基地

文章浏览阅读6.9k次。使用git命令时,系统报错:bash: git: command not found…原因:服务器没有安装git导致系统报错解决方法:(Centos7)yum install -y git 执行命令安装git后即可解决_bash: git: command not found...

如何查看SAP表变更记录_sap ps 项目更改记录查询-程序员宅基地

文章浏览阅读2.2k次。在运维的过程中,我们有时需要去追踪一些表的变更记录,如采购订单的单价更新,采购订单的入库标识何时更新等,以便我们可以更快的追踪定位到问题所在,本章给大家介绍下如何追踪系统中表的变更记录。根据表名获取更改文档对象,表:TCDOB。_sap ps 项目更改记录查询

超链接打不开是什么原因html,超链接打不开是什么原因-程序员宅基地

文章浏览阅读2.4w次。演示工具:电脑型号:华硕adolbook14 2020系统版本:windows10具体原因及解决方法:1、如果是链接到本地文件的超链接无法打开,可能是相对路径和绝对路径的问题,绝对地址,是有完全的路径,如果超链接的路径写错了,就无法打开。2、检查一下被链接的文件是否被改变了存储位置,如果是,需重新设置一次。3、如果链接的是局域网上其它电脑中的文档,可能是被链接的电脑网络设置出了问题,先检查能否链接...

搭建网站服务基于openlab_那些可以在openlab网站获得支持-程序员宅基地

文章浏览阅读156次。1.基于域名www.openlab.com可以访问网站内容 welcome to openlab。#mount /dev/sr0 /mnt#yum install httpd -y2.给该公司创建三个子界面分别显示学生信息,教学资料和缴费网站,基于www.openlab.com/student网站访问学生信息,www.openlab.com/data网站访问教学资料,www.openlab.com/money网站访问缴费网站。(1)学生信息网站只能song和tian两个人访问,其他用户不_那些可以在openlab网站获得支持

idea常用插件_idea打印sql语句插件-程序员宅基地

文章浏览阅读1.9k次。当我们在写代码的时候,其实很多基础的代码都可以直接生成的,个人比较喜欢用easycode,该插件可以自己自定义生成基础的增删改查,有提供的模板,但个人建议最好还是自己写个模板,能符合自己的项目。定制性更强,而且该代码能直接生成到项目中选择连接的数据库,右击使用。_idea打印sql语句插件

推荐文章

热门文章

相关标签