STM32CUBEMX_SPI接口操作片外FLASH-W25Q128

实验1:点亮LED
实验2:按键控制LED
实验3:外部中断检测按键
实验4:扩展芯片检测按键
实验5:定时器实现LED闪烁
实验6:基于PWM的呼吸灯
实验7:检测输入的PWM频率和脉宽
实验8:串口的输入和输出
实验9:串口使用PRINTF函数
实验10:SPI接口操作片外FLASH
实验11:SPI接口操作TF卡
实验12:IIC接口操作OLED屏幕
实验13:ADC电压采样

W25Q128是一片128Mbit的flash芯片,相当于16MB的存储空间。本实验中,使用STM32的SPI接口对该芯片进行读写操作,实现关键数据的保存。

对应的STM32的管脚如下:

步骤如下:

1、新建工程,进行基本配置。通过点击“ACCESS TO MCU SELECTOR”来创建一个新的工程:

参照实验1,芯片选择“STM32F103C8”。

打开外部时钟,点击“System Core”,选择RCC,在右侧弹出的菜单栏中选择“Crystal/Ceramic Resonator”。

选择调试接口,点击“System Core”,选择RCC。,在右侧弹出的菜单栏中选择“Serial Wire”。

2、片选信号。如图,配置PC13为W25Q128的片选信号,将其配置为输出模式,并命名为“W25_CS”,注意大写。

3、配置SPI接口。如图,位置1选中SPI1,位置2选择“Full-Duplex Master”,NSS那里选择“Disable”。

位置3,主要配置SPI的速度,也就是“Buad Rate”,通过上面的分频系数来控制“Prescaler”。

4、配置串口。参照上一节,打开串口1,设置波特率为115200。在后续的工程中,使用printf函数打印相关信息。

5、时钟配置。参照实验1.

6、生成工程。参照实验1的步骤7,进行相应配置,生成工程文件。

7、修改工程-添加w25qxx驱动程序。该程序为github上网友分享,这里演示下如何添加到工程中。驱动程序下载后是一个压缩包,解压,我们需要的是其中几个文件,如下:

在路径“USB09SPIW25\Drivers\CMSIS\Device”下新建一个文件夹“w25qxx”,把上面那几个文件复杂、粘贴到该文件夹内。

然后打开工程,如图,点击“Option for Target”按钮,选择“C/C++”选项卡,点击“Include Paths”后面的按钮。

在弹出的页面中,点击位置1,为当前工程添加一个新的驱动程序路径;点击位置2,选择刚才我们创建的文件夹。注意是文件夹,不是文件,因为这里添加的是路径。

我这里已经添加好了,然后直接点击OK即可。

接下来,如下鼠标右键点击“Application/User/Core”,在弹出的对话框里选择“Add Existing Files to Group ‘Application/User/Core’..”

在弹出的对话框中,选择刚才创建的文件夹中的“w25qxx.c”文件,然后依次点击”Add”、“Close”即可。

这时,该文件会出现在左侧的工程栏里,如下:

8、修改工程-调用w25qxx驱动程序。位置1,定义一个256长度的数组,可以存储一页的数据:

代码:

uint8_t w25_buffer[256];

位置2,初始化w25qxx芯片,擦除第0页,然后写入连续的数字,再读出来。

代码:

	W25qxx_Init();
	for(i = 0; i <256; i++)
	{
		w25_buffer[i] = i;
	}
	W25qxx_EraseSector(0);
	W25qxx_WritePage(w25_buffer,0,0,256);
	for(i = 0; i <256; i++)
	{
		w25_buffer[i] = 0;
	}
	W25qxx_ReadPage(w25_buffer,0,0,256);

位置3,通过串口,打印读出来的值。

代码:

		for(i = 0; i < 256; i++)
		{
			printf("value is :%d! \r\n",w25_buffer[i]);
		}
		printf("\r\n");
		HAL_Delay(1000);

9、串口printf。此部分参照上一节即可。

修改后,保存,编译、下载,重新上电。使用串口助手连接板子和电脑,可以看到串口助手收到打印信息。

整个过程有PPT、数据手册、原理图、源码、相关软件,在公众号(单片机爱好者)回复关键词:002或者STM32CUBEMX教程,即可获取下载链接。

留下评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据