ministm32 spi1 重映射的spi1的频率是多少

一、STM32F4xx系列的SPI特点:
1. 支持全双工的3线SPI模式(即SCK, MISO, MOSI)
2. 支持单工2线传输,同时数据线可以设置成单向或者双向模式
3. 8-bit, 16-bit可选的数据长度
4. 可选主从模式,并且支持多主模式
5.&主模式8种波特率选择(最高波特率fPCLK/2),从模式最高频率为fPCLK/2
6. 主从模式下,片选线(NSS)可以设置为硬件控制或软件控制,同时支持主/从操作下的动态转换
7. 时钟线的极性和相位可以通过寄存器设置
8. 移位寄存器可以设置成高位先出(MSB-first)或者低位先出(LSB-fisrt)
9. 具有SPI 总线忙碌(bus busy)标志位
10. 支持 SPI TI 模式
11. 支持硬件CRC
可以在数据流后传输CRC(发送模式)
自动校验校验CRC(接收模式)
12.具有主模式错误标志位,溢出标志位,CRC错误校验标志位,同时可触发中断
13. 1-byte发送/接受缓存,并且支持DMA请求。
二、传输过程中的状态标志位(BSY, TXE, RXNE)
1. 全双工主模式连续传输
&图1. 全双工主模式连续传输时序图
BSY 在传输时硬件置1,传输完成后硬件清0,图1方框①所示
当Tx缓存器无数据时,TXE置1;对DR(数据寄存器,下同)进行写操作将使TXE清0,图1方框②所示
当SPI接收到完整的数据后(Rx 缓存器不为0),RXNE将置1;对DR进行读操作将使RXNE清0,图1方框③所示
2. 全双工从模式连续传输
图2. &全双工从模式连续传输
BSY在传输期间硬件置1,在下一次传输的第一个SPI时钟周期硬件清0,然后再由硬件置1,图2方框①所示
当Tx缓存器无数据时,TXE置1;对DR进行写操作将使TXE清0,图2方框②所示
当SPI接收到完整的数据后(Rx 缓存器不为0),RXNE将置1;对DR进行读操作将使RXNE清0,图2方框③所示
3. 单工发送主模式连续传输
图3. 单工发送主模式连续传输时序图&
BSY在传输期间硬件置1,在传输完成后硬件清0,图3方框①所示
当Tx缓存器无数据时,TXE置1;对DR进行写操作将使TXE清0,图3方框②所示
4. 单工发送从模式连续传输
图4. 只发送从模式连续传输时序图
BSY在传输期间硬件置1,在下一次传输的第一个SPI时钟周期硬件清0,然后再由硬件置1,图4方框①所示
当Tx缓存器无数据时,TXE置1;对DR进行写操作将使TXE清0,图4方框②所示
5. 单工接收模式连续传输
图5. 单工接收模式连续传输时序图
当SPI接收到完整的数据后(Rx 缓存器不为0),RXNE将置1;对DR进行读操作将使RXNE清0,图5方框①所示
6. 非连续传输
图6. 非连续传输时序图
BSY 在传输期间硬件置1,在每次传输完成后置0,如图6方框①所示
当Tx缓存器无数据时,TXE置1;对DR进行写操作将使TXE清0,图6方框②所示
三、连续传输与非连续传输的定义
& & & 主模式下,假如程序能很快地检测TXE的上升沿或TXE中断(即发送缓存器为空),在当前数据还未发送完成时(即移位寄存器还有数据尚未发送完),对DR寄存器进行写操作,这种情况称作连续传输,传输过程中SPI CLK是连续的,如图1~图5所示。
& & & 反之,假如在对DR寄存器进行写操作时,上一次的数据已发送完(即移位寄存器为空),这种情况称为非连续传输,传输过程中SPI CLK是断续的,如图6所示。
/&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& THE END&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/
阅读(...) 评论()ALIENTEK MiniSTM32开发板硬件详解
日 11:11 来源:互联网 作者:秩名 (0)
  ALIENTEK MiniSTM32开发板是一款迷你型的开发板,小巧而不小气,简约而不简单。ALIENTEK MiniSTM32开发板的特点包括:
  1)小巧。整个板子尺寸为8cm*10cm*2cm(包括液晶,但不计算铜柱的高度)。
  2)灵活。板上除晶振外的所有的IO口全部引出,特别还有GPIOA和GPIOB的IO口是按顺序引出的,可以极大的方便大家扩展及使用。
  3)资源丰富。板载十多种外设及接口,让你畅游STM32
&&&&&&& 她的外观尺寸只有8cm*10cm大小,如下图所示:
  图1 MiniSTM32 开发板外观图
  这款MiniSTM32开发板,不求最全,但求最精!板子的设计充分考虑了成本与功能这两个矛盾面,再结合实际使用的经验及STM32的特点,最终确定了这样的设计。总体来说是该有的都有,不该有的坚决不要,可有可无的选择性价比最高的留下。现在向大家介绍ALIENTEK MiniSTM32开发板的各部分硬件,让大家对该开发板的各部分硬件原理有个理解。
&&&&&&& CPU
  ALIENTEK MiniSTM32选择的是STM32F103RBT6作为MCU,STM32F103的型号众多,我们选择这款的原因是看重其性价比,作为一款低端开发板,选择STM32F103RBT6是最佳的选择。128K FLASH、20K SRAM、2个SPI、3个串口、1个USB、1个CAN、2个12位的ADC、RTC、51个可用IO脚&,这样的配置无论放到哪里都是很不错的了,更重要的是其价格,18元左右的零售价,足以秒杀很多其他芯片了,所以我们选择了它作为我们的主芯片。MCU部分原理图如下:
  图二 MCU部分原理图
  上图中中上部的BOOT1用于设置STM32的启动方式,其对应启动模式如下表所示:
  我们用串口下载代码,则配置BOOT0为1,BOOT1为0即可,如果想让STM32一按复位键就开始跑代码,则需要配置BOOT0为0,BOOT1随便设置都可以。
  P3和P1分别用于PORTA和PORTB的IO口引出,其中P2还有部分用于PORTC口的引出。PORTA和PORTB都是按顺序排列的,这样设计的目的是为了让大家更方便地与外部设备连接。
  P2连接了DS18B20的数据口以及红外传感器的数据线,它们分别对应着PA0和PA1,只需要通过跳线帽将P2和P3连接起来就可以使用了。这里不直接连在一起的原因有二:1,防止红外传感器和DS18B20对这两个IO口作为其他功能使用的时候的影响;2,DS18B20和红外传感器还可以用来给其他板子提供输入,等于我们的板子为别的板子提供了红外接口和温度传感器,在调试的时候,还是蛮有用的。
  P4口连接了PL2303的串口输出,对应着STM32的串口1(PA9/PA10),在使用的时候,也是通过跳线帽将这两处连接起来。这样设计有2个好处:1,使得PA9和PA10用作其他用途使用的时候,不受到PL2303的影响。2,USB转串口可以用作他用,并不仅限这个板上的STM32使用,也可以连接到其他板子上,这样ALIENEK MiniSTM32就相当于一个USB串口。
  P5口是另外一个IO引出排阵,将PORTC和PORTD等的剩余IO口从这里引出。
  在此部分原理图中,我们还可以看到STM32F103RBT6的各个IO口与外设的连接关系,这些将在后面给大家介绍。
  这里STM32的VBAT采用CR1220纽扣电池和VCC3.3混合供电的方式,在有外部电源(VCC3.3)的时候,CR1220不给VBAT供电,而在外部电源断开的时候,则由CR1220给VBAT供电。这样,VBAT总是有电的,以保证RTC的走时以及后备寄存器的内容不丢失。
  该部分还有JTAG,JTAG部分电路如下图:
  图三 JTAG原理图
  这里采用的是标准的JTAG接法,但是STM32还有SWD接口,SWD只需要最少2跟线(SWCLK和SWDIO)就可以下载并调试代码了,这同我们使用串口下载代码差不多,而且速度更快,能调试。所以建议大家在设计产品的时候,可以留出SWD来下载调试代码,而摒弃JTAG。STM32的SWD接口与JTAG是共用的,只要接上JTAG,你就可以使用SWD模式了(其实并不需要JTAG这么多线),JLINKV8和ULINK2都支持SWD。
相关技术文章:
相关资料下载:
上周热点文章排行榜
上周资料下载排行榜
技术交流、我要发言! 发表评论可获取积分! 请遵守相关规定。
创新实用技术专题
在28nm FPGA战场上,Xilinx和Altera已经展...查看: 660|回复: 7
ALIENTEK MiniSTM32 板spi多从机通信问题
主题帖子精华
新手上路, 积分 43, 距离下一级还需 7 积分
在线时间25 小时
原子的spi程序源码中spi flash(W25Q64)片选信号定义为:#define& & SPI_FLASH_CS& &&&PAout(2)。现在我想实现读取外接的W25Q64里的资料,然后写入ALIENTEK MiniSTM32 板自带的W25Q64中,这就需要多从机spi通信。我想直接让两个spi通信共用flash.c文件的代码,现在的问题是片选信号SPI_FLASH_CS 怎么切换到对于的io口,因为程序里是用#define定义的。
你可以自己包装一个小函数用于切换,如果是我的话,我会包装,但是有没有更好的办法,这个我不清楚
主题帖子精华
中级会员, 积分 392, 距离下一级还需 108 积分
在线时间75 小时
可是flash.c里的每个函数都调用片选了。我该怎么切换片选对于的管脚?
你可以自己包装一个小函数用于切换,如果是我的话,我会包装,但是有没有更好的办法,这个我不清楚
主题帖子精华
中级会员, 积分 392, 距离下一级还需 108 积分
在线时间75 小时
你要是用两个从机的话,你就需要在定义一个GPIO做片选,同样也是宏定义,其他的函数是可以通用的,在使用片子的时候,对应的片选拉低,其他的片选拉高(防止干扰)。这样就可以了。
主题帖子精华
新手上路, 积分 43, 距离下一级还需 7 积分
在线时间25 小时
本帖最后由 jcxxkj 于
16:22 编辑
你要是用两个从机的话,你就需要在定义一个GPIO做片选,同样也是宏定义,其他的函数是可以通用的,在使用片 ...
可是flash.c里的每个函数都调用片选了。我该怎么切换片选对应的管脚?
主题帖子精华
新手上路, 积分 43, 距离下一级还需 7 积分
在线时间25 小时
你可以自己包装一个小函数用于切换,如果是我的话,我会包装,但是有没有更好的办法,这个我不清楚
现在程序里SPI_FLASH_CS 是这样定义的“#define& && && &SPI_FLASH_CS& &PAout(2)”。其实我想定义个函数来切换SPI_FLASH_CS 对应的PA口,但不知道该怎么定义。
主题帖子精华
中级会员, 积分 392, 距离下一级还需 108 积分
在线时间75 小时
现在程序里SPI_FLASH_CS 是这样定义的“#define& && && &SPI_FLASH_CS& &PAout(2)”。其实我想定义个函数 ...
你看一下原子哥的GPIO的那一个章节&&就知道了
主题帖子精华
新手上路, 积分 43, 距离下一级还需 7 积分
在线时间25 小时
你看一下原子哥的GPIO的那一个章节&&就知道了
可能你没理解我意思,我知道给GPIO位赋值,直接位绑定的 PA(n)=0就行了。但我的目的是实现SPI_FLASH_CS对应的io口切换,因为在flash.c文件中的函数里都是给SPI_FLASH_CS赋值的。不过我已经想到解决办法了,谢谢你的热心回答!
主题帖子精华
中级会员, 积分 392, 距离下一级还需 108 积分
在线时间75 小时
可能你没理解我意思,我知道给GPIO位赋值,直接位绑定的 PA(n)=0就行了。但我的目的是实现SPI_FLASH_CS对 ...
解决了就好。
Powered by21ic官方微信
后使用快捷导航没有帐号?
查看: 5279|回复: 8
STM32的SPI时钟最快多少?
&&未结帖(20)
主题帖子积分
实习生, 积分 18, 距离下一级还需 32 积分
实习生, 积分 18, 距离下一级还需 32 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 18, 距离下一级还需 32 积分
实习生, 积分 18, 距离下一级还需 32 积分
我看手册,最快应该是cpu频率的一半,36Mhz,手册内容如下:
Select the BR[2:0] bits to define the serial clock baud rate (see SPI_CR1 register).
Bits 5:3 BR[2:0]: Baud rate control
000: fPCLK/2
001: fPCLK/4
010: fPCLK/8
011: fPCLK/16
100: fPCLK/32
101: fPCLK/64
110: fPCLK/128
111: fPCLK/256。
但是看到这里说,最快是18Mhz& &
还有,为什么NXP的LPC17xx系列的SPI时钟最高只能设置到cpu时钟的8分之一(见图)?这样的话,100Mhz的主频也就是12.5M而已。
本帖子中包含更多资源
才可以下载或查看,没有帐号?
主题帖子积分
主题帖子积分
专家等级:结帖率:38%打赏:0.00受赏:9.00
主题帖子积分
我看手册,最快应该是cpu频率的一半,36Mhz,手册内容如下:
Select the BR[2:0] bits to define the serial clock baud rate (see SPI_CR1 register).
Bits 5:3 BR[2:0]: Baud rate control
000: fPCLK/2
001: fPCL ...
porco_rosso 发表于
1)fPCLK不是CPU频率,而是外设总线的频率。
2)STM32的SPI时钟最快是18MHz,这是芯片设计时决定的。
3)STM32的SPI1在APB2上,SPI2和SPI3在APB1上,APB1的最高频率是36MHz,APB2的最高频率是72MHz;因此,为了不超过最高18MHz的设计要求,配置SPI2和SPI3时可以使用fPCLK/2的选项,而配置SPI1时则不能使用fPCLK/2的选项。
I do not teach, but I coach. I do not feed, but I seed.
欢迎访问我的博客:/BLOG_OWNER_199055.HTM
主题帖子积分
实习生, 积分 18, 距离下一级还需 32 积分
实习生, 积分 18, 距离下一级还需 32 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 18, 距离下一级还需 32 积分
实习生, 积分 18, 距离下一级还需 32 积分
1)fPCLK不是CPU频率,而是外设总线的频率。
2)STM32的SPI时钟最快是18MHz,这是芯片设计时决定的。
3)STM32的SPI1在APB2上,SPI2和SPI3在APB1上,APB1的最高频率是36MHz,APB2的最高频率是72MHz;因此,为了 ...
香水城 发表于
可是我在手册上并没有看到SPI最快是18Mhz这样的说法,我看的是ReferenceManual。
主题帖子积分
主题帖子积分
专家等级:结帖率:38%打赏:0.00受赏:9.00
主题帖子积分
可是我在手册上并没有看到SPI最快是18Mhz这样的说法,我看的是ReferenceManual。
porco_rosso 发表于
Reference Manual 只讲功能和操作方式,量化的指标在Datasheet中:
本帖子中包含更多资源
才可以下载或查看,没有帐号?
I do not teach, but I coach. I do not feed, but I seed.
欢迎访问我的博客:/BLOG_OWNER_199055.HTM
主题帖子积分
实习生, 积分 18, 距离下一级还需 32 积分
实习生, 积分 18, 距离下一级还需 32 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 18, 距离下一级还需 32 积分
实习生, 积分 18, 距离下一级还需 32 积分
本帖最后由 porco_rosso 于
14:44 编辑
Reference Manual 只讲功能和操作方式,量化的指标在Datasheet中:
香水城 发表于
多谢,多谢,分数给你了
额,分数不够
主题帖子积分
中级技术员, 积分 174, 距离下一级还需 126 积分
中级技术员, 积分 174, 距离下一级还需 126 积分
主题帖子积分
专家等级:结帖率:73%
主题帖子积分
中级技术员, 积分 174, 距离下一级还需 126 积分
中级技术员, 积分 174, 距离下一级还需 126 积分
有人试过SPI1跑36Mhz吗?
主题帖子积分
高级技术员, 积分 813, 距离下一级还需 187 积分
高级技术员, 积分 813, 距离下一级还需 187 积分
主题帖子积分
专家等级:结帖率:69%
主题帖子积分
高级技术员, 积分 813, 距离下一级还需 187 积分
高级技术员, 积分 813, 距离下一级还需 187 积分
楼上 都说最快是18M了呀
主题帖子积分
助理工程师, 积分 1447, 距离下一级还需 553 积分
助理工程师, 积分 1447, 距离下一级还需 553 积分
主题帖子积分
专家等级:结帖率:96%
主题帖子积分
助理工程师, 积分 1447, 距离下一级还需 553 积分
助理工程师, 积分 1447, 距离下一级还需 553 积分
看样子, 18M 还不够楼主的要求吧,
据说, 有人把 72MHz 升高到 120MHZ, CPU 也能工作。
要不楼主自己测试一下, 然后把测试结果公布出来, 供大家参考。
主题帖子积分
中级工程师, 积分 4804, 距离下一级还需 196 积分
中级工程师, 积分 4804, 距离下一级还需 196 积分
主题帖子积分
专家等级:结帖率:72%
主题帖子积分
中级工程师, 积分 4804, 距离下一级还需 196 积分
中级工程师, 积分 4804, 距离下一级还需 196 积分
还有,为什么NXP的LPC17xx系列的SPI时钟最高只能设置到cpu时钟的8分之一(见图)?这样的话,100Mhz的主频也就是12.5M而已。
使用其SSP,最高50M。
以太网 WIFI 音乐 语音 专业方案提供商
荣誉元老奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
涓涓之细流
发帖类勋章
时间类勋章
技术奇才奖章
人才类勋章
社区建设奖章
等级类勋章
欢快之小溪
发帖类勋章
技术导师奖章
人才类勋章
突出贡献奖章
等级类勋章
沉静之湖泊
发帖类勋章踏踏实实搞清&stm32&SPI总线&基础和编程
SPI应用是相当的广了,同步串行总线,同步同步当然需要时钟信号来统一了,这样通讯双方通讯时就比较默契没那么延迟(呆呆)了。应用于中低速场合。
学起来从哪些地方入手呢?如下:
SPI概念与特点&&
关键的时序接受&&&
编程时重点&&&&
STM32内部的SPI使用(介绍、功能、中断)
SPI概念与特点:不多说,串行,需要同步信号&&
主从结构的&&
CS(片选)& SCK&&
&&&&&&&&&&&&&&&全双工&&一主控多从&&&8或16位数据通信
其它特点:8个主模式波特率预分频系数& fpcll/2
主模式和从模式下快速通行& 并支持切换
&&&&&&&&&编程MSB
专用发送和接受标志可促发中断
有SPI忙标志位
支持硬件CRC校验,发送模式下crc值作为最后一个字节被发送,接受模式下最后一字节自动CRC校验
支持错误中断标志,支持DMA功能的1字节发送和接受缓冲器:产生发送和接受请求。
SPI总线时序介绍:
看下下图应该就会了
使用stm32& spi需要以下的步骤
1.管脚因为复用的,故先配置好管脚、并打开spi时钟
2.设置spi的工作模式
通过 SPI1_CR1 来设置,设置SPI1主机模式,设置数据格式8位,然后通过 CPOL 和 CPHA 位来设置
SCK时钟极性及采样方式。并设置 SPI1 的时钟频率(最大18Mhz),以及数据的格式(MSB 在前还是 LSB在前)。
3.使能SPI.
SPI固件库函数
下面是初始化,必须得结构体原型
typedef struct
& uint16_t
SPI_D//设置方向&&&&
(2线全双工、2线只接受、一线发送、一线接受)
& uint16_t
//模式&&&&&&&&
(从或主设备)
& uint16_t SPI_DataS
//宽度&&&&&&&&
(8或16位)
& uint16_t
SPI_CPOL;&&&&&//时钟极性&&&&&(低或高)
& uint16_t
SPI_CPHA;&&&&
//时钟相位&&&&&(第一个或第二个跳变沿)
& uint16_t
SPI_NSS;&&&&&
//片选方式&&&&&(硬件或软件方式)
& uint16_t
SPI_BaudRateP&//波特率预分频&&&
(从2---256分频)&&
& uint16_t
SPI_FirstB&&//最先发送的位&&&&&&&&&&&&(最低位,还是最高位在先)&&&&&&&&
& uint16_t
SPI_CRCP&//设置crc多项式&&&&&&&
(数字)如7
}SPI_InitTypeD
下面是实例,对SPI2进行的初始化
SPI2_Init(void)&{
&SPI_InitTypeDef&
SPI_InitS&GPIO_InitTypeDef
GPIO_InitS
&//配置SPI2管脚
&RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB,
&GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13
|GPIO_Pin_14| GPIO_Pin_15;
&GPIO_InitStructure.GPIO_Speed =
GPIO_Speed_50MHz;
&GPIO_InitStructure.GPIO_Mode =
GPIO_Mode_AF_PP;& //复用推挽输出
&GPIO_Init(GPIOB,
&GPIO_InitStructure);
&//SPI2配置选项
&RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2
&SPI_InitStructure.SPI_Direction =
SPI_Direction_2Lines_FullD
&SPI_InitStructure.SPI_Mode =
SPI_Mode_M
&SPI_InitStructure.SPI_DataSize =
SPI_DataSize_8b;
&SPI_InitStructure.SPI_CPOL = SPI_CPOL_H
&SPI_InitStructure.SPI_CPHA =
SPI_CPHA_2E
&SPI_InitStructure.SPI_NSS = SPI_NSS_S
&SPI_InitStructure.SPI_BaudRatePrescaler =
SPI_BaudRatePrescaler_16;
&SPI_InitStructure.SPI_FirstBit =
SPI_FirstBit_MSB;
&SPI_InitStructure.SPI_CRCPolynomial = 7;
&SPI_Init(SPI2,
&SPI_InitStructure);
&//使能SPI2
&SPI_Cmd(SPI2,
ENABLE);&&}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
以上是,初始化的一些函数,发现固件库还有很多函数没用上,下面就要谈到应用了
STM32的SPI串行外围总线接口,本程序,是将STM32的SPI配置为全双工模式,且NSS使用的软件模式。在使用SPI前,下面的这个过程我们必须理解,即STM32作为主机发送一个字节数据时,必然能接收到一个数据,至于数据是否处理,由程序操作。
●&全双工模式(BIDIMODE=0并且RXONLY=0)&
─&&当写入数据到SPI_DR寄存器(发送缓冲器)后,传输开始;&
─&&在传送第一位数据的同时,数据被并行地从发送缓冲器传送到8位的移位寄存器中,
然后按顺序被串行地移位送到MOSI引脚上;&
─&&与此同时,在MISO引脚上接收到的数据,按顺序被串行地移位进入8位的移位寄存器
中,然后被并行地传送到SPI_DR寄存器(接收缓冲器)中。&
注意:也就是说,在主机模式下,发送和接收是同时进行的,所以我们发送了一个数据,也就能接收到一个数据。而STM32内部硬件是这个过程的支撑!
读一个字节,往里面发送0,外设就返回一个数据了,发送的0外设不处理(需要先写入命令生效)
SPI_ReadByte(SPIx)&SPI_WriteByte(SPIx,0)
写一个字节就直接发送相应的字节,外设就返回一个数据了
u8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 byte);
写一个字节...................................................................
u8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 Byte)
&while((SPIx-&SR&SPI_I2S_FLAG_TXE)==RESET);&&//等待发送区空&&
&SPIx-&DR=B&
&//发送一个byte&&
&while((SPIx-&SR&SPI_I2S_FLAG_RXNE)==RESET);//等待接收完一个byte&
SPIx-&DR;&&&&&&&&&
//返回收到的数据&&&
void M25P16_Write_Enable(void)
&Select_Flash();&
&SPI_Flash_Write(WRITE_ENABLE);&
&NotSelect_Flash();
void M25P16_Read_Id(u8 * id)
&Select_Flash();&
&SPI_Flash_Write(READ_ID);&
&for(i=0;i&20;i++)
SPI_Flash_Read();&&}
&NotSelect_Flash();
void M25P16_Write_Status_Reg(u8 reg)
&Select_Flash();&
&SPI_Flash_Write(WRITE_STAUS_REG);&
&SPI_Flash_Write(reg);&NotSelect_Flash();
void M25P16_Read_Data(u32 addr,u32 len,u8 *buf)
&Select_Flash();&
&SPI_Flash_Write(READ_DATA);&
&SPI_Flash_Write((addr&&16)
&SPI_Flash_Write((addr&&8)
&SPI_Flash_Write(addr &
&for(i=0;i&i++)
&&buf[i]=SPI_Flash_Read();
&}&NotSelect_Flash();
//页编程函数,页编程前一定要进行页擦除!!!
void M25P16_Page_Program(u32 addr,u16 len,u8 *buf)
&M25P16_Write_Enable();
&Select_Flash();&
&SPI_Flash_Write(PAGE_PROGRAM);&
&SPI_Flash_Write((addr&&16)
&SPI_Flash_Write((addr&&8)
&SPI_Flash_Write(addr &
&for(i=0;i&i++)
&&SPI_Flash_Write(buf[i]);
&NotSelect_Flash();
&while(M25P16_Read_Status_Reg()&0x01);&
以上函数搞懂了,特别市红色部分标注的为重点,对于spi也就基本清楚了,这些也算是最底层的函数了,提供基本的API供以后文件系统或其它地方使用。
----------------------------------------------------------------------------------------------
最后补上一些文件框架的说明
首先我们把最底层的SPI初始化写上,函数如下:
可见有芯片自带SPI模块&
有给mp3芯片的,有给flash的,还有给无线网络的,还有给软件模拟spi时序供给触摸屏的控制器的,然后我们把这个.c文件配套的.h文件给下面具体的函数包含,就能正确的选取和使用了,当这些具体功能的函数写好了后,对应得.h函数就又继续给更高级别的应用层使用。
今天先就介绍下spi_flash模块了,等天补上其它3个模块的讲解,毕竟现在是基础哦。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 stm32 spi1配置 的文章

 

随机推荐