在那轻易学习嵌入式编制程序,学32库函数依然存

2019-12-19 09:44栏目:网络操作
TAG:

学stm32是学寄存器还是库函数好,大学准备毕业,已经找好工作了,硬件工程师。本来想学寄存器的,已经学到输入捕获了,但是现在做毕业设计发现好多资料都是库函数的,咋办嘞。。

C语言是面向过程的,而C++是面向对象的

寄存器和固件库开发的差别和联系

C和C++的区别:

固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道。向上提供用户函数调用的接口(API)。

C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入进行运算处理得到输出控制)。

在 51 的开发中我们经常的作法是直接操作寄存器,比方要控制某些 IO 口的状态,我们直
接操作寄存器:
P0=0x11;
而在 STM32 的开发中,我们相同能够操作寄存器:
GPIOx->BRR = 0x0011;

C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

这样的方法当然能够,可是这样的方法的劣势是你须要去掌握每一个寄存器的使用方法。你才干正确使用
STM32,而对于 STM32 这样的级别的 MCU,数百个寄存器记起来又是谈何easy。于是 ST(意法
半导体)推出了官方固件库。固件库将这些寄存器底层操作都封装起来,提供一整套接口(API)
供开发人员调用,大多数场合下,你不须要去知道操作的是哪个寄存器,你仅仅须要知道调用哪些
函数就可以。

C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。

比方上面的控制 BRR 寄存器实现电平控制,官方库封装了一个函数:
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
ALIENTEK 战舰STM32开发板
www.openedv.com
37
GPIOx->BRR = GPIO_Pin;
}

图片 1

这个时候你不须要再直接去操作 BRR 寄存器了。你仅仅须要知道怎么使用 GPIO_ResetBits()这个
函数就能够了。在你对外设的工作原理有一定的了解之后。你再去看固件库函数,基本上函数
名字能告诉你这个函数的功能是什么,该怎么使用,这样是不是开发会方便非常多?
不论什么处理器。无论它有多么的高级,归根结底都是要对处理器的寄存器进行操作。可是固
件库不是万能的,您假设想要把 STM32 学透。光读 STM32 固件库是远远不够的。你还是要了
解一下 STM32 的原理,而这些原理了解了。你在进行固件库开发过程中才可能得心应手游刃
有余。

小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

图片 2

开发板实物图

上图是我购买的一块STM32的开发板,大家可以发现这块开发板是由一块STM32主芯片和很多个外部设备组成的,有大家熟悉的USB、SD卡电源接口等,等还有大家以前没有了解过的一些外设。也就是我以前和大家讲过的大脑和手脚,这样才能形成一个体系,如果只有MCU,那么它如何去执行任务呢?如果只有外设,那么谁去控制它们执行呢?管理者和执行者缺一不可。

在学习编程之前,让我们先来了解一下STM32的内部结构。

图片 3

STM32晶振

每一款芯片都有晶振,晶振又称为是MCU的“心脏”,不是通上电MCU就可以正常运行了,是晶振推动程序的执行的,这一点大家要注意,STM32不响51单片机只有一个晶振,我选的这一款芯片有5个时钟源,为什么它需要这么多时钟源呢?是为了适应自带的一些设备,有的设备需要高频的时钟,而有些低频的就可以满足它们的使用要求了,如果都使用高频的,那么就会浪费大量的能量,做过产品的同学肯定知道一个产品的功效是很严格的,特别是出口产品,如果功效不达标,也就是造成能源的浪费是无法进行销售的,这会造城很大的损失。所以这也是STM32在控制领域火爆的原因,它能很好地控制功效,也就是所谓的低功耗。

图片 4

小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

STM32功能选择

我一开始学习的时候就有一个疑问,开发板的引脚就那么多,为什么能实现那么多功能呢?之后我才明白,STM32自带了很多强大的功能,但是引脚的数量有限,所以很多时候它们都是共用一些引脚,但是里面有个功能选择器,我们想使用哪个功能时,就设置功能选择器,这时他就会打通相应通道,并且关闭其他通道。这样就实现了功能的多样性。

前一段时间和大家讲过了,MCU是如何控制这些功能的,MCU中有很多地址,它是通过控制这些地址所对的数据从而实现控制设备的,这些地址对应的就是功能,这些地址所对应的内容也被称为寄存器。但是如果直接去控制寄存器步骤会很繁琐,每实现一个功能就要配置很多寄存器,量大而且容易配置出错,所以这些芯片的的厂家为了方便大家编程,封装了很多库函数,库函数实现了很多功能初始化的分装,我们只要简单调用他们就能配置好所要使用的寄存器了,但是寄存器还是建议大家学习一下的,因为那样才能真正了解芯片的工作原理。给大家实现一个简单的程序,点亮一个LED灯,这个真的是嵌入式中最简单的程序了,就好比你伸手去开个灯那么简单。我用寄存器和库函数各实现一下个大家看看。

图片 5

C

寄存器版本:

#define LED PFout // 定义LED为相应的管脚

void LED_Init //初始化函数

{

RCC->AHB1ENR|=1<<5; //使能管脚时钟

GPIO_Set(GPIOF,PIN8,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PD); //配置管脚功能

LED=0;//关闭LED灯 ,LED做过宏定义,要自己去定义LED代表管脚

}

int main //主函数

{

Stm32_Clock_Init(336,8,2,7); //配置时钟

LED_Init(); //初始化LED

LED=1; //点亮LED

}

库函数版本:

void LED_Init //初始化函数

{

GPIO_InitTypeDef GPIO_InitStructure; //定义管脚

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//打开管脚时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //选择是第几号管脚

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //配置管脚为输出

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //配置管脚为推挽方式

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //配置管脚输入输出频率为100MHz

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //配置管脚为下拉电阻

GPIO_Init(GPIOF, &GPIO_InitStructure); //初始化管脚,按照上述配置

GPIO_ResetBits(GPIOF,GPIO_Pin_8); //·将输出置为0,关闭LED灯

}

int main //主函数

{

LED_Init(); //初始化LED

GPIO_SetBits(GPIOF,GPIO_Pin_8); //将输出置为1,打开LED灯

}

图片 6

小编推荐一个学C语言/C++的学习裙【 六九九,四七零,五九六 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

看了上述方式,很多人就说库函数配置那么复杂,明明就是寄存器版本好,其实用过之后你就会发现,库函数配置都是有规律的,而寄存器的的配置都是没有章法可循的,因为设备的多样性,要配置的也是千差万别。但是寄存器执行要比库函数执行效率高,你要问我为什么?因为库函数等于多了一个步骤,你是调用人家的函数,人家的函数是对寄存器的配置,所以速度显而易见,当然一般是感觉不出来的,除非是一丁点时间都不容易许浪费的设备。

图片 7

STM32

好了今天就介绍到这里,从今天开始,我们也正式开始学习STM32了,以后的日子还望大家一起努力,觉得写的还行的帮忙点个赞呗,不好的还望提出意见和批评,谢谢大家了。

这些是C/C++能做的

服务器开发工程师、人工智能、云计算工程师、信息安全、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等

图片 8图片 9图片 10

版权声明:本文由澳门新葡亰平台游戏发布于网络操作,转载请注明出处:在那轻易学习嵌入式编制程序,学32库函数依然存