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

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

[复制链接]
qazwsx-19104 发布时间:2008-9-3 19:19
SPI Example 1
0 P) v; r. g* p* x! T' E
2 E/ o( n5 B# g5 q# L1 w本例展示了如何实现2个SPI之间的在全双工(full-duplex)模式下通信,通过NSS软件管理,实现了由主向从,接着又从向主发送数据。2 s* m5 I4 ?7 Q; v
" A; O8 U" ?# l( H3 D8 v) N
在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率。
- ?& q1 R4 v3 Z在第一阶段,由主SPI1把SPI1_Buffer_Tx发送到SPI2,由从SPI2把SPI2_Buffer_Tx发送到SPI1。传输完成后,通过比较判断传输是否正确。9 C0 C% ?2 ?, D4 h- `/ x2 q% Y
9 {' Y& h. |4 p; T
由于NSS管脚由软件管理,因此,可以在不改变硬件配置的情况下使SPI1由主变从,而SPI2由从变主。在第二阶段,由从SPI1把SPI1_Buffer_Tx发送到SPI2,由主SPI2把SPI2_Buffer_Tx发送到SPI1。传输完成后,通过比较判断传输是否正确。
: T0 [) ?4 w% @2 [9 S
) M3 R/ }, i! ^+ B- T9 q在EKSTM32F上,如果以上4个传输都正确,则亮起LED1(LD5),否则亮起LED2(LD4)。
" y9 ]% e) e9 T* c; H6 e6 K6 [8 ~8 ]& k' w
SPI Example 2
5 K+ V9 d2 l/ {7 i; H0 d* j/ a$ O( L$ z- a2 D
本例展示了如何实现2个SPI之间的在单工(simplex)模式下通信,通过在主端使用TxE中断,从端使用RxNE中断,实现把数据由主向从发送。
' y1 T* n3 F! T6 @# L* G8 K/ h5 V& I5 [' ~# e; r
在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率,设置SPI1为主发送端,SPI2为从接收端。授权SPI1的发送缓存为空中断(Tx buffer empty interrupt)和SPI2的接收缓存非空中断(buffer not empty interrupt)。
) a( v5 g% u5 W3 R0 g3 A# A+ w
" M- @* {* r0 F+ o8 b传输开始,在每一个SPI1的TxE中断中,程序把SPI1_Buffer_Tx的数据发送出去,在SPI2的RxNE中断中把数据存放在SPI2_Buffer_Rx。
8 j4 |! f  \( x% l/ w$ V1 H5 }; B! R" l& Q# f
传输完成后,通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。
5 k" M( d4 }' u0 R2 B0 Z+ o& n6 m
: b# O% B$ |0 e7 LSPI Example 33 G, P2 L' w: Y% }( q5 N

: m# V  Y' f8 q8 j7 N! \本例展示了如何实现2个SPI之间的在全双工(full-duplex)模式下通信,在完成主端从端之间的数据交换后,再传送CRC(Cyclic redundancy check)的值。1 V: z7 I* c0 a4 r* j3 f/ {
, L0 q' _  _/ Z. Z3 P- b5 _3 C# [. ]6 K
在本例程中,设置SPI1和SPI2为16bit数据帧,4.5Mbit/s传输速率,设置SPI1为主发送端,SPI2为从接收端,并打开两端的CRC计算功能。
; ?" m, w+ i3 P$ Y: F0 ?% I5 f6 E7 i( v( B$ a2 _( |
传送程序为:首先由从SPI2从SPI2_Buffer_Tx向主SPI1发送数据,再由主SPI1从SPI1_Buffer_Tx向从SPI2发送数据,然后检查2边的RxNE旗位看是否成功接收到数据。重复直到全部数据发送完成。在2端传输最后一个字的时候,打开2端的CRC传送。在高速通讯中,用户应当精简这部分代码。SPI1和SPI2接收到的CRC值分别存放在CRC1_Value# P( a4 _, I+ }; s* m, U" k
和CRC2_Value中。
( B6 j: U5 R% A6 }' G3 q7 k! Q. u" |& ~7 |1 Z
最后通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。
! d7 a' y- X1 E$ p/ z, t& p/ z7 S- {( l& O
SPI Example 4
, g* i( r5 w4 l0 l3 f6 w* S. E
& n  l- Q; [0 `* T本例展示了如何实现2个SPI之间的在单工(simplex)模式下通信,主发送端使用polling模式,从接收端使用DMA接收模式,实现把数据由主向从发送。3 X3 ~: Q- v* h) \8 w
2 U0 e  l$ `/ 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为从。6 j) a5 V& b5 R3 c
& p. o! ?6 D9 B, b/ u- `; u0 ?$ }- U
传输开始,每接收到一个数据,SPI1的RxNE请求会激活DMA通道2把SPI1接收收据传送到SPI1_Buffer_Rx。重复知道传输完成。
& ]" C4 z! H) y: r0 n$ b
9 F. N% n  f6 K. f% u5 N最后通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。: I3 W1 N2 a/ P$ Z& ~

9 [' j" e) D$ NSPI Example 55 X1 W' g. o* I& T( I) t
; R) h* x( K% c0 l& V* O# f
本例展示了如何使用SPI固件函数库和相关的SPI Flash驱动来实现与M25P64 FLASH的通信。/ c+ N( E5 V6 V( h$ f* ?5 j
/ y, ?' y8 C, M# K9 P
第一步是读取SPI Flash ID,并把它和预设的ID进行核对,如果匹配则置PC.06为1,否则置PC.07为高。% ?" a- T* u" F" g% h  ?9 Z# m* M
6 X! p7 d# W6 N7 ^% M
然后,利用驱动程序对目标区域进行擦除,把“main.c”中定义的缓存Tx_Buffer写入,然后再读出,读出的数据存入缓存Rx_Buffer。比较两块缓存判断整个操作正确与否,判断结果放在变量“TransferStatus1”。
; U5 D- E; W+ r% A3 y; i6 l# v: ^
4 `/ r$ \7 j' h( C# l7 P之后,对目标区域再进行擦除,检查之前写入数据的区域,判断擦除是否彻底。然后读出所有数据,检查是否为0xFF,0xFF表示这一位数据是经过擦除的。检查结果放在变量“TransferStatus2”中。
" T" e! f3 G3 V0 W* Y9 Y# @/ f1 d; W6 w
设置SPI1为主,8bit字长。设置管脚SPI1_NSS为push-pull输出,用来驱动SPI FLASH片选管脚。4 D: E3 M% T. L; S
$ i( u# G0 z/ I1 s& d$ P( y
文件“main.c”中定义的FLASH_WriteAddress和FLASH_ReadAddress表示程序开始写和读操作的地址。
$ [" ]: V" v1 ]2 l
, q! @' G  H( ^$ _5 c; R: S! X! d设置系统时钟为72 MHz,SPI1波特率为18 Mbit/s。
7 F6 ]  q/ w2 t( Y6 [1 v7 e5 d! a0 p3 Q- c: n5 h% j& ?
在EKSTM32F上,由于没有安装SPI FLASH,本例无法在不添加相应硬件的情况下运行。" Z) ^: B" Z" w8 u
, R0 Y* y! I% H8 W( d
SysTick Example 1
+ R; s0 s4 }8 C本例展示了如何设置Cortex-M3的系统定时器SysTick来产生以1毫秒为周期的事项。设置系统时钟为72MHz,SysTick的时钟由AHB时钟提供,为其值HCLK除以8(HCLK/8)。
8 p3 O1 T# ?* n! m: x& ~  _6 |3 x0 i1 v0 o& y
利用SysTick计数器为零事项(SysTick end-of-count event)来实现函数“Delay”。间隔在此函数中定义的时间,改变输出管脚PC.06 – PC. 09的状态,使与他们相连的4个LED闪耀。
$ }7 d6 K# ^/ x1 k' p1 z( A  N2 @5 g  X
在EKSTM32F,上,改PC.06 – PC.09为PC.04 – PC.07。5 Z9 G* u( W% T" _4 j- L. J& \" _
. i* b/ {8 H6 r2 ^$ I. E8 d% j- N
出处:barboon
- ]( [* F' \' r: S* R- n4 V, m8 B* R) V( M6 Q: F
相关下载:  

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)

请问一下:
# A6 D" J0 |4 K# b, qSPI Example 1 在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率。, |# m' N9 K0 h" s( o
SPI Example 4 在本例程中,设置SPI1和SPI2为8bit数据帧,18Mbit/s传输速率
/ n7 @3 F$ \# i2 T两个例子波特率不一样,但范例全是使用  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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版