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

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

[复制链接]
qazwsx-19104 发布时间:2008-9-3 19:19
SPI Example 1
3 s' \8 [" a1 K0 a
3 N* d* Z" ]8 {, R& `1 \2 Q, f本例展示了如何实现2个SPI之间的在全双工(full-duplex)模式下通信,通过NSS软件管理,实现了由主向从,接着又从向主发送数据。
4 r0 b$ \- c( _% d, c$ @2 A9 n% S+ c+ _
在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率。; s3 C! X, p9 T' Z! ^7 C5 P, m
在第一阶段,由主SPI1把SPI1_Buffer_Tx发送到SPI2,由从SPI2把SPI2_Buffer_Tx发送到SPI1。传输完成后,通过比较判断传输是否正确。
% U' J( T4 e3 S+ ?  U  U( K5 G8 Z" Z% t# _# l: S: V1 y+ E+ b
由于NSS管脚由软件管理,因此,可以在不改变硬件配置的情况下使SPI1由主变从,而SPI2由从变主。在第二阶段,由从SPI1把SPI1_Buffer_Tx发送到SPI2,由主SPI2把SPI2_Buffer_Tx发送到SPI1。传输完成后,通过比较判断传输是否正确。* w5 P* m4 `3 c6 v4 t% @

+ S0 w6 L0 f* h在EKSTM32F上,如果以上4个传输都正确,则亮起LED1(LD5),否则亮起LED2(LD4)。3 i, w4 H/ l( ?' _) s9 a* F
5 @' l7 C6 p- @5 i( f* Q0 q
SPI Example 2
. N. v* K, }) s( i- b8 b4 E* K% {
9 @* [7 t* q# J" ^本例展示了如何实现2个SPI之间的在单工(simplex)模式下通信,通过在主端使用TxE中断,从端使用RxNE中断,实现把数据由主向从发送。5 i5 [3 y8 H' m
# ?5 q" |" {' |  g
在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率,设置SPI1为主发送端,SPI2为从接收端。授权SPI1的发送缓存为空中断(Tx buffer empty interrupt)和SPI2的接收缓存非空中断(buffer not empty interrupt)。  l) P' z( \; k0 g* f/ S! \3 j9 d: Z

4 P' [# i! C0 ?  |传输开始,在每一个SPI1的TxE中断中,程序把SPI1_Buffer_Tx的数据发送出去,在SPI2的RxNE中断中把数据存放在SPI2_Buffer_Rx。9 ?2 i- E  S1 B

' Y: |& t! G. R; }1 p传输完成后,通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。
4 ?1 ^6 y/ H- L, N) ]) |' t
$ H; g% L" l4 m) b0 W# k- KSPI Example 30 [6 B  [3 h* c% D$ f- o' y3 K
) A5 v; A# C+ O6 Y% x
本例展示了如何实现2个SPI之间的在全双工(full-duplex)模式下通信,在完成主端从端之间的数据交换后,再传送CRC(Cyclic redundancy check)的值。
$ A( Y" N4 a1 ], D+ N3 _1 D9 O
+ ^$ q: {9 W# c" e: C% T在本例程中,设置SPI1和SPI2为16bit数据帧,4.5Mbit/s传输速率,设置SPI1为主发送端,SPI2为从接收端,并打开两端的CRC计算功能。
7 Z! s% _2 S8 r$ P2 K
6 r' |7 H, @. g" q# I传送程序为:首先由从SPI2从SPI2_Buffer_Tx向主SPI1发送数据,再由主SPI1从SPI1_Buffer_Tx向从SPI2发送数据,然后检查2边的RxNE旗位看是否成功接收到数据。重复直到全部数据发送完成。在2端传输最后一个字的时候,打开2端的CRC传送。在高速通讯中,用户应当精简这部分代码。SPI1和SPI2接收到的CRC值分别存放在CRC1_Value5 \# n" m( j! C6 o: b6 B
和CRC2_Value中。1 @6 p5 Q& e2 r, l; F* O

2 o+ J/ y& ?4 |# Y最后通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。# J% l, M/ }# R6 r
+ e6 X! `2 x' j3 {, j" Q/ |
SPI Example 4$ [9 Q3 K1 J/ c, ~  ?2 l
9 t, \! Q9 M) i$ D
本例展示了如何实现2个SPI之间的在单工(simplex)模式下通信,主发送端使用polling模式,从接收端使用DMA接收模式,实现把数据由主向从发送。3 a( J( |5 \& [# v. ^- g2 B

' n* R/ B* b( z, B+ ~1 `在本例程中,设置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. l% J1 d# K, ?2 s: H! l
: V( W. J' F9 j9 ^( A' E
传输开始,每接收到一个数据,SPI1的RxNE请求会激活DMA通道2把SPI1接收收据传送到SPI1_Buffer_Rx。重复知道传输完成。
9 O% ?1 C& g3 \8 r/ v( S2 ^0 F" D6 l6 B
最后通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。
+ T0 k" }* Q0 B! ^8 w9 M
* K( Y3 A3 }$ a. Y* I% TSPI Example 5
1 f& |* z( p! h: ?& d/ X& c0 c8 S/ y4 E
本例展示了如何使用SPI固件函数库和相关的SPI Flash驱动来实现与M25P64 FLASH的通信。2 a3 _) L8 i$ J9 Y) U/ f

: E/ s2 x, D* z" z( {) Q第一步是读取SPI Flash ID,并把它和预设的ID进行核对,如果匹配则置PC.06为1,否则置PC.07为高。
$ D$ @+ E# B2 |$ u" x8 U9 w9 y5 g* w
然后,利用驱动程序对目标区域进行擦除,把“main.c”中定义的缓存Tx_Buffer写入,然后再读出,读出的数据存入缓存Rx_Buffer。比较两块缓存判断整个操作正确与否,判断结果放在变量“TransferStatus1”。% H2 t) k: i1 R& _8 W

9 g+ |% {: o4 Q之后,对目标区域再进行擦除,检查之前写入数据的区域,判断擦除是否彻底。然后读出所有数据,检查是否为0xFF,0xFF表示这一位数据是经过擦除的。检查结果放在变量“TransferStatus2”中。" E5 Y+ d) C4 ^/ R2 p

+ N5 q  A5 @1 r) o9 F$ G- d设置SPI1为主,8bit字长。设置管脚SPI1_NSS为push-pull输出,用来驱动SPI FLASH片选管脚。5 p( G$ I& x; @; n
$ w- f' U0 q* [
文件“main.c”中定义的FLASH_WriteAddress和FLASH_ReadAddress表示程序开始写和读操作的地址。
3 t. Z5 j" |  ^0 k
6 H8 ~& z3 n$ E设置系统时钟为72 MHz,SPI1波特率为18 Mbit/s。: R9 R% L" V4 M% F+ T

' {$ w7 T1 v: J( r在EKSTM32F上,由于没有安装SPI FLASH,本例无法在不添加相应硬件的情况下运行。
2 c+ `# `$ F2 B+ p! X0 I0 i
. P: A) D! N/ e' Z( D! y& R2 dSysTick Example 11 H2 u9 I8 A# q% `/ ^
本例展示了如何设置Cortex-M3的系统定时器SysTick来产生以1毫秒为周期的事项。设置系统时钟为72MHz,SysTick的时钟由AHB时钟提供,为其值HCLK除以8(HCLK/8)。
/ O+ @" |/ E+ ]' S  J: q' G6 l+ z. |; z3 @
利用SysTick计数器为零事项(SysTick end-of-count event)来实现函数“Delay”。间隔在此函数中定义的时间,改变输出管脚PC.06 – PC. 09的状态,使与他们相连的4个LED闪耀。3 {! L/ Z. a$ Y! |
: f* {  a" m; [, P0 [* b* X
在EKSTM32F,上,改PC.06 – PC.09为PC.04 – PC.07。
3 a$ E# j6 _( t* z7 h! `* b
1 @; s3 c7 q1 ?( v2 V+ `出处:barboon
: P# v7 U% q1 }* X7 u3 ?) R) K" {% ]+ v0 C/ o
相关下载:  

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 y; r4 ?8 J8 n9 G2 jSPI Example 1 在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率。; p8 s2 H4 J; p/ m1 t5 {5 ?4 U
SPI Example 4 在本例程中,设置SPI1和SPI2为8bit数据帧,18Mbit/s传输速率
" q2 g9 V2 i$ Z$ f+ ~( m两个例子波特率不一样,但范例全是使用  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 手机版