引言
从这节开始,我们就要去学习单片机相关的知识了,不过不光是单片机,更多的应该是教同学们如何去做一个完整的项目,我们就以STM32F103RBT6这款芯片来作为我们的教学例子。教大家如何去摆脱淘宝库,使用ST官方hal库。 首先,很多同学应该都买过淘宝的STM32相关的开发板吧,学习完那些之后发现,自己好像都是在基于卖家的库去编程,并没有接触到这个单片机的底层。这个时候,如果让你换个芯片去做项目设计,大家可能还是不知道如何下手。 那么,从这节开始,就带大家去学习怎么从0开始搭建一个完整的项目。
不过由于小白还在读研,近期又逢期末阶段,所以可能会拖更几天,请大家不要介意哈~靴靴~
正文
下面我们进入正题:
第一步:建立一个项目的整体思路
在我们设定好一个项目作为目标的时候,此时我们脑子里就需要慢慢去构建这个项目的实现思路了,包括具体的功能应该用什么方法实现。当然这个思路并不是一开始就能够很轻松的具备的,不过随着项目经验的提升,大家会形成越累越成熟的思路。 我们这个系列同样采用实例教学,本系列的教学项目就是脉搏血氧的采集硬件。 OK,在我们知道我们要做的项目之后,我们现在就会去思考,需要实现哪些功能呢? 首先,当然是最重要的采集部分,那么就会需要一个脉搏采集的传感器,接着我们还需要一个显示部分,用于显示当前的脉搏血氧数据。 整体就这两个部分,下面我们就开始一步一步去实现吧~
第二步:硬件选型以及设计电路
在这部分,我们需要用到两个软件工具,这个在上一节有让大家去进行下载的,一个是AD,另一个是CubeMX,因为没有看到有留言说下载有问题的,那我们就直接开始对使用环节的教学。 首先我们需要去淘宝上搜一下相关的传感器模块,找到可以使用的传感器,然后看其通信方式进行选型。 经过挑选,我们最后选择的传感器是MAX30102。通常卖家会发给你相关的传感器资料,包括模块生产厂商都会有一些最基础的资料供你使用。
在看完这个传感器后,我们发现上面除了电源和地线,还有SCL和SDA,那么很明显这个传感器就是采用IIC通信的,也就是说我们后面硬件设计上,需要让MCU和这个传感器以IIC通信的方式交互数据。
然后这些就是我们能拿到的资料,已经非常具体了,下面我们开始硬件的设计。
我们会用到大家都比较熟悉的软件AD来画板子。首先,我们可以去立创下载他们的库来使用,里面有许多不同封装的STM32。
接下来我们需要进行电路设计,首先是单片机的最小系统板,这个就是大家平时学习到的一些基础知识了,最小系统板里包括了单片机的起振,复位电路,还有电源和下载口的电路。这是每个工程开始都需要画的,这边推荐大家可以备一个template,这样,下次做项目只需要复制这个template然后在最小系统板的基础上进行设计就好啦。
第一张图里红色框框内的就是MCU的最小系统板部分啦,起振电路和复位电路就不多讲了,这个还是比较简单的,然后就是烧写口,这个我们可以在CubeMX里面找到这几个引脚。
如上图,我们可以点开cubemx软件,选择好对应的芯片型号之后,对芯片的管脚进行功能配置,IO口的功能可以直接左键芯片引脚进行功能设置。 其他芯片功能,外设资源等都可以在左侧选项栏里进行对应配置,包括定时器,SPI,IIC,UART,CAN,RTC,ADC,DMA等等。 下面我们介绍一下这个cubemx的配置流程,首先我们将芯片的时钟进行配置。
3号方框内的频率我们直接输入最大的,然后回车,让系统自动分配,然后4号方框内的两个频率如果没有特殊要求,就尽量保持一致就好啦。 配置好时钟之后,我们会针对我们的项目需求,去进行功能配置。首先,我们本系列教程需要做的是血氧脉搏的测量,之前我们使用的传感器是IIC通信的,所以我们这边需要去配置一下IIC的功能,但是我们采用软件IIC,不用硬件IIC,因为使用硬件IIC上电顺序可能会有点讲究,这样会妨碍我们的在线调试。因此我们用软件IIC,而软件IIC仅需要两个GPIO管脚即可,因此我们配置如下图:
除此之外,我们还需要一个中断,来读取传感器的值,我们设置一个5ms定时器,用来触发中断,配置如下:
我们使用TIM2并且将NVIC,也就是中断使能打上勾,然后我们需要设置这个定时器的分频系数,配置如下:
Prescaler和Counter Period里的数字都需要进行-1,此时我们的定时器技术时间就是72MHz / 10 / 36000 = 200Hz,也就是5毫秒,这样我们就完成了五毫秒触发一次的中断。 最后我们要设置一下烧写方式,以及我们的时钟,配置如下:
我们选择的是4pin的JTAG烧写模式,到此配置完了我们所需的功能,我们就需要生成hal库,以及代码文件了,操作如下:
我们这边使用的IDE是IAR因此选择EWARM,如果习惯用keil的话就选择MDK就好啦。最后点击右上角的GENERATE CODE生成代码,我们就能在目录下找到代码工程了,文件如下图:
我们在EWARM文件夹下点开.eww文件,就能打开整个工程的代码啦。 到这边就完成了我们的电路绘制,硬件工程配置,以及软件代码库的生成,下一步,我们就需要编写我们的代码了。
总结
本节内容我们完成了电路绘制,以及我们的软件代码库的配置。当然说起来可能很简单,在实现这些东西的过程中还是会有很多细节的,比如芯片使用,以及传感器的使用,都涉及到硬件datasheet的查阅,包括其外围电路的涉及等等。当然新手的话,可以选择资料较多的芯片进行电路设计。 选择好电路后,配置芯片的资料也相对较多,如果需要配置其他功能的,都可以很轻松的找到资料。 我们会在下一节的内容中开始讲解hal库的使用。