聊聊stm32-程序员宅基地

技术标签: stm32  嵌入式硬件  单片机  

STM32简介

STM32,这个名字在单片机领域可是响当当的,就像单片机界的“明星”。它是由意法半导体公司(STMicroelectronics)推出的,基于ARM Cortex-M系列内核的一系列高性能、低功耗的微控制器。

一、STM32的“家族背景”

首先,咱们得说说STM32的“家族背景”。STM32家族非常庞大,从STM32F1到STM32F7,再到STM32L、STM32H等系列,简直就是一个大家庭。每个系列都有其独特的特点和应用场景,就像家里的每个成员都有各自的性格和才华。

STM32F1系列是STM32家族的“老大”,它是基于Cortex-M3内核的,凭借其高性能和丰富的外设接口,在各种应用中都有出色的表现。而STM32F4和STM32F7系列则更加先进,它们采用了更强大的Cortex-M4和Cortex-M7内核,性能更上一层楼。

除了这些高性能系列,STM32还有低功耗系列,比如STM32L系列。这个系列的单片机在保持低功耗的同时,性能也相当不错,非常适合那些对功耗有严格要求的应用。

二、STM32的“超能力”

那么,STM32到底有哪些“超能力”呢?首先,它的处理能力非常强大。想象一下,一个单片机在短时间内完成大量的数据处理和计算任务,这不就是STM32的拿手好戏吗?而且,它还有丰富的外设接口,比如GPIO、UART、SPI、I2C等,可以方便地与其他设备通信。

此外,STM32还支持多种操作系统,比如FreeRTOS、μC/OS等,这使得它可以轻松应对各种复杂的应用场景。就像一个多才多艺的演员,无论在哪种舞台上都能游刃有余。

三、STM32的“朋友圈”

STM32在单片机界可是个“社交达人”。它与各种传感器、执行器、通信模块等都能愉快地“玩耍”。比如,你可以通过STM32来控制一个LED灯的亮灭,或者读取一个温度传感器的数据。甚至,你还可以让STM32与云端通信,实现远程控制。

而且,STM32还有丰富的开发工具和资源支持。无论是Keil MDK、IAR Embedded Workbench等集成开发环境,还是STM32CubeMX这样的图形化配置工具,都能让你轻松上手STM32的开发。STM32的生态非常成熟,这就是为何入门单片机时都会选STM32。啥是生态?刚入门的同学对这一点可能没有体会,后面随着工作的深入慢慢会理解。

四、STM32的“职场表现”

在职场上,STM32也是个“佼佼者”。它广泛应用于各种领域,比如智能家居、医疗设备、工业自动化等。你可以想象一下,家里的智能门锁、智能温控系统,医院的监护仪、输液泵,工厂的生产线自动化设备,这些都可能用到STM32。

可以说,STM32以其高性能、低功耗、丰富的外设接口和强大的处理能力,赢得了众多工程师的青睐。不过目前很多国产的单片机在调整STM32的市场地位。

STM32内部结构

下图是STM32F103VE的系统框架。看到这个图是不是感觉有些懵,没关系刚入门的同学没必要深究这部分,知道有这么回事就行。

(1) ICode总线:Cortex-M3内核的ICode总线与闪存指令接口紧密连接,确保指令的高效预取。

(2) DCode总线:Cortex-M3内核的DCode总线与闪存数据接口相连,负责常量数据的快速加载及调试访问。

(3) 系统总线(system):这条总线将Cortex-M3内核与总线矩阵连接起来,确保内核与DMA之间的顺畅访问,由总线矩阵进行精准协调。

(4) DMA总线:通过DMA的AHB主控接口与总线矩阵相连,有效协调CPU的DCode和DMA对SRAM、闪存以及外设的访问。

(5) 总线矩阵:该矩阵具备访问仲裁功能,能够智能协调内核系统总线和DMA主控总线间的数据交换,其仲裁机制采用高效的轮换算法。

(6) AHB/APB:这两座桥为AHB与两条APB总线提供了同步连接,确保数据传输的稳定性与高效性。特别值得一提的是,APB1具有36MHz的限速,而APB2则能达到最高72MHz的频率。

STM32F103单片机的时钟

STM32F103的时钟源家族

时钟是cpu中的心脏,时钟跳动程序的指令才能正常执行。在STM32F103这颗小小的芯片里,有一个时钟源家族,它们就像是CPU的“心跳发动机”。这个家族有四位成员:LSI、LSE、HSI和HSE,每个都有自己独特的性格和能力。

低速内部时钟(LSI)

这位是家族中的“宅男”,喜欢待在家里(内部RC振荡器)不愿意出门。他默默地为实时时钟模块(RTC)和独立看门狗提供稳定的“心跳”。

低速外部时钟(LSE)

这位是“外交家”,喜欢借助外部晶振的力量。他选择的频率是神秘的32.768kHz,为啥是这个数字呢?哈哈,因为它是2的15次方,就像一个数学魔术一样!这个频率在稳定性和准确性上找到了完美的平衡,就像跳芭蕾舞的舞者,既稳定又优雅。看到32.768kHz的晶振,你就知道这位“外交家”在为RTC服务啦!

高速内部时钟(HSI)

这位是“速度狂人”,由内部RC振荡器产生,频率高达8MHz!在不需要那么精确的时候,他就像一匹脱缰的野马,全力奔跑,并且在时钟要求精度不高的情况下经常采用HSI。

高速外部时钟(HSE)

这位是“专业运动员”,他依赖外部晶振,频率范围在4MHz~16MHz之间,但最喜欢的是8MHz的跑道。他就像是赛场上的明星,为STM32F103提供最准确、最稳定的高速“心跳”。成本hold不住的情况下会将这个去掉,采用HSI,毕竟晶振也是要的钱啊。

时钟源有了,这个时钟信号还要经过一系列的倍频和分频才能给各外设使用。

(1) SYSCLK:这是STM32的“大管家时钟”,它负责给大部分STM32的器件提供动力,就像一个大家长一样,确保家里的每一个成员都有饭吃。这个“大管家”会把能量通过AHB预分频器合理地分配给家里的每一个部件。

(2) HCLK:你可以把它想象成家里的“主动脉”,由AHB预分频器这个“心脏”直接泵出。它负责给AHB总线、核心存储器、DMA以及那个聪明的Cortex内核输送“血液”(即时钟信号)。HCLK的速度决定了Cortex内核的运行速度,也就是CPU的主频。这个速度越快,STM32的运算和数据存取能力就越强,就像你跑得越快,完成任务的效率就越高。

(3) FCLK:这是Cortex内核的“私人助理”。它虽然也由AHB预分频器这个“心脏”输出,但它有自己独立的工作方式,不受HCLK的影响。即使处理器在“睡觉”(休眠),它也能继续工作,确保不错过任何重要的“电话”(休眠事件)。它与HCLK同步,但更加自由自在。

(4) PCLK1:这是给挂载在APB1总线上的外设提供的“零食”(时钟信号)。这些外设可能不像内核那么重要,但也需要一些能量来保持活力。PCLK1的最大频率是36MHz,就像你给小孩分零食一样,要确保他们吃得开心但又不会吃太多。

(5) PCLK2:这是给挂载在APB2总线上的外设的“大餐”(时钟信号)。与PCLK1不同,PCLK2提供的能量更多,最大频率高达72MHz。这些外设可能是家里的“大胃王”,需要更多的“食物”来满足他们的需求。

下图是cubemax上的时钟树,对各个时钟的设置一目了然。(现在学习stm32还真是轻松,笔者当年学习的时候可没这么好的学习资料)

时钟的频率越高系统的功耗越高,如果对功耗有严格的要求要关掉不必要的时钟,降低一部分时钟频率,时钟频率够用就好。对功耗没啥要求那就简单了,设置成最高就行了。

想学习单片机欢迎加入知识星球:单片机入门技术交流

                                   

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

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法