stm32用库函数操作和寄存器操作

author author     2023-05-06     239

关键词:

之前用的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寄存器库和固件库

寄存器和固件库开发的差别和联系固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道。向上提供用户函数调用的接口(API)。在51的开发中我们经常的作法是直接操作寄存器,比方要控制某些IO口的状态... 查看详情

stm32二

第一部分固件库含义  库是在寄存器与用户驱动层之间的代码,也就是一些基础函数,他可以向下处理与寄存器直接相关的配置,向上为用户提供配置寄存器的结构,用库与不用库的区别非常明显:  用户显然更加快捷CMSIS... 查看详情

4.寄存器和存储器的操作

如何访问STM32寄存器内容我们知道寄存器就是一些有特定功能的内存单元,所以要访问STM32寄存器也就是操作STM32的内存单元,根据C语言指针的特点,可以使用指针来操作STM32的内存单元。首先介绍两个概念:片内... 查看详情

stm32与stm8操作寄存器的区别

  在STM8中,由于STM8寄存器较少,在头文件中定义寄存器的时候不用采取任何形式的封装,所以操作寄存器的时候直接可以用如下方式处理:PB_DDR|=0x20;    但是在STM32中,由于其寄存器实在太多,不方便像STM8一样定义头文... 查看详情

stm32怎么用库函数使用滴答定时器?

直接调用库函数SysTick_Config(uint32_tticks)这一句就可以,比如调用函数:SysTick_Config(1000);后,系统每隔1000个系统时钟脉冲就进入系统滴答定时器中断:voidSysTick_Handler(void)然后就在中断函数里边写你想做的事情吧。参考技术Aif(SysTick_C... 查看详情

创建自己的函数库

...​​​3.对比:​​​​二、构建库函数​​​​1.修改寄存器地址封装​​​​2.定义访问的结构体指针和引脚​​​​3.创建封装函数​​​​3.1创建拉低引脚函数​​​​3.2创建引脚初始化函数​​​​总结​​前言回顾一... 查看详情

stm32基础(代码片段)

...(同一组)的工作方式和速度该函数主要是操作GPIOCRL(CRH)寄存器,在上拉或者下拉的时候有设置BSRR或者BRR寄存器voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct);注意:外设(包括GPIO)在使用之前,几乎都要先使能对应的时钟... 查看详情

stm32的意思是啥呢?

...习基于ARM处理器的操作系统层面的驱动、移植了。硬件的寄存器类的东西还是要能看懂的,掌握基于板级的汇编和C编程。主要需要学习的有:基础操作:GPIO操作,串口操作,定时器操作,NVIC和中断,看门狗,DMA操作,ADC操作,... 查看详情

自己写库—构建库函数雏形

...onProgramInterface),开发者可调用这些函数接口来配置STM32的寄存器,使开发人员得以脱离最底层的寄存器操作;实际上,库是架设在寄存器与用户驱动层之间的代码,向下处理与寄存器直接相关的配置,向上为用户提供配置寄存器 查看详情

stm32学习笔记(代码片段)

...断NVIC基本结构EXIT简介代码配置GPIO输出单独操作输出数据寄存器的某一位的方法GPIO8种模式代码操作RCC常用函数GPIO常用函数推挽开漏STM32笔记ADCADC(Analog-DigitalConverter)模拟-数字转换器ADC可以将引脚上连续变化的电压转换为内存中... 查看详情

stm32hal库iic协议库函数

...C操作句柄 第2个参数为从机设备地址 第3个参数为从机寄存器地址 第4个参数为从机寄存器地址长度 第5个参数为发送的数据的起始地址 第6个参数为传输数据的大小 第7个参数为操作超时时间 */HAL_I2C_Mem_Write(&hi2c2,sal... 查看详情

于stm32的iap总结(代码片段)

...位进入应用程序区关于解锁读/编程控制器叫"FPEC"有几个寄存器,专门负责Flash的,对这几个寄存器以一定得顺序访问并设置即可成功解锁Flash,至于怎么访问,谁先谁后,数据手册上写的头晕,直接来个快刀斩乱麻Flash_UnLock()函数封装了... 查看详情

stm32中systick下的ctrl、load、calib、val寄存器的功能在哪里设置的

...功能在哪里设置的,在固件库中有CTRL:SysTick控制和状态寄存器LOAD:SysTick重装载值寄存器VAL:SysTick当前值寄存器CALIB:SysTick校准值寄存器但是我在看不论是固件库或者直接寄存器操作的程序中,都是直接调用这几个寄存器操作... 查看详情

stm32串口通信波特率怎么计算??????

...:接收器和发送器(RX和TX)都是设置城USARTDIV整数和小数寄存器中配置的值。TX/RX波特率=Fck/(16*USARTDIV)例子:从BRR寄存器的值计算得到USARTDIV如果DIV_Mantissa=27D,DIV_Fraction=12D(BRR=1BCH),那么Mantissa(USARTDIV)=27DFraciton(USARTDIV)=12/16=0.75D因... 查看详情

stm32寄存器操作端口模式sda_out()/sda_in()

#defineSDA_IN(){GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;}#defineSDA_OUT(){GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)3<<28;} 首先得明白CRL、CRH是2个控制端口模式的寄存器[0-31]CRL( 查看详情

使用寄存器点亮led——编程实战

...了,而stm32中,就一个简单的GPIO,我们也需要配置好几个寄存器,而且,就算配置好GPIO寄存器,我们还必须有一步不能缺少的操作,那就是开启对应GPIO的时钟。在stm32的编程中,开启对应时钟是必不可少的一个操作,而且,开... 查看详情

stm32新手入门-什么是寄存器(代码片段)

...每一句代码在做什么,单片机的本质其实就是在操作寄存器,让单片机完成我们想要的动作例如点亮一个LED灯,stm32的库函数开发也不例外它只不过是将操作寄存器封装成一个个函数,我们只要配置指定函数的参... 查看详情

stm32入门系列-cmsis标准

 使用寄存器点亮开发板上LED,这种开发方式显然是不适合大众,对于STM32这样庞大的芯片,内部寄存器实在太多,如果操作的外设比较多,那么就需要花很多时间查询底层寄存器内容,而且即使程序写好,如果要换其他端口或... 查看详情