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

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

[复制链接]
qazwsx-19104 发布时间:2008-9-3 19:19
SPI Example 1. u# O+ L/ L, P% P8 w
- K, y( G' S" |% T  N
本例展示了如何实现2个SPI之间的在全双工(full-duplex)模式下通信,通过NSS软件管理,实现了由主向从,接着又从向主发送数据。3 u( y1 W  M( ?3 Y! V0 u" v6 ?

5 Y' @" a2 m# S; ]5 i在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率。; c1 M8 G7 q' i3 y7 e
在第一阶段,由主SPI1把SPI1_Buffer_Tx发送到SPI2,由从SPI2把SPI2_Buffer_Tx发送到SPI1。传输完成后,通过比较判断传输是否正确。& y+ F" F& {- E- Q3 d. |

7 R* F0 r. S8 y% \/ ^$ H' J由于NSS管脚由软件管理,因此,可以在不改变硬件配置的情况下使SPI1由主变从,而SPI2由从变主。在第二阶段,由从SPI1把SPI1_Buffer_Tx发送到SPI2,由主SPI2把SPI2_Buffer_Tx发送到SPI1。传输完成后,通过比较判断传输是否正确。- B6 s" c6 ^0 `; h7 }# }* L
. A  F3 d$ u, s2 y/ J2 s
在EKSTM32F上,如果以上4个传输都正确,则亮起LED1(LD5),否则亮起LED2(LD4)。
$ o4 H, Q3 t0 f& j1 Y) @' G: K( F- D# \$ u  h) _
SPI Example 2! k- ^( r& Q& [7 ^6 m" D9 i/ `7 e
; i2 x- [: l! v6 p( r/ D" y/ a
本例展示了如何实现2个SPI之间的在单工(simplex)模式下通信,通过在主端使用TxE中断,从端使用RxNE中断,实现把数据由主向从发送。
' Q6 @8 R6 q! d) }, z6 V1 |( @& b6 ?1 J4 ?. c  o) Q
在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率,设置SPI1为主发送端,SPI2为从接收端。授权SPI1的发送缓存为空中断(Tx buffer empty interrupt)和SPI2的接收缓存非空中断(buffer not empty interrupt)。
! Q3 ^. f5 q/ s$ Z* v  y; T9 }3 ^6 B4 t  M
传输开始,在每一个SPI1的TxE中断中,程序把SPI1_Buffer_Tx的数据发送出去,在SPI2的RxNE中断中把数据存放在SPI2_Buffer_Rx。3 J7 ?* l* k' H1 _2 b

1 b- A7 V2 w) X9 U$ n传输完成后,通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。# h9 x9 e8 d. Z/ }7 W7 K
0 i+ L, }5 `$ t" C
SPI Example 3
& g# Y0 z! u1 y* s. {8 Z; k# G+ m
7 c  T' F! k  Y本例展示了如何实现2个SPI之间的在全双工(full-duplex)模式下通信,在完成主端从端之间的数据交换后,再传送CRC(Cyclic redundancy check)的值。7 b; _0 a* t0 o* O" M

- n8 g( N( f+ {5 s* n在本例程中,设置SPI1和SPI2为16bit数据帧,4.5Mbit/s传输速率,设置SPI1为主发送端,SPI2为从接收端,并打开两端的CRC计算功能。
, _: S" ^8 `% @( E  E4 Z) G9 f
! G6 Y% g7 k) q  \  m传送程序为:首先由从SPI2从SPI2_Buffer_Tx向主SPI1发送数据,再由主SPI1从SPI1_Buffer_Tx向从SPI2发送数据,然后检查2边的RxNE旗位看是否成功接收到数据。重复直到全部数据发送完成。在2端传输最后一个字的时候,打开2端的CRC传送。在高速通讯中,用户应当精简这部分代码。SPI1和SPI2接收到的CRC值分别存放在CRC1_Value. ?. m. V$ U/ Q7 T1 Q: t
和CRC2_Value中。
% i. ?! G6 C; H) X# k4 P& D/ f/ o, i* E" e
最后通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。' F* a  C+ G" X4 X' h
( k+ @: R* R. }3 \7 W6 ~
SPI Example 49 W0 H% i+ k2 U% j8 R

; L( {( Z9 S& ~2 R) l# E本例展示了如何实现2个SPI之间的在单工(simplex)模式下通信,主发送端使用polling模式,从接收端使用DMA接收模式,实现把数据由主向从发送。
9 g1 a2 r7 H; E. a/ g
; T( e0 s  n0 ]# @. }0 p在本例程中,设置SPI1和SPI2为8bit数据帧,18Mbit/s传输速率,设置SPI2为主发送端,SPI1为从接收端。设置DMA通道2可由SPI1的Rx请求激活,并把SPI1接收收据传送到SPI1_Buffer_Rx。SPI1和SPI2都设置为双向模式,但主SPI2仅作为发送端,从SPI1仅作为接收端。两端的NSS都由硬件管理。打开SPI2的SS出口可以设置SPI2为主,SPI1为从。
; l* w3 Y* l: L7 Z* w0 o) D- j* e# F$ N: m
传输开始,每接收到一个数据,SPI1的RxNE请求会激活DMA通道2把SPI1接收收据传送到SPI1_Buffer_Rx。重复知道传输完成。
& X3 k9 M7 D* I2 B5 t7 ~& x" {6 S, [
最后通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。7 M2 [3 P; U* y7 h% @# X9 V
" H" A2 w7 ^0 U" j* \$ A* N) x3 m
SPI Example 5) a7 z, Q6 V/ d% j8 y
( m/ N  \" o9 c$ `# u
本例展示了如何使用SPI固件函数库和相关的SPI Flash驱动来实现与M25P64 FLASH的通信。, p/ g( f- }( I" S2 a) P+ C0 S
, E! w; }* {2 q4 a/ C' \0 U' x
第一步是读取SPI Flash ID,并把它和预设的ID进行核对,如果匹配则置PC.06为1,否则置PC.07为高。( t& }* m* x* s+ G6 c

; y* O1 X( @: S' \然后,利用驱动程序对目标区域进行擦除,把“main.c”中定义的缓存Tx_Buffer写入,然后再读出,读出的数据存入缓存Rx_Buffer。比较两块缓存判断整个操作正确与否,判断结果放在变量“TransferStatus1”。1 Q8 r. a1 B3 l& w, f( G4 {8 L
- I1 ?; ]% O8 T6 o5 `
之后,对目标区域再进行擦除,检查之前写入数据的区域,判断擦除是否彻底。然后读出所有数据,检查是否为0xFF,0xFF表示这一位数据是经过擦除的。检查结果放在变量“TransferStatus2”中。1 S. U) g# \3 J' e

; j( J; B+ X' Q5 |6 G! o3 T设置SPI1为主,8bit字长。设置管脚SPI1_NSS为push-pull输出,用来驱动SPI FLASH片选管脚。1 p( N. [9 J8 q! `8 s) J% Q! X
9 L0 F9 C, y( @) p2 L5 t% T" I5 X
文件“main.c”中定义的FLASH_WriteAddress和FLASH_ReadAddress表示程序开始写和读操作的地址。1 G3 v6 k# W  o6 i
& ?3 S1 m/ U" |; A
设置系统时钟为72 MHz,SPI1波特率为18 Mbit/s。& a$ p2 f2 |5 y/ X

4 O$ l3 M5 a5 U. k: h& T8 @6 m在EKSTM32F上,由于没有安装SPI FLASH,本例无法在不添加相应硬件的情况下运行。# u5 r. F  F- a7 T

/ e, k& P, s  c4 p/ lSysTick Example 11 ~) U- Z$ r( ]: i
本例展示了如何设置Cortex-M3的系统定时器SysTick来产生以1毫秒为周期的事项。设置系统时钟为72MHz,SysTick的时钟由AHB时钟提供,为其值HCLK除以8(HCLK/8)。4 j+ P3 C, p" `7 f: X7 y% X' @

  }/ [' j6 V# c9 i/ \$ F" ]利用SysTick计数器为零事项(SysTick end-of-count event)来实现函数“Delay”。间隔在此函数中定义的时间,改变输出管脚PC.06 – PC. 09的状态,使与他们相连的4个LED闪耀。
/ j, X; p' p- D, K2 z* f; l: m6 L2 t5 e; w# A! h2 J
在EKSTM32F,上,改PC.06 – PC.09为PC.04 – PC.07。6 t, f) I. k' B( M( e6 l, q
  M# X' ]# d/ D& p2 p6 I9 {
出处:barboon5 s  j2 }" U. K; z
2 p0 Z  @( y" K* g- y1 M3 Q
相关下载:  

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)

请问一下:
! [( d. m6 @# c& m1 |: j/ ISPI Example 1 在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率。5 j. z$ v1 T1 B; b
SPI Example 4 在本例程中,设置SPI1和SPI2为8bit数据帧,18Mbit/s传输速率
5 |( Z; \, A+ r两个例子波特率不一样,但范例全是使用  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 手机版