(1)更改GPIO配置
由于没有使用到硬件的SPI,那么将硬件初始化SPI部分进行删除,取消GPIO的复用功能,然后更改MOSI和SCLK引脚为输出模式,MISO更改为输入模式。
(2)改写uint8_t SPI1_SendByte(uint8_t byte)函数
void w25qxx_init(void)
{
/*!< Enable GPIO clocks,使能GPIOB硬件时钟 */
RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOB, ENABLE);
//端口配置 PB3 PB5
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_5; //3、5号引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOB,&GPIO_InitStructure);
//端口配置 PB4
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //4号引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //输入模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOB,&GPIO_InitStructure);
//初始化片选引脚 PB14
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; //14号引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //输出功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOB,&GPIO_InitStructure);
//由于M4芯片还没有真正配置好,先不让外部SPI设备工作
W25QXX_SS = 1;
}
//模拟SPI时序必须严格按照外围设备的时序图进行操作
uint8_t SPI1_SendByte(uint8_t byte)
{
uint32_t i=0;
uint8_t d=0;
for(i=0; i<8; i++)
{
//MSB,最高有效位优先
if(byte & (1<<(7-i)))
W25QXX_MOSI = 1;
else
W25QXX_MOSI = 0;
//设置SCLK线为低电平
W25QXX_SCLK = 0;
delay_us(2);
//由于是同步通信,这个时候可以读取数据
if(W25QXX_MISO)
d|=1<<(7-i);
//设置SCLK线为高电平
W25QXX_SCLK = 1;
delay_us(2);
}
return d;
}
上一篇:STM32模拟IIC通信
下一篇:STM32的ADC转换(普通模式)
推荐阅读

推荐帖子
- LWip-1.4.1+UCOS_II在STM32F107VCT6芯片上的移植
- 硬件框架:STM32F107VCT6+DP83848 软件框架:LWip-1.4.1+UCOS_II 移植手册:《超纬电子》 移植源码:《超纬电子》 《超纬电子》移植用的开发板 LWip+UCOS的移植手册我们采用一步一步的方式,进行讲解,力求看后就能上手Lwip+UcOS的移植。 需要大家对UCOS有一定的了解,因为我们没有讲解UCOS在STM32上的移植。 LWip-1.4.1+UCOS_II在STM32F107VCT6芯片上的移植
-
chaoweidianzi
stm32/stm8
- 免费测评-拓普微智能显示模块(7) 实际应用
- 本帖最后由wenyangzeng于2021-11-815:08编辑 免费测评-拓普微智能显示模块(7)实际应用作为实际应用的评测,使用STM8S105S4-PKT来驱动这片智能屏。安排如下: 1、STM8S105S4-PKT的RS232串口连接到智能屏的RS232串口。 2、STM8S105S4-PKT的ADC3原本连接一只电位器做ADC转换,就利用ADC3的转换结果数据驱动智能屏的一个进度条的显示。 3、智能屏设置2个不同背景页面,第一页面安排
-
wenyangzeng
测试/测量
- 小熊派华为物联网操作系统LiteOS裸机驱动移植01-以LED为例说明驱动移植
- 1.LiteOS裸机驱动移植系列俗话说的好,光说不练假把式,上一个系列LiteOS内核实战教程中讲述了内核中任务如何管理、如何使用信号量同步多个任务的运行,如何用互斥锁保护共享资源,如何申请分配动态内存空间,但是在嵌入式系统中,如果不能将内核有效的应用在实际场景中控制外围设备,那么一切都是纸上谈兵。在这个系列中,本教程将会带领大家,手把手添加一些常用的外设驱动到LiteOS系统中,掌握外设驱动的移植方法。2.何为裸机驱动 驱动层代码,简单通俗的来说就是向上给用户提供一层可以控制设
-
小熊派开源社区
编程基础
- 哪个大虾帮忙解决一下? java.lang.IllegalArgumentException的问题
- 我编译时一直出现下面得错误: #java.lang.IllegalArgumentException #atcom.mathworks.util.NativeJava.hWndFromComponent(NativeJava.java:183) #atsun.awt.windows.WToolkit.eventLoop(NativeMethod) #atsun.awt.windows.WToolkit.run(UnknownSource) #a
-
cncdrawer
嵌入式系统
- 实验8.多路开关状态指示
- 1.实验任务如下图所示,单片机的P1.0-P1.3接四个发光二极管L1-L4,P0.4-P0.7接了四个开关K1-K4,编程将开关的状态反映到发光二极管上。(开关闭合,对应的灯亮,开关断开,对应的灯灭)。2.电路原理图图4.3.13.系统板上硬件连线1、将p0.0--p0.3脚的四个短路帽拔掉。2、使用双头连接线将最下边的四个键的公用线连接至电源负极3、最下边的四个键有效4.程序设计内容(1.开关状态检测对于开关状态检测,相对单片机来说,是输入关系,
-
rain
单片机
- #以拆会友#怡成5D-1血糖仪源代码
- 虽然本贴不是拆解,但我想,有了这个源代码,让拆解更是如虎添翼 @okhxyyo怡成5D-1血糖仪源代码来了 #以拆会友#怡成5D-1血糖仪源代码
-
exiao
DIY/开源硬件专区
设计资源 培训 开发板 精华推荐
最新视频课程更多
- 100分挑战高手:DriverWorks写过滤驱动时的一个选项不知道怎么设置(见内)!
- 关于游戏中的按钮和对话框经常在游戏中会有一些按钮,以及一些弹出对话框,这些按钮和对话框都会有透明效果,那么如果这些按钮和对话框是继承于MFC中的CButton和
- 我用SQL SEVER 2005 中创建了个移动数据库 .sdf的数据库,将它拷到我EVC模拟器中用其中的isqlw20(SQLCE2。0)为什么打不开
- 攒分,请无视攒分,请无视
- 请教高手:有没有windows mobile 6.0系统上发送短信的函数?(vs2005 c++)
- TI采用 MSP430 的 3.6V 至 6.0V 输入,高效 DC/DC 转换器参考设计
- 跪求程序!!【汇编】PWM 根据温度控制灯泡的渐亮 渐灭。。。
- 求16C550芯片 WINCE5.0版本驱动
- 请问 附图中一个KEIL工程项目中哪些部分是自动生成的
- 求助 :怎样把驱动程序console.dll放到Pocket PC的Windows 目录里?