stm32 用库函数操作和寄存器操作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stm32 用库函数操作和寄存器操作相关的知识,希望对你有一定的参考价值。
之前用的51,现在买书 ,突然看到这个库函数和寄存器操作,脑子里面也没有什么概念, 希望大神能够给我解释清楚。 他们之间的关系和区别 。是不是就是类似一个C语言一个类似汇编的关系?
首先,两个都是C语言。从51过渡过来的话,就先说寄存器操作。每个MCU都有自己的寄存器,51是功能比较简单的一种,相应的寄存器也比较少,我们常用的就那么几个,像P0 P1 SMOD TMOD之类的,这些存在于标准头文件reg.h里面,因为少,所以大家就直接这么去操作了,每一位对应的意义随便翻一下手册就看得到,甚至做几个小项目就记的很清楚了。所以做51开发的时候大多数都是直接操作寄存器。
到了STM32,原理一样,也是有自己的寄存器,但是作为一款ARM内核的芯片,功能多了非常多,寄存器自然也就多了很多,STM32的手册有一千多页,这时候想去像51那样记住每个寄存器已经不现实了,所以ST的工程师就给大家提供了库函数这么一个东西。
这是个神器。
库函数里面把STM32的所有寄存器用结构体一一对应并且封装起来,而且提供了基本的配置函数。我们要去操作配置某个外设的时候不需要再去翻眼花缭乱的数据手册,直接找到库函数描述拿来就可以用,这样就能把精力放在逻辑代码的开发上,而不是去费力的研究一个芯片的外设要怎么配置寄存器才能驱动起来。
简单讲就是这些了,库函数是为了让开发者从大量繁琐的寄存器操作中脱离出来的一个文件包,在使用一个外设的时候让开发者直接去调用相应的驱动函数而不是自己去翻手册一个一个配置寄存器。
有人说用库函数掌握不到芯片的精髓,见仁见智了。熟悉一款芯片是在不断的开发使用中逐渐了解并掌握的,调试的过程中会遇到很多问题,会要求我们去跟踪相关寄存器的状态,在整个框架都已经建立起来的基础上再去对照手册做具体到寄存器每一位的分析,代码对照现象,很快就能积累起来经验,祝成功。 参考技术A 寄存器操作:51就是寄存器操作,你用51需要自己写驱动。STM32如果不用库也是跟51一样直接操作寄存器的。
库函数操作:STM32的库已经帮你把驱动写好了,你要做的只是配置参数,然后使能。
寄存器的优缺点:速度快,但是可读性差,你要改动配置需要去查芯片手册。
库函数的优缺点:速度慢,但是可读性强,用GPIO_PIN_5这类可读性强的英文字母,去替代0x0101这类可读性差的数字。
STM32与STM8操作寄存器的区别
在STM8中,由于STM8寄存器较少,在头文件中定义寄存器的时候不用采取任何形式的封装,所以操作寄存器的时候直接可以用如下方式处理:PB_DDR |=0x20;
但是在STM32中,由于其寄存器实在太多,不方便像STM8一样定义头文件,而采用大量的结构体指针,宏定义进行封装,所以操作寄存器的时候用如下方式处理:GPIOC->ODR = 0X0000;而不再像STM8一样直接写成GPIOC_ODR =0X0000;
以上是关于stm32 用库函数操作和寄存器操作的主要内容,如果未能解决你的问题,请参考以下文章
STM32F103RCT6的pb6 pb7作为usart1,但用库函数初始化ADC和DAC以后,串口就不能用了,找了一下午,求指点