最近刚得到一块F072的NUCLEO板,闲来无事测试了F072的SPI,基于mbed平台的离线编程,C++编程相比C简单很多,和HAL库或者标准库相比,mbed操作相对简单,但是由于加入了C++,库读起来就没那么简单了!下面是具体操作过程:1.在github上下载mbed的库,直接百度搜索mbed github就能看到网址,mbed的工程师会不定期的在github上更新mbed库,下载速度有点慢(ps:由于国内网络原因,我把mbed上传到百度云,地址会在帖子末尾贴出来)。
2.mbed库下载完了之后可以浏览下库的结构如下图所示,大部分基本的库文件都在mbed\libraries\mbed目录下,完整的库还包含usb、以太网等等的库
由于我们只使用SPI所以不必管其他的库,先新建一个文件夹(LCD5110),将mbed\libraries\mbed这个文件夹全部拷贝到新建的文件夹(LCD5110)下。
3.由于我使用的是f072所以可以删除一些无关的文件,主要在mbed\libraries\mbed\targets\cmsis和mbed\libraries\mbed\targets\hal目录下,cmsis目录要删除的东西如下图所示:(删除选中的)
hal目录下删除的东西如下图所示:(删除选中的)
4.在第2步新建的目录(LCD5110)下再新建一个目录(user),放自己写的main函数文件及IAR工程,新建IAR工程目录(自定名字(我的为IAR,位于user目录下)),建好后大致目录与下图所示:
5.新建IAR工程,在IAR工程下新建几个group如下图所示,名字自定(我的和上面的目录名类似),建好后将对应的目录.cpp、.c、.h、.s文件加入到group中(注意那个startup_stm32f072xb.s位于mbed\targets\cmsis\TARGET_STM\TARGET_STM32F0\TARGET_NUCLEO_F072RB\TOOLCHAIN_IAR目录下),可以设置选择添加指定文件类型,设置如下图所示:
6.添加完成上述mbed库文件后,自己在user文件夹下新建一个xxx.cpp(我的为main.cpp),然后在里面写一段main函数代码(代码如下所示)并加入到IAR的user组中:
#include “mbed.h”
int main(void)
{
}
7.更改IAR的相关设置,具体设置如图所示:(网页排版原因图调到了最后面)
8.设置完成后就可以编译了,编译大概40s(根据每个人的电脑不同,时间可能不一样),编译过程中会出现很多警告,编译完成如下图所示出现了100多个警告,这些警告大多与编译器的识别文件有关,还有一些是强制转换出现的警告,不妨碍程序运行。
再次编译会发现警告全无:
9.测试一下工程是否正确可以写一个简单的闪烁LED的程序
#include “mbed.h”
DigitalOut led(LED1);
uint32_t ti;
int main(void)
{
while(1)
{
ti=HAL_RCC_GetSysClockFreq();
led=!led;
wait(1);
}
}
编译一下进入调试,选择view菜单下的live watch,将ti加入live watch可以看到nucleo板的运行主频(我的加了HSE8 MHz,ti=48MHz,使用hsi的未测试)。另外板子上的led会闪烁,说明工程是完整的。
10.加入SPI的代码(由于时间原因,直接将源码贴出),SPI代码主要位于lcd.cpp和main.cpp,另外还有几个lcd5110的字库.h文件
mbed库的百度云地址:
http://pan.baidu.com/s/1bn0EXqf
mbed库SPI操作lcd5110源码:https://m.eeworld.com.cn/bbs/forum.php?mod=attachment&aid=MTg2MzI0fDMyOGYwZGIzOTAwNTRhM2NkYjQ4YjVkMmRlZTU5MjRjfDE3MzE2NjA5MTA%3D&request=yes&_f=.zip