赞
踩
1、概述
·最近在尝试从将产品开发所使用的RTOS从FreeRTOS迁移到RT-Thread上来,手头正好有一款基于STM32F407VE芯片的控制板,因此就做了一些试用测试,今天打算新建一个软件工程来测试一下如何在RT-Thread上挂载SPI接口的Flash储存器。
2、开发过程详细记录
2.1、创建一个基于芯片的软件工程
第1步,启动RT-Thread Studio。
见图2-1-1-1,RT-Thread Studio启动成功。
第2步,进入软件工程配置界面。
见图2-1-2-1,点击File->New->RT-Thread Project菜单。
见图2-1-2-2,配置界面启动成功。
第3步,配置基于STM32F407VE芯片的软件工程。
见图2-1-3-1,配置结果如下:
输入软件工程名称:STM32F407-SPI-FOR-W25Q128-TEST;
RT-Thread版本:5.0.2;
芯片制造商:STMicroelectronics;
芯片系列:STM32F4;
芯片子系列:STM32F407;
微控制器:STM32F407;
控制台串口号:UART1(串口引脚:TX-PA9、RX-PA10);
调试器类型:JLink(接口:SWD)
以上的配置与所使用的编程环境有关,可以根据自己的实际情况进行合理选择。
配置完成后,点击Finish返回。
配置完成后,点击Finish返回。
见图2-1-3-2,软件工程在创建中,请稍等片刻。
见图2-1-3-3,软件工程创建完成,点击图标展开软件工程。
见图2-1-3-4,展开软件工程后,可见软件工程的目录结构。
第4步,编译软件工程。
见图2-1-4-1,点击软件工程名称,按快捷键CTRL+B进行编译。
见图2-1-4-2,软件工程编译中。
见图2-1-4-3,编译报错了,使用RT-Thread V5.0.2会出现这个问题,如果是使用RT-Thread 4.1.1就不会出这个问题。
第5步,解决编译报错问题。
见图2-1-5-1,编译报错问题出在没有找到宏定义:
RT_WEAK
至于为什么在boadrd.h文件中添加这个宏,这是因为这个文件是本软件工程中一个经常修改配置需要用到的文件,个人觉得方便而已,你也可以在其它地方进行添加,只要能够让编译器找到这个宏,确保软件工程编译不再出错即可。
再次进行软件工程的编译。
见图2-1-5-3,软件工程编译成功。
第6步,下载固件到目标板运行。
见图2-1-6-1,代码已经成功下载到了目标板中,并运行至main()函数入口处的断点位置。
点击图标全速运行程序。
见图2-1-6-2,在PC端启动Putty窗口中,已经可以见到固件运行后发送的LOG信息,关于Putty软件工具的作用和使用方法,请自行上网查找,这是一款可以远程登录Linux的终端工具,也可以用来与RT-Thread的MSH进行交互。
2.2.2 、给软件工程添加SPI接口设备
第1步,启动STM32CubeMX为芯片配置SPI接口。
见图2-2-1-1,双击CubeMX Setting菜单,启动STM32CubeMX软件,这是一款由ST公司提供的为其公司生产的MCU提供的生成软件代码的工具,如果你的电脑没有安装的话,,请自行去官方网站下载安装。
见图2-2-1-2,软件启动中,稍等片刻。
见图2-2-1-3,STM32CubeMX启动完成。
见图2-2-2-1,使能USART1,这里需要补充说明一下,之前已经使用过串口1,为什么在这里要重新配置串口1呢?这是因为,RT-Thread Studio在创建软件工程时,在其软件工程的driver目录下有一个名为stm32f4xx_hal_conf.h的文件,如果使用STM32CubeMX重新配置软件工程后,这个文件会被改成改名进行备份,软件工程中将会有一个由STM32CubeMX生成的新的stm32f4xx_hal_conf.h文件,后续系统的底层配置都将根据这个新的配置文件来处理,因此如果在这里不使能USART1,会导致USART1失效,从而就不能使用RT-Thread的MSH功能了。
第3步,在STM32CubeMX中使能SPI2口。
见图2-2-3-1,使能SPI2口,端口信号引脚已经根据原理图进行了正确配置。
见图2-2-3-2,点击GERNERATE CODE生成代码。
见图2-2-3-3,代码生成完成,点击Close,然后关闭STM32CubeMX回到RT-Thread Studio。
见图2-2-3-4,出现提示界面,点击OK即可。
见图2-2-3-5,可见软件工程中由STM32CubeMX生成的代码。
第4步,编译软件工程,确认软件可以被正常编译。
见图2-2-4-1,软件工程已经成功编译。
第5步,下载固件到目标板运行。
做这一步是为了确认USART1是否可以正常使用。
见图2-2-5-1,已经确认MSH与PC端的交互功能正常。
第6步,使用RT-Thread Setting配置SPI端口。
见图2-2-6-1,点击RT-Thread Setting启动配置工具。
见图2-2-6-2,移动到SPI图标处,点击浮动窗口中的configs菜单打开配置界面。
见图2-2-6-3,设置配置选项。
见图2-2-6-4,点击左上角的图标保存配置信息,稍等片刻,等待软件工程进行更新。
第7步,修改board.h文件,使能SPI2。
见图2-2-7-1,打开board.h文件,开启SPI2相关的宏定义。
第8步,编译代码并下载到目标板运行。
见图2-2-8-1,代码编译成功。
见图2-2-8-2,下载运行成功。
第9步,测试固件的MSH功能。
见图2-2-9-1,注释掉这 行LOG输出语句。
见图2-2-9-2,LOG语句已经被注释掉了。
再次编译下载运行固件。
见图2-2-9-3,Putty中可见MSH交互界面。
见图2-2-9-4,运行help命令后界面。
第10步,挂载SPI接口的W25Q128存储器。
见图2-2-10-1,在软件工程中创建一个bsp目录,在bsp目录下创建一个文件bsp_spi_for_w25q.c,在此文件中输入以下代码:
- /*****************************************************************************************/
- /*定义一个SPI设备对象*/
- struct rt_spi_device * spi_dev_w25q;
- int rt_hw_w25Q_Init(void)
- {
- rt_uint8_t dummy = 0xFF;
-
- rt_hw_spi_device_attach("spi2", "spi20", GPIOB, GPIO_PIN_12);
-
- spi_dev_w25q = (struct rt_spi_device *)rt_device_find("spi20");
- if (!spi_dev_w25q)
- {
- rt_kprintf("Can't find the spi20 device!\r\n" );
- }
- else
- { /* configure SPI*/
- struct rt_spi_configuration cfg;
- cfg.data_width = 8;
- cfg.mode = RT_SPI_MASTER | RT_SPI_MODE_3 | RT_SPI_MSB;
- cfg.max_hz = 20 * 1000 *1000; //设置工作大频率20MHz
- rt_spi_configure(spi_dev_w25q, &cfg);
- rt_spi_send(spi_dev_w25q,&dummy,1);//开启传输
- }
- return 0;
- }
- INIT_DEVICE_EXPORT(rt_hw_w25Q_Init);
- /*****************************************************************************************/

编译下载运后,在MSH窗口这个运sf命令
见图2-2-10-2, 可见sf命令的提示信息。
输入:
sf probe spi20
见图2-2-10-3,已经自动探测到了存储器芯片。
至此,挂载SPI存储器W25Q128的过程已经完成。
3、总结
挂载SPI接口Flash的步骤如下:
1、在STM32CubeMX中开启SPI的相关配置
2、在RT-Thread Setting中开启SPI的相关配置
3、在board.h文件中开启SPI接口的配置
4、编写一段SPI设备挂载初始化代码
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。