STM32硬件编程_学习思路
分享一下自己的学习思路,是关于我的STM32的学习方法,以STM32硬件编程思想为例
第一点:编程首先应该清楚的是“需要什么”。
需求包括①上级(自己)开出的要求、条件。②硬件应实现的功能。③是否符合客户(自己)的需求。比方说,我要做个数控直流稳压电源:首先我得先清楚需要什么功能,参照市场上符合功能要求的产品,看看他们有什么值得借鉴的。
第二点:考虑使用什么芯片可以实现大致功能,且降低开发成本,符合开发工期。
要做数控直流稳压电源的话,我根据第一点分析出我需要的功能是①显示参数。②电压直流且可调。③可以人工操作。④其他功能,如报警、限制、多路等等。
①显示参数:需要显示什么参数,一般显示输出的电压值,设置参数值,当前功能等等,然后再看看上级(客户)对屏幕有没有要求,对功能有没有要求。
②电压直流且可调(主要功能):这个得考虑到精度和抗干扰,即:是使用MCU的片上外设功能,还是外接电路的,如果使用片上外设功能,成本可以缩减很多,但抗干扰不好、精度不高;如果是外接电路功能,抗干扰能力强、精度高,但成本和功能强悍成正比。
③人工操作:根据自己(客户)的需求,使用何种控制方式:触屏、按键、遥控等等。分析控制方式需要的成本以及实现的难易度是否符合所给工期。
④其他功能(旁路功能):只有把主要功能完成了,旁路功能才有意义。
硬件编程学习思路
一、了解主控芯片
首先必须知道主控芯片有什么功能,了解芯片功能的途径就是“芯片数据手册”、“用户手册”这两个。STM32在这个方面做得很好,
1、F1系列芯片数据手册:
该手册用于,芯片的应用(指使用途径,工作环境,芯片选型等)参数。
每个系列都有对应型号的芯片手册
打开我们常用的大容量f103芯片手册,芯片手册最常用功能的就是芯片的引脚定义,每种容量芯片的引脚定义方式都不一样。
2、F1系列用户手册(也叫参考手册)
这个手册有详细的芯片功能介绍与描述、片上外设功能介绍与描述、寄存器描述等功能
打开参考手册,可以看到目录栏有很多书签,手册的书写习惯是:外设的简介->外设的功能介绍->外设的功能描述->外设的寄存器描述。因此用户手册(参考手册)是一个很有利的参照材料。
3、国产STC的手册
拿STC15W系列的手册来说,它将芯片手册和用户手册整合到一起,显得很臃肿,且没有书写规则,但它还是了解芯片功能的最主要途径
二、清楚编程方法
51单片机是使用寄存器的编程方法,这是最接近底层的方法,且运行速度最快。STM32可以使用寄存器的编程方法,但是由于STM32的寄存器太多,如下图,因此使用寄存器的方法开发工期会延长,因此就有了库函数的编程方法。
库函数的编程方法有两种,一种是固件库编程,这是我们常用的编程方法;还有一种是HAL库编程,这是近段时间,官方推出的库,它的优点是可移植性高,只要选择好型号就可以,且可以使用图形化编程。由于HAL库出现的时间较近,材料少。因此使用固件库编程是比较划算的。
库函数编程需要的材料就是它的“固件库手册”,也就是说明书,如果有了解到Java的话,也许会听到一个词API,固件库和其类似,不过API只是个接口,它隐藏了内容,固件库是本地库,是供单片机调用的,所以它不能隐藏内容。
回到正题,打开“固件库手册”,每一个片上外设都有完整的固件库与之对应,固件库常用于初始化外设,用XXX_Init()函数。固件库其实也是以操作寄存器的方法来编写的,只不过它的使用方法没有那么复杂,且直观,查找问题方便,但是其“程序运行效率”不高,简单来说就是速度不快。因此对于精度要求非常高的项目,还是使用寄存器的编程方法好。鉴于开发工期,因此选择固件库是比较好的。
注意,学习其他芯片的时候,可以看看它有没有固件库,因为固件库就是封装底层的操作,因此学习周期会大大减半,到时候用熟了,回过头来在看寄存器,就可以事半功倍了。
三、搜集全各种材料
硬件编程,不同于其他编程,它要面对的对象是机器、是硬件,因此在编程前或者空余时间,要有个习惯:就是搜集材料,因为事半功倍,不要到编程时才急急忙忙的找,那个时候可能还找不到,且还浪费了许多工期,上级(客户)不满意。