初入电子坑之stm32篇

初入电子坑之stm32篇

c1c0df775a7233350f45a2acd3a0bf07.png

///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像黑色字体加我地球呺也能领取哦。最近比较闲,带做毕设,带学生参加省级或以上比赛///

前言

可以看到,寄存器编程虽然消耗CPU性能少、速度快。但于我们开发应用来说,那就是刀耕火种中的刀耕火种。。。
芯片厂家也考虑到了这点,所以一般会提供一些基本的固件库供开发人员使用。stm32的爸爸ST公司自然也不例外。

CMSIS标准

一种内核架构通常会被多家芯片厂家采用,而芯片厂家对于芯片内部的外设布置是有差异的,这就很容易导致软件在同内核,不同外设的芯片上移植困难。

为了解决这个问题,设计架构的公司和使用架构的芯片厂商间就会制定一个标准,让软件可以适配同内核不同外设的芯片的情况。

而CMSIS标准(Cortex MicroController Software Interface Standard)就是 ARM与芯片厂商建立的一种标准实例。

CMSIS标准其实是一个软件抽象层。

aeb9cc2b46a2973686e2113463c63082.png

3c2329022b4d97ad3fcaef49c33363ea.png

(上图中,黄色部分是MCU硬件层面的东西,蓝色CMSIS层其实就是程序。)

它的内容有两个方面:

·内核函数层:内核寄存器的名字、地址定义。由ARM公司提供。

·设备外设层:片上核外外设的地址和中断定义。有芯片生产商负责。

初识stm32固件库

了解了CMSIS标准后,我们就可以很愉快的去stm32提供的官方固件库找我们要的东西了。

打开固件库文件夹我们可以看到有以下两个文件夹:

cf100888ff534f38db05058cd5779d66.png

从文件名就可以盲猜,一个是CMSIS标准相关的配置文件夹,一个是相对具体型号的芯片外设配置文件夹。

cee3ea67284ecea660be56a6447b9b58.png26c3ae22efbcad41b7883de733e29398.png

c437b3d03269dbf3a6e52db5cd815b6d.png060823f52fa5934d2269c80e45eeb051.png

点进CMSIS可以发现,不出所料,就是内核的配置相关配置的源文件、stm3210x的时钟配置文件还有启动文件。

我们用的时候把它们复制到我们自己的工程里即可。

然后去隔壁 STM32F10x_StdPeriph_Driver文件夹瞄瞄,这个就很简单粗暴了,一个inc(include)、一个src(source)。

f184a5889a07318c31f0b32843eeb80d.png

随便点进去就会发现ST官方按照不同的外设模块,stm32f10x_xxx.c的方式给分门别类的放好了。(见下图)

ca4f8535a63a690aa1e9e8318ec9aa41.png

既然东西齐活了,下面就可以先愉快的建个固件库工程模板,然后正式开启固件库编程之旅了~

下面结合实例叙述固件库的编程方式。

实例:按键控制LED

首先,让我们回忆一下,点灯的流程:

·开始GPIO口时钟使能

·初始化GPIO

·选择引脚IO口引脚

·并选择需要的IO模式

·设置对应IO口的位值

如果有按键开关的话就是,就加上以下流程:

·判断读取开关对应IO口的值(IDR寄存器里)

·根据判断情况做相应的动作

库函数运用

上述流程动作,固件库全都是给我们安排得妥妥,直接调用相关函数就可以了。

具体的相关函数都在对应外设的头文件最下面,如我们即将使用的GPIO:

4e6d5a239bacdc182b528fd0508bf356.png

7b24fe2f2a95240999e14ace16ee4947.png

从上面两图可以看到:

·想要什么基本操作?去对应外设的库头文件找啊!

·函数参数怎么用?直接去找源码看定义啊!

·不知道函数功能是啥?直接看源码注释啊

猜你喜欢

转载自blog.csdn.net/danpianji777/article/details/124716533