新宝5

您现在的位置: 新宝5 > 平台 >

STM32库函数编程思路总结及其与寄存器编程的对比剖析

  项目构建确认无误后,可以复制整个项目文件夹的内容并保存,STM32库函数本质上是对外设寄存器直接编程,再次创建项目时可以直接应用(仅需适当改变项目名称等)。只是为了方便应用封装成了函数。所以用户的应用程序也可以绕过库函数,由上面的例子可知,最后才组合出正确的数值这些项目创建的步骤是通用的,以初始化GPIO为例(库函数):源代码共86行代码,在写入寄存器数值前需要大量代码去判断工作模式和配置的引脚,直接对寄存器编程。

  库函数就是用宏定义、枚举标识符等代表的数值写入寄存器,替用户摆脱枯燥的机械过程。在一些代码要求高效率的情况下,对寄存器编程是非常必要的。同时,对寄存器的学习与操作,将非常有助于我们在出错时进行程序调试。函数声明等写入对应的头文件[ led.h ]。源程序文件[ led.c ]要包含其头文件[ led.h ]?

  本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

  新年测评活动!ST NUCLEO-H743ZI“佩奇”待测,快来申请年后第一波测评!

  外设函数名用一个下划线分割两部分。各种外设往往具有功能雷同的函数,STM32库采用统一的函数名称,如下表所示。

  (3)单独编写一个主程序文件[ main() ],实现项目需要的主控流程。主程序应包含外设驱动头文件[ led.h ](无需包含GPIO和RCC的头文件,尽管它们是必须被调用的。如下图所示,因为在配置RTE时已经在StdPeriph Drivers中选择了GPIO和RCC等外设驱动,故已经自动添加了该部分,无需在自己编写的源程序main()、led()中添加),并调用外设操控函数[ led_on_all()]或STM32库函数[ GPIO_ResetBits() ]实现外设控制。

  项目构建后最好先进行软件模拟,然后将程序下载到目标板进行硬件调试和运行。除了常规的寄存器、存储器等显示窗口,还应该利用外设窗口和逻辑分析仪窗口观测外设及其引脚的工作状态,尤其是在软件模拟时。

  方法2:当成员较多,且无需全部设置为用户指定的特定值时,再对其中的部分参数进行重新赋值。

  (1)为每个目标板上的外设编写一个驱动程序源文件[ led.c ],包含外设初始化函数[ led_init() ]和简单通用的外设操控函数 [ led_on_all()](直接应用性质的控制函数)!

  通过以下步骤对项目本身流程进行分析,以明确并掌握相关外设的STM32驱动函数(以GPIO控制LED为例)?

  各种参数有宏定义或者枚举常量。对于每个寄存器而言,各个参量的值即为填入寄存器中某位的数值,名称一致。

  直接对寄存器编程的代码效率最高。不过,需要花费较多的时间学习和查阅STM32数据手册,这个过程繁琐、易错,难以移植。

  (2)使用MDK新建(或打开项目),选择目标CPU、添加CMSIS核心、STM32启动代码和外设驱动程序,构成运行环境。

  以初始化GPIO为例(寄存器):源代码只有1条语句,直接对端口配置寄存器CRL进行赋值,即可初始化配置端口。

  每种外设至少有2个结构体数据类型:位于stm32f10x.h头文件中的外设寄存器结构体PPP_TypeDef,用于访问外设寄存器;另一个是位于外设头文件stm32f10x_ppp.h中的外设初始化结构体PPP_InitTypeDef,用于配置外设初始化参数。

  (2)初始化外设:定义外设初始化结构变量,调用外设初始化函数配置外设。——如何工作!

  CMSIS和STM32库本身比较复杂,但有统一的规范。熟悉这些规律有助于我们更好地使用驱动程序。

  (1)新建工程项目的文件夹和子文件夹(如user、output、listing等)?

  (2)宏定义、枚举常量以及外设初始化的结构体,用于抽象化硬件。常量就是设置相应寄存器位功能的数值,以达到所需的功能。

  (3)用于每个寄存器位设置的宏定义常量(名称和寄存器的位名称一致,便于移植和应用)?

  综合资讯51单片机PIC单片机AVR单片机ARM单片机嵌入式系统汽车电子消费电子数据处理视频教程电子百科其他技术STM32MSP430C2000单片机论坛单片机资源下载单片机习题与教程。

  更新时间:2019-02-12 17:05  
上一篇:意法半导体STM32CubeMXMCU引入多面板GUI更新配置软件以改善开发者体验 下一篇:没有了