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

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

[复制链接]
qazwsx-19104 发布时间:2008-9-3 19:19
SPI Example 1& [+ u9 P4 v3 u( K! E

# t8 g/ C2 n: ^( K% D0 s本例展示了如何实现2个SPI之间的在全双工(full-duplex)模式下通信,通过NSS软件管理,实现了由主向从,接着又从向主发送数据。
. }8 e0 C3 P1 z1 A0 m+ ?1 R$ C  ^) {' r" G1 B" _& [
在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率。
8 N$ x+ I+ Z9 A8 O在第一阶段,由主SPI1把SPI1_Buffer_Tx发送到SPI2,由从SPI2把SPI2_Buffer_Tx发送到SPI1。传输完成后,通过比较判断传输是否正确。
. ^9 g0 b3 l* u  x/ j- S- w4 p
2 ^! I  _; @2 H. b由于NSS管脚由软件管理,因此,可以在不改变硬件配置的情况下使SPI1由主变从,而SPI2由从变主。在第二阶段,由从SPI1把SPI1_Buffer_Tx发送到SPI2,由主SPI2把SPI2_Buffer_Tx发送到SPI1。传输完成后,通过比较判断传输是否正确。
$ }( M- r! a) G  ]/ d8 e1 S1 [8 T4 r9 d. L* P
在EKSTM32F上,如果以上4个传输都正确,则亮起LED1(LD5),否则亮起LED2(LD4)。
8 O1 K6 X3 H6 I/ H! u' ?
3 a2 c+ \. f( ?1 GSPI Example 2
4 b! O/ ^4 w- |4 T( P/ n2 d1 ^" A  d8 I0 [3 s
本例展示了如何实现2个SPI之间的在单工(simplex)模式下通信,通过在主端使用TxE中断,从端使用RxNE中断,实现把数据由主向从发送。
5 w7 C# V/ q1 }* C- y5 _$ v" @
2 d) u4 `& I* H" \+ m在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率,设置SPI1为主发送端,SPI2为从接收端。授权SPI1的发送缓存为空中断(Tx buffer empty interrupt)和SPI2的接收缓存非空中断(buffer not empty interrupt)。
7 I1 X+ H; t0 h! l# d  A) _: y7 U) Q; X+ B& ]
传输开始,在每一个SPI1的TxE中断中,程序把SPI1_Buffer_Tx的数据发送出去,在SPI2的RxNE中断中把数据存放在SPI2_Buffer_Rx。
) F9 V7 \5 e- F
1 M  }  h% i+ W# n6 j传输完成后,通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。
6 _4 R3 k6 J3 G9 M) O, U2 _, D0 L& h1 l; Z* H4 m6 E
SPI Example 3
  f* ]+ |( }' l8 H/ v( U- t* \* `1 d* s
本例展示了如何实现2个SPI之间的在全双工(full-duplex)模式下通信,在完成主端从端之间的数据交换后,再传送CRC(Cyclic redundancy check)的值。- T3 _$ l3 x" V+ B. u$ j1 I
5 i6 M9 ^2 o* p% G  a
在本例程中,设置SPI1和SPI2为16bit数据帧,4.5Mbit/s传输速率,设置SPI1为主发送端,SPI2为从接收端,并打开两端的CRC计算功能。
7 q% v! _; d! H4 R* [
7 ]" G& q6 G/ A传送程序为:首先由从SPI2从SPI2_Buffer_Tx向主SPI1发送数据,再由主SPI1从SPI1_Buffer_Tx向从SPI2发送数据,然后检查2边的RxNE旗位看是否成功接收到数据。重复直到全部数据发送完成。在2端传输最后一个字的时候,打开2端的CRC传送。在高速通讯中,用户应当精简这部分代码。SPI1和SPI2接收到的CRC值分别存放在CRC1_Value
% ~+ N9 Y# W" I和CRC2_Value中。
+ n) j! H' ^5 B( u4 |1 J8 U5 m
最后通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。
: ]- \6 y: V8 w3 o* ]. n" s/ g. l9 f* k3 ]5 n
SPI Example 42 E" K2 D$ D% H* Z8 Z: K- n0 h

7 \0 h& X( S5 y' Z* `本例展示了如何实现2个SPI之间的在单工(simplex)模式下通信,主发送端使用polling模式,从接收端使用DMA接收模式,实现把数据由主向从发送。+ I) z8 k# ^. J! y

/ j" s0 K; W. T5 L在本例程中,设置SPI1和SPI2为8bit数据帧,18Mbit/s传输速率,设置SPI2为主发送端,SPI1为从接收端。设置DMA通道2可由SPI1的Rx请求激活,并把SPI1接收收据传送到SPI1_Buffer_Rx。SPI1和SPI2都设置为双向模式,但主SPI2仅作为发送端,从SPI1仅作为接收端。两端的NSS都由硬件管理。打开SPI2的SS出口可以设置SPI2为主,SPI1为从。( u- f1 X5 C4 K$ u

+ S1 a4 v/ M+ P' d传输开始,每接收到一个数据,SPI1的RxNE请求会激活DMA通道2把SPI1接收收据传送到SPI1_Buffer_Rx。重复知道传输完成。$ A% X8 z7 a1 I$ f  B0 k1 B% x

" [0 B- P+ N8 P! i, @" ]8 [最后通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。* c. K. u) q' ]( J* i2 ?
& \# y6 O5 C  o: Q* f
SPI Example 5
6 j8 [8 _6 ?7 [. ^4 ]5 q( K3 l- S  ^6 y; Q/ Q! v' e
本例展示了如何使用SPI固件函数库和相关的SPI Flash驱动来实现与M25P64 FLASH的通信。
, g. X) F& Y' r5 L) `) A
. |7 B; X5 |' u/ F第一步是读取SPI Flash ID,并把它和预设的ID进行核对,如果匹配则置PC.06为1,否则置PC.07为高。
" u" t3 n# t/ h( e1 {& u3 M5 I! \7 A4 Y" ^3 Z$ [
然后,利用驱动程序对目标区域进行擦除,把“main.c”中定义的缓存Tx_Buffer写入,然后再读出,读出的数据存入缓存Rx_Buffer。比较两块缓存判断整个操作正确与否,判断结果放在变量“TransferStatus1”。
3 ?" d* G2 ?) H( p/ y% R# d2 ?1 O
, U. a' f0 B1 F, |之后,对目标区域再进行擦除,检查之前写入数据的区域,判断擦除是否彻底。然后读出所有数据,检查是否为0xFF,0xFF表示这一位数据是经过擦除的。检查结果放在变量“TransferStatus2”中。3 h, h8 W! d, t5 L6 d
9 t4 \' }; |8 L) z9 L+ k, _) \# G
设置SPI1为主,8bit字长。设置管脚SPI1_NSS为push-pull输出,用来驱动SPI FLASH片选管脚。* T4 t) m: M! }: x
! j  u7 ~: k* L7 E- n" P
文件“main.c”中定义的FLASH_WriteAddress和FLASH_ReadAddress表示程序开始写和读操作的地址。5 i+ `+ l3 i. A0 q! ~1 J7 X

" j0 U( U7 N/ _设置系统时钟为72 MHz,SPI1波特率为18 Mbit/s。# |  d" H( O' ?) T' r# j* g$ e
8 R& H$ P3 J* r* V9 s9 q' M) i9 s
在EKSTM32F上,由于没有安装SPI FLASH,本例无法在不添加相应硬件的情况下运行。5 O" p/ G; b: \% J7 d: C
( ^, f4 E4 |! ?
SysTick Example 1" g" C8 c8 Q  T: N+ Y9 K
本例展示了如何设置Cortex-M3的系统定时器SysTick来产生以1毫秒为周期的事项。设置系统时钟为72MHz,SysTick的时钟由AHB时钟提供,为其值HCLK除以8(HCLK/8)。+ ?* j, G) K, |6 L! H1 Z* G

$ g9 u+ e$ M) c利用SysTick计数器为零事项(SysTick end-of-count event)来实现函数“Delay”。间隔在此函数中定义的时间,改变输出管脚PC.06 – PC. 09的状态,使与他们相连的4个LED闪耀。$ ?5 b7 L* A0 E

0 U6 Z4 v7 i) \2 l: R. i; j; X在EKSTM32F,上,改PC.06 – PC.09为PC.04 – PC.07。
3 ^) I& q& c* {3 x$ G
6 l) V& D2 ?7 a. v出处:barboon
- P5 _; @7 H' ?) O
% m! B6 S6 Y" D3 i相关下载:  

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)

请问一下:8 ]: c( Q$ x% E0 `/ z, f/ u( [8 F, w9 p
SPI Example 1 在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率。' \) P* [! T; d% f7 n
SPI Example 4 在本例程中,设置SPI1和SPI2为8bit数据帧,18Mbit/s传输速率# f2 @$ `  ^+ V' g) O* F
两个例子波特率不一样,但范例全是使用  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 手机版