快讯
HOME
快讯
正文内容
stm32f407 nand RT-Thread studio (七)添加W25Q128驱动(基于STM32F407芯片)
发布时间 : 2024-11-28
作者 : 小编
访问数量 : 23
扫码分享至微信

RT-Thread studio (七)添加W25Q128驱动(基于STM32F407芯片)

注意:使用STM32 ST-LINK 下载官方生成的bootloader后,直接使用RT-thread studio下载程序不能工作,需要用ST-LINK 格式化后再下载APP程序才能正常。

在RT-thread settings 配置页面启用 SPI/SFUD组件,并配置相关参数

Board.h 中取消SPI2禁用注释

Board.c 中增加SPI2 的初始化程序

在STM32F4xx_hal_conf.h 取消SPI功能注释

添加W25Q128实例程序

#define W25Q_CS GET_PIN(I, 0)

#define W25Q_SPI_DEVICE_NAME "spi20"

#define SPI_BUS_NAME "spi2"

#define W25Q_FLASH_NAME "norflash0"

rt_uint8_t wData[4096] = {"SPI bus write data to W25Q flash."};

rt_uint8_t rData[4096];

static int rt_hw_spi_flash_init()

{

rt_err_t ree = RT_EOK;

ree = rt_hw_spi_device_attach(SPI_BUS_NAME, W25Q_SPI_DEVICE_NAME, GPIOI, GPIO_PIN_0);

/* 使用 SFUD 探测 spi10 从设备,并将 spi10 连接的 flash 初始化为块设备,名称 W25Q128 */

if (RT_NULL == rt_sfud_flash_probe(W25Q_FLASH_NAME, W25Q_SPI_DEVICE_NAME))

{

return -RT_ERROR;

}

return ree;

}

INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init);

static 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};

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);

编译下载程序,显示如下,W25Q128驱动安装已经成功

「博文连载」STM32F407ZET6的RESET管脚与GND短路问题

串口通信是一种设备间非常常用串行通信(数据交互)方式,因为它比较简单便捷,大部分电子设备支持串口通信方式,电子工工程师调试设备时常用的接口;

串行通信:占用I/O较少,速度上较慢点

并行通信:占用I/O较多,速度上快速

常见通信方式

1)单工

单工通信数据只能往一个方向发向(收音机)

2)半双工

同一时间内只能传输或者发送数据(呼叫机)

3)全双工(串口)

同一时间内数据可以发送及接收(电话机)

STM32F407ZET6用串口通过键盘控制LED灯的亮灭

使用串口通信配置库函数流程

1)串口时钟使能,GPIO时钟使能。

2)设置引脚复用器映射:调用GPIO_PinAFConfig函数。

3)GPIO初始化设置:要设置模式为复用功能。

4)串口参数初始化:设置波特率,字长,奇偶校验等参数。

5)开启中断并且初始化NVIC,使能中断(如果需要开启串口中断才需要这个步骤)。

6)使能串口。

7)编写中断处理函数:函数名格式为USARTx_IRQHandler(x对应串口号)。

STM32F407ZET6的RESET管脚与GND短路:

自己设计的电路板上,CPU与LAN8720A相连运行正常。然而过一段发现CPU无法下载(出现在焊好的2个板卡上),经过查找,RESET管脚与GND短路,LAN8720A能正常运行,导致无法下载程序。不知道CPU是否已经坏了?

如果RESET脚与GND短路了,下载肯定是做不了。从你描述来看,MCU很可能处于复位状态,是什么导致复位你要查下。单从这点不能断定芯片已经坏了。

招聘信息

相关问答

如何提升 stm32f407 +lwip的速度几百k?

用无线传输啊……影响速度的因素有以下几点:一、服务器端的数据处理速度(就是CPU、内存等性能有影响)。二、传输网线速度(你用的无线传输300M,峰值速度...用...

stm32f407 的i2c引脚可以通用吗?

STM32F103有的功能407都有,并且这些功能的引脚完全兼容,只是程序不同而已。。。而STM32F407有的功能103不一定有,因为407强大些。。。。。。希望对你有用普...

stm32f407 怎么与舵机相连相连?

控制舵机直接连就可以了。控制线接STM32的PWM输出口,剩下两个电源别接反就行,最好板子的电源是外接电源不用USB的,USB电流最大500mA,我怕不够。控制舵机直接...

stm32f407 mcu是多少位?

从这款芯片的官网介绍来看:【STM32F415xx,STM32F417xx】RMCortex-M432bMCU+FPU,210DMIPS,upto1MBFlsh/192+4KBRM,...

stm32f407 的can1和can2有什么不同?

最近也在做F4系列CAN2,总是不成功。但是具体怎么处理这种不同,貌似没有地方有详细的解释。现在我配置的CAN2可以在Loopback模式下正常进入接收中断。但是Norm...

stm32f407 单片机用串口线控制灯?

一般用普通的io引脚,控制放大器,去驱动灯的亮灭一般用普通的io引脚,控制放大器,去驱动灯的亮灭

stm32f407 计算负数的问题intangle_gan=0; if((TIM5-> CNT)> ...

[最佳回答]本来就是数据类型引起的问题,会不会是补码问题

STM32F407 如何输出8.192MHz时钟?

如果STM32F407用的是8MHz的晶振,不可能输出8.192MHz时钟,除非用的是4.096MHz/8.192MHz/12.228MHz/16.384MHz晶振,可以用过定时器PWM输出8.192...

 天启之门手游  58同城团购 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2024  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部