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

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

[复制链接]
qazwsx-19104 发布时间:2008-9-3 19:19
SPI Example 1
* N% @4 ~) g* `1 J: S" i) f8 {, o4 b: R8 H; X3 P0 K7 e+ W
本例展示了如何实现2个SPI之间的在全双工(full-duplex)模式下通信,通过NSS软件管理,实现了由主向从,接着又从向主发送数据。. ~5 y" ?: P8 R5 G9 T+ q7 P8 g5 B

+ ]" q& L2 e2 Q* W+ u8 N/ [1 z在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率。
' m' O0 k, l' a0 z% ?4 B/ ~: l+ G在第一阶段,由主SPI1把SPI1_Buffer_Tx发送到SPI2,由从SPI2把SPI2_Buffer_Tx发送到SPI1。传输完成后,通过比较判断传输是否正确。# F5 X& N) G) V* \
! }- q# _; M! c9 g& c
由于NSS管脚由软件管理,因此,可以在不改变硬件配置的情况下使SPI1由主变从,而SPI2由从变主。在第二阶段,由从SPI1把SPI1_Buffer_Tx发送到SPI2,由主SPI2把SPI2_Buffer_Tx发送到SPI1。传输完成后,通过比较判断传输是否正确。" q( Y$ H2 W& v1 w

: N- s6 _! w  P# S$ T! n在EKSTM32F上,如果以上4个传输都正确,则亮起LED1(LD5),否则亮起LED2(LD4)。$ B  c! F4 x' u* c  `8 D, T9 |

- h6 S2 O7 j" DSPI Example 2
7 w! _3 t+ `' V0 x( d1 K1 h7 [8 K, @% s( a+ B9 e) l1 R1 G
本例展示了如何实现2个SPI之间的在单工(simplex)模式下通信,通过在主端使用TxE中断,从端使用RxNE中断,实现把数据由主向从发送。+ h$ E/ y" }1 z( x
- {2 k" B7 o" [# p6 L
在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率,设置SPI1为主发送端,SPI2为从接收端。授权SPI1的发送缓存为空中断(Tx buffer empty interrupt)和SPI2的接收缓存非空中断(buffer not empty interrupt)。% p+ w0 V* l2 I. u; E7 A9 c. T

- M: L/ k  }" S9 L传输开始,在每一个SPI1的TxE中断中,程序把SPI1_Buffer_Tx的数据发送出去,在SPI2的RxNE中断中把数据存放在SPI2_Buffer_Rx。& i8 ~: s# B3 w; q9 W( b
: _9 M( o2 u$ q! Y! g/ G/ h9 `; X
传输完成后,通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。
) o3 X6 ?, G1 D2 s( j6 P
, M6 E5 o3 Y5 u9 x. h! G3 gSPI Example 3. m, b! N# a+ E4 k" ~# {

$ ^' `; @' A# _8 G8 K/ r2 C本例展示了如何实现2个SPI之间的在全双工(full-duplex)模式下通信,在完成主端从端之间的数据交换后,再传送CRC(Cyclic redundancy check)的值。6 G& X- Z. h1 S

' T! ^8 h9 ~3 `, b2 M/ {在本例程中,设置SPI1和SPI2为16bit数据帧,4.5Mbit/s传输速率,设置SPI1为主发送端,SPI2为从接收端,并打开两端的CRC计算功能。! q0 ~; Y8 X4 O9 |6 a4 ]; _; E0 ~

0 n, i2 [/ Y2 T& f8 K0 }传送程序为:首先由从SPI2从SPI2_Buffer_Tx向主SPI1发送数据,再由主SPI1从SPI1_Buffer_Tx向从SPI2发送数据,然后检查2边的RxNE旗位看是否成功接收到数据。重复直到全部数据发送完成。在2端传输最后一个字的时候,打开2端的CRC传送。在高速通讯中,用户应当精简这部分代码。SPI1和SPI2接收到的CRC值分别存放在CRC1_Value/ A+ P" {6 o* z: r4 i1 W. G
和CRC2_Value中。
2 \- T+ P9 o5 Q( G( B9 q2 s  l1 D7 U: i2 g2 W! `. z
最后通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。
' n& X6 L; \- X* c: j
8 U& \- K+ x% |6 K; K( f; }* U% ISPI Example 4
  i' l2 S$ S0 S6 m; d
2 v  g7 [% r6 Z# ~" o/ r本例展示了如何实现2个SPI之间的在单工(simplex)模式下通信,主发送端使用polling模式,从接收端使用DMA接收模式,实现把数据由主向从发送。
! l0 z8 j0 f, P- x; G: g4 D; R' j* r/ }+ Y1 G
在本例程中,设置SPI1和SPI2为8bit数据帧,18Mbit/s传输速率,设置SPI2为主发送端,SPI1为从接收端。设置DMA通道2可由SPI1的Rx请求激活,并把SPI1接收收据传送到SPI1_Buffer_Rx。SPI1和SPI2都设置为双向模式,但主SPI2仅作为发送端,从SPI1仅作为接收端。两端的NSS都由硬件管理。打开SPI2的SS出口可以设置SPI2为主,SPI1为从。
- f7 |. C( [  X( ]
/ C: T* s4 R% m) s1 v传输开始,每接收到一个数据,SPI1的RxNE请求会激活DMA通道2把SPI1接收收据传送到SPI1_Buffer_Rx。重复知道传输完成。, F  i  g/ q7 [

! e6 C8 c) w4 q: N4 \最后通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。
' {9 z) y3 _* }2 }$ q- P/ ^* l' X7 H6 y& s
SPI Example 5. ^: Z$ p* B3 E  m8 H5 d2 y' X
! q1 ^2 N* x5 D- X" U( H
本例展示了如何使用SPI固件函数库和相关的SPI Flash驱动来实现与M25P64 FLASH的通信。
* q( W# s. V7 f. ^6 Q+ k5 D- b- k& G$ h1 C% \3 c( ~
第一步是读取SPI Flash ID,并把它和预设的ID进行核对,如果匹配则置PC.06为1,否则置PC.07为高。
5 _/ ~0 {2 n, ^2 Z0 g# K4 i3 t, e* P2 t  n+ N: G) |
然后,利用驱动程序对目标区域进行擦除,把“main.c”中定义的缓存Tx_Buffer写入,然后再读出,读出的数据存入缓存Rx_Buffer。比较两块缓存判断整个操作正确与否,判断结果放在变量“TransferStatus1”。; H3 r; y9 f, u! D8 u5 M/ B2 M

1 e6 K  M% t1 T. ~0 ]之后,对目标区域再进行擦除,检查之前写入数据的区域,判断擦除是否彻底。然后读出所有数据,检查是否为0xFF,0xFF表示这一位数据是经过擦除的。检查结果放在变量“TransferStatus2”中。
* U- d+ W% o( H/ o3 w
: Z1 s) i3 W! r/ {& v/ k+ |1 H$ ]) q& X设置SPI1为主,8bit字长。设置管脚SPI1_NSS为push-pull输出,用来驱动SPI FLASH片选管脚。7 f. t3 B6 j2 y  \5 a& {( H
# [: f1 ]3 R/ B4 f% \9 O: }8 V
文件“main.c”中定义的FLASH_WriteAddress和FLASH_ReadAddress表示程序开始写和读操作的地址。8 e6 Z) {! W) n! Y- A7 j, l" Z
7 n% j, a. v; F; R
设置系统时钟为72 MHz,SPI1波特率为18 Mbit/s。3 i" \$ v6 }1 |6 R3 k
. |  O. _3 E1 o4 n/ J( v
在EKSTM32F上,由于没有安装SPI FLASH,本例无法在不添加相应硬件的情况下运行。& G* e1 G( Q3 s. C( X
: N4 N2 J4 O: V( ]& z6 _# W
SysTick Example 1' B0 T9 z3 s; \( y7 o$ k0 ]
本例展示了如何设置Cortex-M3的系统定时器SysTick来产生以1毫秒为周期的事项。设置系统时钟为72MHz,SysTick的时钟由AHB时钟提供,为其值HCLK除以8(HCLK/8)。
0 ^  c! V9 F# @# u
' f8 M; y, A5 y' I) r利用SysTick计数器为零事项(SysTick end-of-count event)来实现函数“Delay”。间隔在此函数中定义的时间,改变输出管脚PC.06 – PC. 09的状态,使与他们相连的4个LED闪耀。1 Y; R/ c) O7 m  ^& I6 z: i  @

6 S- ]; o$ Q! H4 v0 l+ g在EKSTM32F,上,改PC.06 – PC.09为PC.04 – PC.07。; W( S6 f  f, J; N2 n
+ F6 `* _1 _4 x1 }- j4 D
出处:barboon$ V) W* y" q/ v2 R
  t: l& u/ H+ Z' e; J
相关下载:  

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)

请问一下:" ]/ u: b5 U+ W0 p% q* z0 X, n
SPI Example 1 在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率。
: k+ ?- R' X8 o! T* x4 a+ v/ L1 p! ZSPI Example 4 在本例程中,设置SPI1和SPI2为8bit数据帧,18Mbit/s传输速率
4 l/ Y+ D6 T2 o' R; q9 v/ r- z两个例子波特率不一样,但范例全是使用  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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版