嵌入式单片机教学(二)

251
0
2020年11月30日 09时59分

引言

从这节开始,我们就要去学习单片机相关的知识了,不过不光是单片机,更多的应该是教同学们如何去做一个完整的项目,我们就以STM32F103RBT6这款芯片来作为我们的教学例子。教大家如何去摆脱淘宝库,使用ST官方hal库。
首先,很多同学应该都买过淘宝的STM32相关的开发板吧,学习完那些之后发现,自己好像都是在基于卖家的库去编程,并没有接触到这个单片机的底层。这个时候,如果让你换个芯片去做项目设计,大家可能还是不知道如何下手。
那么,从这节开始,就带大家去学习怎么从0开始搭建一个完整的项目。


不过由于小白还在读研,近期又逢期末阶段,所以可能会拖更几天,请大家不要介意哈~靴靴~


正文

下面我们进入正题:

第一步:建立一个项目的整体思路

在我们设定好一个项目作为目标的时候,此时我们脑子里就需要慢慢去构建这个项目的实现思路了,包括具体的功能应该用什么方法实现。当然这个思路并不是一开始就能够很轻松的具备的,不过随着项目经验的提升,大家会形成越累越成熟的思路。
我们这个系列同样采用实例教学,本系列的教学项目就是脉搏血氧的采集硬件。
OK,在我们知道我们要做的项目之后,我们现在就会去思考,需要实现哪些功能呢?
首先,当然是最重要的采集部分,那么就会需要一个脉搏采集的传感器,接着我们还需要一个显示部分,用于显示当前的脉搏血氧数据。
整体就这两个部分,下面我们就开始一步一步去实现吧~

第二步:硬件选型以及设计电路

在这部分,我们需要用到两个软件工具,这个在上一节有让大家去进行下载的,一个是AD,另一个是CubeMX,因为没有看到有留言说下载有问题的,那我们就直接开始对使用环节的教学。
首先我们需要去淘宝上搜一下相关的传感器模块,找到可以使用的传感器,然后看其通信方式进行选型。
经过挑选,我们最后选择的传感器是MAX30102。通常卖家会发给你相关的传感器资料,包括模块生产厂商都会有一些最基础的资料供你使用。

 

嵌入式单片机教学(二)插图

 

在看完这个传感器后,我们发现上面除了电源和地线,还有SCL和SDA,那么很明显这个传感器就是采用IIC通信的,也就是说我们后面硬件设计上,需要让MCU和这个传感器以IIC通信的方式交互数据。

 

嵌入式单片机教学(二)插图(1)

 

然后这些就是我们能拿到的资料,已经非常具体了,下面我们开始硬件的设计。


我们会用到大家都比较熟悉的软件AD来画板子。首先,我们可以去立创下载他们的库来使用,里面有许多不同封装的STM32。

 

嵌入式单片机教学(二)插图(2)

 

接下来我们需要进行电路设计,首先是单片机的最小系统板,这个就是大家平时学习到的一些基础知识了,最小系统板里包括了单片机的起振,复位电路,还有电源和下载口的电路。这是每个工程开始都需要画的,这边推荐大家可以备一个template,这样,下次做项目只需要复制这个template然后在最小系统板的基础上进行设计就好啦。

 

嵌入式单片机教学(二)插图(3)

 

嵌入式单片机教学(二)插图(4)

 

嵌入式单片机教学(二)插图(5)

 

第一张图里红色框框内的就是MCU的最小系统板部分啦,起振电路和复位电路就不多讲了,这个还是比较简单的,然后就是烧写口,这个我们可以在CubeMX里面找到这几个引脚。

 

嵌入式单片机教学(二)插图(6)

 

如上图,我们可以点开cubemx软件,选择好对应的芯片型号之后,对芯片的管脚进行功能配置,IO口的功能可以直接左键芯片引脚进行功能设置。
其他芯片功能,外设资源等都可以在左侧选项栏里进行对应配置,包括定时器,SPI,IIC,UART,CAN,RTC,ADC,DMA等等。
下面我们介绍一下这个cubemx的配置流程,首先我们将芯片的时钟进行配置。

 

嵌入式单片机教学(二)插图(7)

 

3号方框内的频率我们直接输入最大的,然后回车,让系统自动分配,然后4号方框内的两个频率如果没有特殊要求,就尽量保持一致就好啦。
配置好时钟之后,我们会针对我们的项目需求,去进行功能配置。首先,我们本系列教程需要做的是血氧脉搏的测量,之前我们使用的传感器是IIC通信的,所以我们这边需要去配置一下IIC的功能,但是我们采用软件IIC,不用硬件IIC,因为使用硬件IIC上电顺序可能会有点讲究,这样会妨碍我们的在线调试。因此我们用软件IIC,而软件IIC仅需要两个GPIO管脚即可,因此我们配置如下图:

 

嵌入式单片机教学(二)插图(8)

 

除此之外,我们还需要一个中断,来读取传感器的值,我们设置一个5ms定时器,用来触发中断,配置如下:

 

嵌入式单片机教学(二)插图(9)

 

我们使用TIM2并且将NVIC,也就是中断使能打上勾,然后我们需要设置这个定时器的分频系数,配置如下:

 

嵌入式单片机教学(二)插图(10)

 

Prescaler和Counter Period里的数字都需要进行-1,此时我们的定时器技术时间就是72MHz / 10 / 36000 = 200Hz,也就是5毫秒,这样我们就完成了五毫秒触发一次的中断。
最后我们要设置一下烧写方式,以及我们的时钟,配置如下:

 

嵌入式单片机教学(二)插图(11)
嵌入式单片机教学(二)插图(12)

 

我们选择的是4pin的JTAG烧写模式,到此配置完了我们所需的功能,我们就需要生成hal库,以及代码文件了,操作如下:

 

嵌入式单片机教学(二)插图(13)

 

我们这边使用的IDE是IAR因此选择EWARM,如果习惯用keil的话就选择MDK就好啦。最后点击右上角的GENERATE CODE生成代码,我们就能在目录下找到代码工程了,文件如下图:

 

嵌入式单片机教学(二)插图(14)
嵌入式单片机教学(二)插图(15)

 

我们在EWARM文件夹下点开.eww文件,就能打开整个工程的代码啦。
到这边就完成了我们的电路绘制,硬件工程配置,以及软件代码库的生成,下一步,我们就需要编写我们的代码了。

 


总结

本节内容我们完成了电路绘制,以及我们的软件代码库的配置。当然说起来可能很简单,在实现这些东西的过程中还是会有很多细节的,比如芯片使用,以及传感器的使用,都涉及到硬件datasheet的查阅,包括其外围电路的涉及等等。当然新手的话,可以选择资料较多的芯片进行电路设计。
选择好电路后,配置芯片的资料也相对较多,如果需要配置其他功能的,都可以很轻松的找到资料。
我们会在下一节的内容中开始讲解hal库的使用。

发表评论

后才能评论