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

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

[复制链接]
qazwsx-19104 发布时间:2008-9-3 19:19
SPI Example 18 q7 R/ n$ G4 E/ M; P. o4 F

9 F1 ?6 U: I4 m* B& s% a本例展示了如何实现2个SPI之间的在全双工(full-duplex)模式下通信,通过NSS软件管理,实现了由主向从,接着又从向主发送数据。
$ j1 j. b) i$ L9 X" ~" X
5 E1 k5 B# P. B在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率。
! N' U5 b4 S2 T' f( R在第一阶段,由主SPI1把SPI1_Buffer_Tx发送到SPI2,由从SPI2把SPI2_Buffer_Tx发送到SPI1。传输完成后,通过比较判断传输是否正确。6 @1 V7 p% S% h4 v! z8 T
1 F) |" d2 A/ q, D8 a
由于NSS管脚由软件管理,因此,可以在不改变硬件配置的情况下使SPI1由主变从,而SPI2由从变主。在第二阶段,由从SPI1把SPI1_Buffer_Tx发送到SPI2,由主SPI2把SPI2_Buffer_Tx发送到SPI1。传输完成后,通过比较判断传输是否正确。
0 C6 r0 I/ D7 L6 r
* T* d8 N/ P% s; q# p  T在EKSTM32F上,如果以上4个传输都正确,则亮起LED1(LD5),否则亮起LED2(LD4)。* a4 ^, k# q. V) T5 ~$ u$ U: y

/ s" P0 N" k8 G% ]" pSPI Example 2
. X7 V# T% s; q: A4 m, S1 v, ]) w8 O4 Q8 o+ s9 w2 q+ I
本例展示了如何实现2个SPI之间的在单工(simplex)模式下通信,通过在主端使用TxE中断,从端使用RxNE中断,实现把数据由主向从发送。
# m& P6 r1 K% e# [" P( v% s2 u7 X
7 `- o1 a$ U" @; _, M, Q) `! {在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率,设置SPI1为主发送端,SPI2为从接收端。授权SPI1的发送缓存为空中断(Tx buffer empty interrupt)和SPI2的接收缓存非空中断(buffer not empty interrupt)。
; Z2 [9 @8 s* R" j2 Q6 s; U
) F- X. ^) Y, k0 v传输开始,在每一个SPI1的TxE中断中,程序把SPI1_Buffer_Tx的数据发送出去,在SPI2的RxNE中断中把数据存放在SPI2_Buffer_Rx。
2 B! Z; Y" r- o9 r; ]
7 X0 \( D% s8 D5 A传输完成后,通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。% F$ J6 {" U7 |
6 C8 V* N3 t& l
SPI Example 3
; Z) x; y$ u4 h9 ]
, [0 j8 l# @/ z4 g9 C5 b本例展示了如何实现2个SPI之间的在全双工(full-duplex)模式下通信,在完成主端从端之间的数据交换后,再传送CRC(Cyclic redundancy check)的值。6 K' B) [8 P" ^$ Q3 j
, {& u% l* F8 m, Z8 H1 w/ e
在本例程中,设置SPI1和SPI2为16bit数据帧,4.5Mbit/s传输速率,设置SPI1为主发送端,SPI2为从接收端,并打开两端的CRC计算功能。* c# g9 i6 L# t4 n* L, r
0 R4 V/ Y$ l0 n1 `
传送程序为:首先由从SPI2从SPI2_Buffer_Tx向主SPI1发送数据,再由主SPI1从SPI1_Buffer_Tx向从SPI2发送数据,然后检查2边的RxNE旗位看是否成功接收到数据。重复直到全部数据发送完成。在2端传输最后一个字的时候,打开2端的CRC传送。在高速通讯中,用户应当精简这部分代码。SPI1和SPI2接收到的CRC值分别存放在CRC1_Value
! g  h. k8 ?3 P1 Y. k- ^" c8 b* v和CRC2_Value中。
7 `8 a2 O. P1 w" c0 K! Y5 z/ o6 p  n& ^: k
最后通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。
9 Y% r, E6 S' ?2 p7 @0 y. K+ y
% j: T8 ^9 d4 k! X$ m; U( i6 vSPI Example 41 U) F9 i! l% y/ {

6 u0 ~+ q' x2 t9 D; p本例展示了如何实现2个SPI之间的在单工(simplex)模式下通信,主发送端使用polling模式,从接收端使用DMA接收模式,实现把数据由主向从发送。* s; k- f; j' i; r8 u8 R% E0 I1 f
% @( l) y1 s( ~
在本例程中,设置SPI1和SPI2为8bit数据帧,18Mbit/s传输速率,设置SPI2为主发送端,SPI1为从接收端。设置DMA通道2可由SPI1的Rx请求激活,并把SPI1接收收据传送到SPI1_Buffer_Rx。SPI1和SPI2都设置为双向模式,但主SPI2仅作为发送端,从SPI1仅作为接收端。两端的NSS都由硬件管理。打开SPI2的SS出口可以设置SPI2为主,SPI1为从。4 b! E, t- c) j% K5 v+ d

" x; D( [7 X/ V+ a" r) j传输开始,每接收到一个数据,SPI1的RxNE请求会激活DMA通道2把SPI1接收收据传送到SPI1_Buffer_Rx。重复知道传输完成。. A* }5 \+ ^: t. V7 f& ]" R9 }* K0 j
" [% z6 ?- j' ~" I. O
最后通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。
9 b. _$ t! f1 D- H$ z
, P2 k, T+ l6 x; FSPI Example 5
# j. n2 J$ f4 L( ~
* `, r$ ]0 g: @* P4 v本例展示了如何使用SPI固件函数库和相关的SPI Flash驱动来实现与M25P64 FLASH的通信。1 e# R! G* G: }8 _9 t! Z
/ @  P" P% @6 y+ k0 b  P
第一步是读取SPI Flash ID,并把它和预设的ID进行核对,如果匹配则置PC.06为1,否则置PC.07为高。
( M: f# V2 |: ~6 P4 y+ q6 c
% }2 S& X2 i- D1 j" H然后,利用驱动程序对目标区域进行擦除,把“main.c”中定义的缓存Tx_Buffer写入,然后再读出,读出的数据存入缓存Rx_Buffer。比较两块缓存判断整个操作正确与否,判断结果放在变量“TransferStatus1”。
! Z: K" i2 G; n& U% z1 y, Y/ a
( q4 s8 b  C" ~3 f之后,对目标区域再进行擦除,检查之前写入数据的区域,判断擦除是否彻底。然后读出所有数据,检查是否为0xFF,0xFF表示这一位数据是经过擦除的。检查结果放在变量“TransferStatus2”中。
0 o& N* y0 {4 d/ z8 ^( `
% u% Q" P; h$ w+ q设置SPI1为主,8bit字长。设置管脚SPI1_NSS为push-pull输出,用来驱动SPI FLASH片选管脚。% V$ a" t. c. D! s0 q7 s5 u

) G: [, X6 Q" y. v5 T, H- J& I: W文件“main.c”中定义的FLASH_WriteAddress和FLASH_ReadAddress表示程序开始写和读操作的地址。6 E% ?3 e, m1 l/ C* D. u& X3 P! f
3 w  J1 c* Y, R' ^7 w, U
设置系统时钟为72 MHz,SPI1波特率为18 Mbit/s。
) v, _" G' q: ~5 e( D
' M) N# R4 ^/ r- N& T在EKSTM32F上,由于没有安装SPI FLASH,本例无法在不添加相应硬件的情况下运行。
5 [8 @* p  v( h8 g- D, T* `* D" ~& I: E- c# k
SysTick Example 1
( f2 B/ O. @2 g- ?' i& d本例展示了如何设置Cortex-M3的系统定时器SysTick来产生以1毫秒为周期的事项。设置系统时钟为72MHz,SysTick的时钟由AHB时钟提供,为其值HCLK除以8(HCLK/8)。4 T( Y  x6 \$ P$ t7 F) N

% N2 J' o! X* H. C6 t" D# l利用SysTick计数器为零事项(SysTick end-of-count event)来实现函数“Delay”。间隔在此函数中定义的时间,改变输出管脚PC.06 – PC. 09的状态,使与他们相连的4个LED闪耀。2 S6 y7 P0 Z  B4 ^
; J4 _  b* U$ H/ h1 }
在EKSTM32F,上,改PC.06 – PC.09为PC.04 – PC.07。( w2 @, d- X  S8 a$ u
' n. W& ^$ @) l2 l
出处:barboon
8 n6 i7 H; \# n/ v4 _
9 Y& Y! D9 F. e1 N4 l+ @相关下载:  

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)

请问一下:$ s/ }3 ?5 u9 K0 e9 R
SPI Example 1 在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率。
3 T! H  h. J" [3 I$ g# kSPI Example 4 在本例程中,设置SPI1和SPI2为8bit数据帧,18Mbit/s传输速率
. T3 R& v4 w& v7 e2 J两个例子波特率不一样,但范例全是使用  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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版