你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Firmware Lib在EK_STM32F上的学习体会(SPI/SysTick)

[复制链接]
qazwsx-19104 发布时间:2008-9-3 19:19
SPI Example 1
4 _5 W' D+ c+ W! o& o
; N: w8 C2 A: r7 Q# @# ~本例展示了如何实现2个SPI之间的在全双工(full-duplex)模式下通信,通过NSS软件管理,实现了由主向从,接着又从向主发送数据。5 d7 H5 y1 _1 T1 X, I; L3 i

) o* [8 y2 {7 G3 H# i2 H* ?在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率。6 I  g. `! g7 t
在第一阶段,由主SPI1把SPI1_Buffer_Tx发送到SPI2,由从SPI2把SPI2_Buffer_Tx发送到SPI1。传输完成后,通过比较判断传输是否正确。
( s5 C1 l% {3 e# F& V- b# M" S
8 @: u+ l/ G1 W2 R9 N6 N; X6 j由于NSS管脚由软件管理,因此,可以在不改变硬件配置的情况下使SPI1由主变从,而SPI2由从变主。在第二阶段,由从SPI1把SPI1_Buffer_Tx发送到SPI2,由主SPI2把SPI2_Buffer_Tx发送到SPI1。传输完成后,通过比较判断传输是否正确。# n" f+ N* w7 S# G7 P1 v' n" r& w

* o% q: c+ J- b' i; n" j( ]& {( {在EKSTM32F上,如果以上4个传输都正确,则亮起LED1(LD5),否则亮起LED2(LD4)。1 A$ }$ X; s# M4 z1 @: y0 r" l
; o5 M7 s4 K& u. ^
SPI Example 2
+ Q" s! s4 v/ s, X7 Z3 B4 n1 ?* [
本例展示了如何实现2个SPI之间的在单工(simplex)模式下通信,通过在主端使用TxE中断,从端使用RxNE中断,实现把数据由主向从发送。# b$ C' o; {3 V9 d* N
) Q+ x/ b. j2 u
在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率,设置SPI1为主发送端,SPI2为从接收端。授权SPI1的发送缓存为空中断(Tx buffer empty interrupt)和SPI2的接收缓存非空中断(buffer not empty interrupt)。
" h" W( Q+ q2 K5 V/ g4 J
8 G% t9 G; [, J/ L+ J" h传输开始,在每一个SPI1的TxE中断中,程序把SPI1_Buffer_Tx的数据发送出去,在SPI2的RxNE中断中把数据存放在SPI2_Buffer_Rx。
3 i# \: f: n# M: y& l5 |8 e4 _7 o. D3 z  a
传输完成后,通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。
: i/ F) X3 A' p3 f3 }
7 R$ d9 F0 {! Y# f/ zSPI Example 3  {+ X+ }: W' L! t6 ~- J
  C" B- J1 u; b5 p, L3 J
本例展示了如何实现2个SPI之间的在全双工(full-duplex)模式下通信,在完成主端从端之间的数据交换后,再传送CRC(Cyclic redundancy check)的值。
* E/ {7 D2 v/ Y$ M4 _% u: I1 X: T- r( P7 m' A4 Z+ Z" A0 z2 y; T
在本例程中,设置SPI1和SPI2为16bit数据帧,4.5Mbit/s传输速率,设置SPI1为主发送端,SPI2为从接收端,并打开两端的CRC计算功能。
$ A! {( R" a, t8 m- y8 ?- [5 I2 L& B, R; g% J* D
传送程序为:首先由从SPI2从SPI2_Buffer_Tx向主SPI1发送数据,再由主SPI1从SPI1_Buffer_Tx向从SPI2发送数据,然后检查2边的RxNE旗位看是否成功接收到数据。重复直到全部数据发送完成。在2端传输最后一个字的时候,打开2端的CRC传送。在高速通讯中,用户应当精简这部分代码。SPI1和SPI2接收到的CRC值分别存放在CRC1_Value; G6 z2 r, f- O: o, G' j( ~$ @
和CRC2_Value中。
. z" {: O- X; Z% r6 e1 b- `( x& V
; u" J! b( J' @$ L最后通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。1 C4 y: Z/ [/ |* O

7 x5 R3 ]; l( J# {+ }" O6 XSPI Example 4! q4 n  B; V& [! O! y6 N
9 Z4 f, O  r( i: o9 M: [
本例展示了如何实现2个SPI之间的在单工(simplex)模式下通信,主发送端使用polling模式,从接收端使用DMA接收模式,实现把数据由主向从发送。
; g3 u- q4 M/ n5 M9 U; m* Q' J# R1 c. F( B! a% n
在本例程中,设置SPI1和SPI2为8bit数据帧,18Mbit/s传输速率,设置SPI2为主发送端,SPI1为从接收端。设置DMA通道2可由SPI1的Rx请求激活,并把SPI1接收收据传送到SPI1_Buffer_Rx。SPI1和SPI2都设置为双向模式,但主SPI2仅作为发送端,从SPI1仅作为接收端。两端的NSS都由硬件管理。打开SPI2的SS出口可以设置SPI2为主,SPI1为从。3 h0 Q+ Z( E" T9 }' L; j
6 ~2 B7 J- x5 c
传输开始,每接收到一个数据,SPI1的RxNE请求会激活DMA通道2把SPI1接收收据传送到SPI1_Buffer_Rx。重复知道传输完成。
; V* h" _+ j1 b2 b/ d9 C) y( {7 Z
最后通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。3 D( {$ |- u) G- g

9 Y! {+ {6 u+ J! d* r: y' V: eSPI Example 58 U. O( `( `  s% e2 R% M
7 V+ ~. O" \2 `# c
本例展示了如何使用SPI固件函数库和相关的SPI Flash驱动来实现与M25P64 FLASH的通信。
. z  @: T1 M! x8 `) m$ F+ B/ q( x
第一步是读取SPI Flash ID,并把它和预设的ID进行核对,如果匹配则置PC.06为1,否则置PC.07为高。; i$ M+ c; J# u5 h

( e' \. Q* \3 f5 u' L/ ^6 N% ~然后,利用驱动程序对目标区域进行擦除,把“main.c”中定义的缓存Tx_Buffer写入,然后再读出,读出的数据存入缓存Rx_Buffer。比较两块缓存判断整个操作正确与否,判断结果放在变量“TransferStatus1”。
0 Q1 l+ p% `- D7 W
% J# ]5 a4 W& u之后,对目标区域再进行擦除,检查之前写入数据的区域,判断擦除是否彻底。然后读出所有数据,检查是否为0xFF,0xFF表示这一位数据是经过擦除的。检查结果放在变量“TransferStatus2”中。% S; z- @2 N, L$ a) Q( H
( d2 F8 Y3 R2 b. [5 A5 ]0 T: d
设置SPI1为主,8bit字长。设置管脚SPI1_NSS为push-pull输出,用来驱动SPI FLASH片选管脚。# Z, K+ P* ~4 p5 g* S
; i0 |+ A5 j, D- N& J
文件“main.c”中定义的FLASH_WriteAddress和FLASH_ReadAddress表示程序开始写和读操作的地址。* m8 h, y+ P" y1 B" |2 A( q& H5 \$ O
. ?9 Y# K' _# B8 r3 N# H! Y
设置系统时钟为72 MHz,SPI1波特率为18 Mbit/s。
, n" L5 b1 H8 m2 y  M5 s: c( D2 `( b; R' g, M- E
在EKSTM32F上,由于没有安装SPI FLASH,本例无法在不添加相应硬件的情况下运行。
/ F6 T0 A+ ]* ?3 o( C
1 h: f" x+ F' @  Y4 LSysTick Example 1' |1 E7 }/ a( f) _6 a! f. M' T6 L
本例展示了如何设置Cortex-M3的系统定时器SysTick来产生以1毫秒为周期的事项。设置系统时钟为72MHz,SysTick的时钟由AHB时钟提供,为其值HCLK除以8(HCLK/8)。
* i& {2 N$ o& ?0 B8 ^( H! g" b# k
9 i& K7 ^3 T& B1 [& t9 J利用SysTick计数器为零事项(SysTick end-of-count event)来实现函数“Delay”。间隔在此函数中定义的时间,改变输出管脚PC.06 – PC. 09的状态,使与他们相连的4个LED闪耀。
$ @/ M6 P  Q2 Z9 L) ]2 V7 }- U& N5 I- \2 o$ a
在EKSTM32F,上,改PC.06 – PC.09为PC.04 – PC.07。$ Z1 Z2 Z$ k+ w- `- O3 X
& ]. u) R6 f5 N0 P  }# {/ [
出处:barboon
7 b3 D1 P1 }" V# t) c. }# L0 ?
+ f8 |& I$ Z9 C5 v% ^相关下载:  

2008316151223349.zip

下载

32.25 KB, 下载次数: 108

赞 收藏 评论3 发布时间:2008-9-3 19:19

举报

3个回答
LOOKWAY 回答时间:2009-5-20 09:52:54

RE:Firmware Lib在EK_STM32F上的学习体会(SPI/SysTick)

OK
stwuyiyu 回答时间:2010-4-27 18:15:57

RE:Firmware Lib在EK_STM32F上的学习体会(SPI/SysTick)

请问一下:* q, |8 f" h& T  ]
SPI Example 1 在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率。
2 h4 m" v4 c. N" a" T9 mSPI Example 4 在本例程中,设置SPI1和SPI2为8bit数据帧,18Mbit/s传输速率/ `. p& g- Z, s) y* N
两个例子波特率不一样,但范例全是使用  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;也即是4分频,如何得出不同的传输速率呢?
lucky-92214 回答时间:2010-5-3 00:20:43

RE:Firmware Lib在EK_STM32F上的学习体会(SPI/SysTick)

有空看看,谢谢!

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版