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

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

[复制链接]
qazwsx-19104 发布时间:2008-9-3 19:19
SPI Example 1# o; k* e# ?: K8 \- F; I7 ]$ z

+ L- E+ j+ Z$ q( `本例展示了如何实现2个SPI之间的在全双工(full-duplex)模式下通信,通过NSS软件管理,实现了由主向从,接着又从向主发送数据。6 y' q7 o4 |1 X0 Q2 L3 P! l4 V+ x
9 a5 p; {4 S2 g+ c
在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率。. Y8 B4 U2 B9 |+ p
在第一阶段,由主SPI1把SPI1_Buffer_Tx发送到SPI2,由从SPI2把SPI2_Buffer_Tx发送到SPI1。传输完成后,通过比较判断传输是否正确。
" S2 w6 r! g1 ^+ U( |) `% g, X6 s/ ?9 J( Y
由于NSS管脚由软件管理,因此,可以在不改变硬件配置的情况下使SPI1由主变从,而SPI2由从变主。在第二阶段,由从SPI1把SPI1_Buffer_Tx发送到SPI2,由主SPI2把SPI2_Buffer_Tx发送到SPI1。传输完成后,通过比较判断传输是否正确。
" [8 W+ l7 M' _: N! D" Y
& O9 [$ N7 g1 T3 `4 D5 U# P! x在EKSTM32F上,如果以上4个传输都正确,则亮起LED1(LD5),否则亮起LED2(LD4)。
' p3 v, o5 W6 P' r5 r8 w  s; G
) r# ~) a% P& p4 W: V, e. oSPI Example 2
; L! f8 @8 \7 f; y' [/ U6 n# `( c$ R
2 [: e  Q# r- g" `$ H. H本例展示了如何实现2个SPI之间的在单工(simplex)模式下通信,通过在主端使用TxE中断,从端使用RxNE中断,实现把数据由主向从发送。
3 `+ |" @& i% h; e! Y" B+ l; `
# |" D2 U% Y; y- k在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率,设置SPI1为主发送端,SPI2为从接收端。授权SPI1的发送缓存为空中断(Tx buffer empty interrupt)和SPI2的接收缓存非空中断(buffer not empty interrupt)。( G+ ?: b! t& `( ?* T

: s' D5 U/ I, v! o传输开始,在每一个SPI1的TxE中断中,程序把SPI1_Buffer_Tx的数据发送出去,在SPI2的RxNE中断中把数据存放在SPI2_Buffer_Rx。
* [& w. B% ~6 H& Q' k: t' h' W. {9 a8 e
传输完成后,通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。
; a6 Y, g- B" [5 P+ v, `" u3 A" @( J$ {; ]  Q1 y4 _2 s5 r" Y
SPI Example 3% k% b% y$ H, r9 r

( o6 U9 V3 j0 c3 A5 I本例展示了如何实现2个SPI之间的在全双工(full-duplex)模式下通信,在完成主端从端之间的数据交换后,再传送CRC(Cyclic redundancy check)的值。8 t" E$ a9 ^* ~4 ^% G
# [' C5 V" w0 m) p
在本例程中,设置SPI1和SPI2为16bit数据帧,4.5Mbit/s传输速率,设置SPI1为主发送端,SPI2为从接收端,并打开两端的CRC计算功能。
* l5 U2 p) N$ n* ]( v) O
- B  x7 k4 |" k) x传送程序为:首先由从SPI2从SPI2_Buffer_Tx向主SPI1发送数据,再由主SPI1从SPI1_Buffer_Tx向从SPI2发送数据,然后检查2边的RxNE旗位看是否成功接收到数据。重复直到全部数据发送完成。在2端传输最后一个字的时候,打开2端的CRC传送。在高速通讯中,用户应当精简这部分代码。SPI1和SPI2接收到的CRC值分别存放在CRC1_Value" U* s* F/ X6 Z" t& F4 N( {
和CRC2_Value中。: K- h& Q& a% ?1 i5 }) a* E

, r2 Q* A# k- H; `' p* K6 j; p! i最后通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。- ?2 N# Q: s1 A/ s2 g% m1 T

, I/ x4 f; R0 g/ \" S  y. a* o) uSPI Example 4
# t2 x4 _3 U% c9 L6 L6 ]1 z' C$ j' K' i
本例展示了如何实现2个SPI之间的在单工(simplex)模式下通信,主发送端使用polling模式,从接收端使用DMA接收模式,实现把数据由主向从发送。
% O. c5 q9 f* Y: }
! x  s9 d, x( N! |7 q在本例程中,设置SPI1和SPI2为8bit数据帧,18Mbit/s传输速率,设置SPI2为主发送端,SPI1为从接收端。设置DMA通道2可由SPI1的Rx请求激活,并把SPI1接收收据传送到SPI1_Buffer_Rx。SPI1和SPI2都设置为双向模式,但主SPI2仅作为发送端,从SPI1仅作为接收端。两端的NSS都由硬件管理。打开SPI2的SS出口可以设置SPI2为主,SPI1为从。9 H8 S+ T* P& K0 `7 ?4 r

# N6 z8 q* M4 g7 p6 E7 _# Y% j传输开始,每接收到一个数据,SPI1的RxNE请求会激活DMA通道2把SPI1接收收据传送到SPI1_Buffer_Rx。重复知道传输完成。. Q0 i- F/ ]  `. X7 ?8 T3 J% \0 G
! D5 A# J& b$ S2 v: D3 P- v
最后通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。
3 l- |* h& f7 O9 y1 V/ T- {' {- h( m2 w+ ~6 U* t* U1 z
SPI Example 5
: t& n- I8 i: j3 Z
, k0 g1 J1 T4 X6 W5 n9 b本例展示了如何使用SPI固件函数库和相关的SPI Flash驱动来实现与M25P64 FLASH的通信。8 `) m4 u# g7 h4 t; {+ m  Z! E

" K+ L' }+ L; R+ u; l第一步是读取SPI Flash ID,并把它和预设的ID进行核对,如果匹配则置PC.06为1,否则置PC.07为高。
5 z, Z% a0 J) h4 g8 X0 A, z0 a- ~8 ]4 m( c
然后,利用驱动程序对目标区域进行擦除,把“main.c”中定义的缓存Tx_Buffer写入,然后再读出,读出的数据存入缓存Rx_Buffer。比较两块缓存判断整个操作正确与否,判断结果放在变量“TransferStatus1”。
! P+ W. c% j, R& ]* j& r' n5 j* w' ~6 H6 L4 v# {8 V
之后,对目标区域再进行擦除,检查之前写入数据的区域,判断擦除是否彻底。然后读出所有数据,检查是否为0xFF,0xFF表示这一位数据是经过擦除的。检查结果放在变量“TransferStatus2”中。
. Q, a4 V# I" t- C
- X/ X* W+ \( T) Y设置SPI1为主,8bit字长。设置管脚SPI1_NSS为push-pull输出,用来驱动SPI FLASH片选管脚。% }5 ?# r* L# n! u5 T  M$ ^

9 G/ @% v6 {; L  x文件“main.c”中定义的FLASH_WriteAddress和FLASH_ReadAddress表示程序开始写和读操作的地址。8 q/ f* N* z& ^. [# l2 U

; ]2 e0 i6 e+ R. i3 I" q' a# A设置系统时钟为72 MHz,SPI1波特率为18 Mbit/s。
( z; y# C# J3 h7 Z& \- V" b" n5 Y) L. p7 c
在EKSTM32F上,由于没有安装SPI FLASH,本例无法在不添加相应硬件的情况下运行。
* u$ `3 W! G# b. n/ @3 M3 q# t- e, ?- m* r% z$ r
SysTick Example 1
# a2 o  D6 Z% Q# u( s本例展示了如何设置Cortex-M3的系统定时器SysTick来产生以1毫秒为周期的事项。设置系统时钟为72MHz,SysTick的时钟由AHB时钟提供,为其值HCLK除以8(HCLK/8)。# N! l: L) v; T* m9 C- {; Z0 e. u
6 C0 y7 F' m! C- ^( t+ H
利用SysTick计数器为零事项(SysTick end-of-count event)来实现函数“Delay”。间隔在此函数中定义的时间,改变输出管脚PC.06 – PC. 09的状态,使与他们相连的4个LED闪耀。0 d$ _1 [3 r" H2 {' C1 A
6 h6 X! V3 \; T5 S) e
在EKSTM32F,上,改PC.06 – PC.09为PC.04 – PC.07。
. ]1 `$ u# t: ~, m1 e& r6 S3 G8 ]7 L* e: z! S4 h
出处:barboon
1 s/ }/ n2 p6 a; B
% O8 k; I: s7 S; ~9 j. c: ~: F; S相关下载:  

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)

请问一下:1 `5 b/ O5 Y; s, G7 b9 R7 [
SPI Example 1 在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率。2 e  q" P+ ]' }) X
SPI Example 4 在本例程中,设置SPI1和SPI2为8bit数据帧,18Mbit/s传输速率+ N& G/ {' X& l) `! U
两个例子波特率不一样,但范例全是使用  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 手机版