学习Stm32使用固件库和写寄存器有什么区别
2个回答
2022-12-11 · 百度认证:北京惠企网络技术有限公司官方账号
关注
展开全部
两个使用的角度不同
使用固件库,目前比较多的例程是使用固件库编写的。官方的例子也都采用固件库方式。特点就是简单,易于理解,资料多。如果你没有CortexM系列内核的开发基础,建议从固件库开始玩起。等有一定基础,或是特别需要时再用寄存器。
使用寄存器,想要深入理解CortexM3内核或是需要为了获得更好的可移植性,学习寄存器编程会比较有帮助。但是从专业的角度上看,寄存器更贴近底层,对外设的工作原理和运行机理会有更深的理解。
扩展资料:
STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。
寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。
在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,寄存器有累加器(ACC)。
展开全部
固件库其实是封装好寄存器操作的一系列函数的集合。
例如,串口由很多寄存器配置和启用。固件库把它封装成简单的函数调用,参数为一个c的结构,把你要初始化的波特率和其他属性填好,就可以了。你不用理会波特率如何计算和设置寄存器,不用理会要开启哪些中断寄存器和时钟。对你来说,硬件寄存器基本透明了,你只是高级层面操作串口的属性特征。这样,你的代码就基本在任何芯片上都一致了。而每一个MCU厂对自己寄存器操作进行函数封装。大大方便了在不同芯片中升级和移植。
所以,固件库其实就是最底层的寄存器操作的封装,你可以理解为硬件驱动库。让由几个甚至十几个寄存器操作的模块使用变得非常简单,也许两个函数调用就可以使用了,而不比阅读厚厚的寄存器手册。
所以固件库和寄存器最终操作是没有区别的,但固件库会加入一些逻辑,像为了在多任务系统中更好的防止模块访问的冲突的互锁变量,有时候使用不当或者没处理好会产生模块锁定无法使用,你调用不返回,表现为卡死或者没数据读出来。固件库复杂还扩展不少功能,像电机控制等等。当然,因为固件库封装,会加入很多函数调用和变量传递,速度要比直接寄存器满慢十几倍甚至几十倍。你可以试一下一个长的for循环,中间控制IO用寄存器和函数,你用示波器测试输出翻转的时间。就会看到效率不一样了。
例如,串口由很多寄存器配置和启用。固件库把它封装成简单的函数调用,参数为一个c的结构,把你要初始化的波特率和其他属性填好,就可以了。你不用理会波特率如何计算和设置寄存器,不用理会要开启哪些中断寄存器和时钟。对你来说,硬件寄存器基本透明了,你只是高级层面操作串口的属性特征。这样,你的代码就基本在任何芯片上都一致了。而每一个MCU厂对自己寄存器操作进行函数封装。大大方便了在不同芯片中升级和移植。
所以,固件库其实就是最底层的寄存器操作的封装,你可以理解为硬件驱动库。让由几个甚至十几个寄存器操作的模块使用变得非常简单,也许两个函数调用就可以使用了,而不比阅读厚厚的寄存器手册。
所以固件库和寄存器最终操作是没有区别的,但固件库会加入一些逻辑,像为了在多任务系统中更好的防止模块访问的冲突的互锁变量,有时候使用不当或者没处理好会产生模块锁定无法使用,你调用不返回,表现为卡死或者没数据读出来。固件库复杂还扩展不少功能,像电机控制等等。当然,因为固件库封装,会加入很多函数调用和变量传递,速度要比直接寄存器满慢十几倍甚至几十倍。你可以试一下一个长的for循环,中间控制IO用寄存器和函数,你用示波器测试输出翻转的时间。就会看到效率不一样了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询