stm32f1xx_hal_conf_bak.h中使能SPI模块(不知此步是否为必须)
打开STM32 CubeMX,配置SPI,
配置其他参数
生成后关闭CubeMX。重新编译。
3.w25qxx.c文件编写
/\*
\* Copyright (c) 2006-2021, RT-Thread Development Team
\*
\* SPDX-License-Identifier: Apache-2.0
\*
\* Change Logs:
\* Date Author Notes
\* 2024-02-23 admin the first version
\*/
/\*
\* 程序清单:这是一个 SPI 设备使用例程
\* 例程导出了 spi\_w25q\_sample 命令到控制终端
\* 命令调用格式:spi\_w25q\_sample spi10
\* 命令解释:命令第二个参数是要使用的SPI设备名称,为空则使用默认的SPI设备
\* 程序功能:通过SPI设备读取 w25q 的 ID 数据
\*/
#include <rtthread.h>
#include <rtdevice.h>
#include <w25qxx.h>
#include "drv\_spi.h"
#include "spi\_flash.h"
#include "spi\_flash\_sfud.h"
#include <define\_common.h>
#include <drv\_common.h>
struct rt\_spi\_device \*spi_device;
static int rt\_hw\_spi\_flash\_init(void)
{
\_\_HAL\_RCC\_GPIOB\_CLK\_ENABLE();
rt\_hw\_spi\_device\_attach("spi2", W25Q_SPI_DEVICE_NAME, GPIOB, GPIO_PIN_12);
if (RT_NULL == rt\_sfud\_flash\_probe("W25Q128", W25Q_SPI_DEVICE_NAME))
{
return -RT_ERROR;
};
return RT_EOK;
}
void spi\_w25q\_sample(int argc, char \*argv[])
{
struct rt\_spi\_device \*spi_dev_w25q;
char name[RT_NAME_MAX];
rt\_uint8\_t w25x_read_id = 0x90;
rt\_uint8\_t id[5] = {0};
rt\_hw\_spi\_flash\_init();
if (argc == 2)
{
rt\_strncpy(name, argv[1], RT_NAME_MAX);
}
else
{
rt\_strncpy(name, W25Q_SPI_DEVICE_NAME, RT_NAME_MAX);
}
/\* 查找 spi 设备获取设备句柄 \*/
spi_dev_w25q = (struct rt\_spi\_device \*)rt\_device\_find(name);
if (!spi_dev_w25q)
{
rt\_kprintf("spi sample run failed! can't find %s device!\n", name);
}
else
{
/\* 方式1:使用 rt\_spi\_send\_then\_recv()发送命令读取ID \*/
rt\_spi\_send\_then\_recv(spi_dev_w25q, &w25x_read_id, 1, id, 5);
rt\_kprintf("use rt\_spi\_send\_then\_recv() read w25q ID is:%x%x\n", id[3], id[4]);
/\* 方式2:使用 rt\_spi\_transfer\_message()发送命令读取ID \*/
struct rt\_spi\_message msg1, msg2;
msg1.send_buf = &w25x_read_id;
msg1.recv_buf = RT_NULL;
msg1.length = 1;
msg1.cs_take = 1;
msg1.cs_release = 0;
msg1.next = &msg2;
msg2.send_buf = RT_NULL;
msg2.recv_buf = id;
msg2.length = 5;
msg2.cs_take = 0;
msg2.cs_release = 1;
msg2.next = RT_NULL;
rt\_spi\_transfer\_message(spi_dev_w25q, &msg1);
rt\_kprintf("use rt\_spi\_transfer\_message() read w25q ID is:%x%x\n", id[3], id[4]);
}
}
/\* 导出到 msh 命令列表中 \*/
MSH\_CMD\_EXPORT(spi_w25q_sample, spi w25q sample);
w25qxx.h文件代码
/\*
\* Copyright (c) 2006-2021, RT-Thread Development Team
\*
\* SPDX-License-Identifier: Apache-2.0
\*
\* Change Logs:
\* Date Author Notes
\* 2024-02-23 admin the first version
\*/
#ifndef APPLICATIONS\_W25QXX\_W25QXX\_H\_
#define APPLICATIONS\_W25QXX\_W25QXX\_H\_
#include <define\_common.h>
void spi\_w25q\_sample(int argc, char \*argv[]);
#endif /\* APPLICATIONS\_W25QXX\_W25QXX\_H\_ \*/
在main函数中调用
int main(void)
{
led\_init();
uart\_init();
spi\_w25q\_sample(1, RT_NULL);
}
下载运行后课打印w25qxx已挂载,并读出ID号
三、使用EasyFlash软件包
1.打开RT-Thread Settings,添加软件包,搜索“EasyFlash”并添加。
点击编译出现50多个错误。(系统版本为4.1.1)。
2.在组件中启用FAL
3.在项目中添加ef_fal_port.c和fal_cfg.h
4.main函数编写
/\*
\* Copyright (c) 2006-2024, RT-Thread Development Team
\*
\* SPDX-License-Identifier: Apache-2.0
\*
\* Change Logs:
\* Date Author Notes
\* 2024-02-21 RT-Thread first version
\*/
#include <rtthread.h>
#include <rtdevice.h>
## 最后
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**
**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/d788c6dff9f10f46dafed9171b29fa7b.png)
![img](https://img-blog.csdnimg.cn/img_convert/1d847c8e39344dee26979bb69dfa256a.jpeg)
![img](https://img-blog.csdnimg.cn/img_convert/55a0c50ac7768efddc0d23ee081a106f.png)
![img](https://img-blog.csdnimg.cn/img_convert/2fdaa7a9acd9516b12113e65d41ececa.png)
![img](https://img-blog.csdnimg.cn/img_convert/967a6b1b3171f439dabf584c3a31b05c.png)
![img](https://img-blog.csdnimg.cn/img_convert/6211f74010a13e706360f1d5b4c1d5e7.png)
![](https://img-blog.csdnimg.cn/img_convert/0276dcb400f1274c636485867bb13fa8.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**
[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!
升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**
[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!