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

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

[复制链接]
qazwsx-19104 发布时间:2008-9-3 19:19
SPI Example 1
; F" c2 C3 U, S3 t( V9 B
$ a: O# a$ `! N% p3 U本例展示了如何实现2个SPI之间的在全双工(full-duplex)模式下通信,通过NSS软件管理,实现了由主向从,接着又从向主发送数据。
% n3 z4 ]/ \  _5 ]+ u' p  p7 T" L: t5 Q4 u+ k- u# H
在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率。
& U- x7 Q! q* }在第一阶段,由主SPI1把SPI1_Buffer_Tx发送到SPI2,由从SPI2把SPI2_Buffer_Tx发送到SPI1。传输完成后,通过比较判断传输是否正确。
) z# @% Q- \# e: G* B7 C- W. w- U& ?
由于NSS管脚由软件管理,因此,可以在不改变硬件配置的情况下使SPI1由主变从,而SPI2由从变主。在第二阶段,由从SPI1把SPI1_Buffer_Tx发送到SPI2,由主SPI2把SPI2_Buffer_Tx发送到SPI1。传输完成后,通过比较判断传输是否正确。! z( L) V$ o% ]% |3 X

5 X( u/ E, l- R: y4 l9 _: |: G# T在EKSTM32F上,如果以上4个传输都正确,则亮起LED1(LD5),否则亮起LED2(LD4)。* W/ Y( A( ]- a  u* i4 J

: i9 g) G' d2 _0 C9 TSPI Example 2
3 j1 m2 O) S- Z) \* d: y9 g1 A
, m. ]' {! ~5 j' T6 t$ v本例展示了如何实现2个SPI之间的在单工(simplex)模式下通信,通过在主端使用TxE中断,从端使用RxNE中断,实现把数据由主向从发送。
1 R6 \# t2 W; ~' N4 A" y* ~; v( ]4 h9 c: D5 t' `8 d
在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率,设置SPI1为主发送端,SPI2为从接收端。授权SPI1的发送缓存为空中断(Tx buffer empty interrupt)和SPI2的接收缓存非空中断(buffer not empty interrupt)。+ z* x# A1 P/ }" L9 E% x/ W

3 R8 g1 C0 P( p传输开始,在每一个SPI1的TxE中断中,程序把SPI1_Buffer_Tx的数据发送出去,在SPI2的RxNE中断中把数据存放在SPI2_Buffer_Rx。7 }7 j0 z. L8 ~/ C- M2 K
; U& l; r. W! i, V, X, z6 u
传输完成后,通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。3 T1 Z2 p4 F2 T; ~* H  f" }% f" {
; M+ M3 b8 U  g* [4 e
SPI Example 3
; `# k0 B/ s4 Z
  k* g8 L/ Q# }本例展示了如何实现2个SPI之间的在全双工(full-duplex)模式下通信,在完成主端从端之间的数据交换后,再传送CRC(Cyclic redundancy check)的值。  q% f6 T6 `8 _5 Q

( m4 ]  v' L6 \在本例程中,设置SPI1和SPI2为16bit数据帧,4.5Mbit/s传输速率,设置SPI1为主发送端,SPI2为从接收端,并打开两端的CRC计算功能。: w, v7 w2 U4 D1 @- p5 s2 K# n& P

* O; \! h- k. D+ ^+ V传送程序为:首先由从SPI2从SPI2_Buffer_Tx向主SPI1发送数据,再由主SPI1从SPI1_Buffer_Tx向从SPI2发送数据,然后检查2边的RxNE旗位看是否成功接收到数据。重复直到全部数据发送完成。在2端传输最后一个字的时候,打开2端的CRC传送。在高速通讯中,用户应当精简这部分代码。SPI1和SPI2接收到的CRC值分别存放在CRC1_Value9 V: e4 M4 d0 p! A
和CRC2_Value中。
& l" q5 ]' m% F2 z- u& W& r
$ p6 P" E; L+ d) H, E6 A最后通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。; i* a4 v- ^+ A( g2 K

* v+ ?2 a7 Z/ j6 V! \; rSPI Example 4
' P! O: k  {; }2 N0 a' d0 y: Z8 P  L! ~/ W5 B3 n
本例展示了如何实现2个SPI之间的在单工(simplex)模式下通信,主发送端使用polling模式,从接收端使用DMA接收模式,实现把数据由主向从发送。
* Y; n$ L3 ?  n& C. M4 S8 ~/ W5 N+ _; [8 n
在本例程中,设置SPI1和SPI2为8bit数据帧,18Mbit/s传输速率,设置SPI2为主发送端,SPI1为从接收端。设置DMA通道2可由SPI1的Rx请求激活,并把SPI1接收收据传送到SPI1_Buffer_Rx。SPI1和SPI2都设置为双向模式,但主SPI2仅作为发送端,从SPI1仅作为接收端。两端的NSS都由硬件管理。打开SPI2的SS出口可以设置SPI2为主,SPI1为从。
3 E: q1 [. e/ T
8 A7 g/ g* a9 ~; A  M* o传输开始,每接收到一个数据,SPI1的RxNE请求会激活DMA通道2把SPI1接收收据传送到SPI1_Buffer_Rx。重复知道传输完成。1 k. m  k: i: |0 i
" ~( q0 R% b. `) E, R
最后通过比较判断传输是否正确。如果正确,则亮起LED1(LD5),否则亮起LED2(LD4)。
/ K  d0 E9 f0 C. ^2 n6 x
4 S& g: E: a+ USPI Example 5; T* O8 o) I5 Y( S# u1 v6 A# u6 m" p
- z  y: i2 P7 {7 v( y
本例展示了如何使用SPI固件函数库和相关的SPI Flash驱动来实现与M25P64 FLASH的通信。+ x, w' o; i/ P' F/ n, j
$ D; G7 [# g3 s% O; e1 D+ u7 ^5 ^
第一步是读取SPI Flash ID,并把它和预设的ID进行核对,如果匹配则置PC.06为1,否则置PC.07为高。: _% x5 c$ K2 [$ r# D5 f
. T( ^4 {: i/ e, U. B
然后,利用驱动程序对目标区域进行擦除,把“main.c”中定义的缓存Tx_Buffer写入,然后再读出,读出的数据存入缓存Rx_Buffer。比较两块缓存判断整个操作正确与否,判断结果放在变量“TransferStatus1”。
0 D9 g# l8 i. L; }" t
2 ~- q' r+ L4 U. o' y' t* s! {" y之后,对目标区域再进行擦除,检查之前写入数据的区域,判断擦除是否彻底。然后读出所有数据,检查是否为0xFF,0xFF表示这一位数据是经过擦除的。检查结果放在变量“TransferStatus2”中。
0 x+ z1 P& g" _; l7 Q9 F
- {; m, Y% Q" T设置SPI1为主,8bit字长。设置管脚SPI1_NSS为push-pull输出,用来驱动SPI FLASH片选管脚。& d6 C0 E/ ]' v$ w% r4 ?

# u, n  Y7 }" I$ q* P9 o7 e! K7 `文件“main.c”中定义的FLASH_WriteAddress和FLASH_ReadAddress表示程序开始写和读操作的地址。
0 d# F( s5 B* k+ B  Q+ [$ ^' V0 i  @5 e
设置系统时钟为72 MHz,SPI1波特率为18 Mbit/s。! O3 Q9 w/ M. j! r- ?2 L; |
/ e/ I* w5 L' j- a
在EKSTM32F上,由于没有安装SPI FLASH,本例无法在不添加相应硬件的情况下运行。
  y5 O+ Q8 p- ^! E9 E  |$ n0 E# A* w+ x% a6 I$ D5 z
SysTick Example 1
2 M% V) a0 k& F9 v, [* m& T/ g本例展示了如何设置Cortex-M3的系统定时器SysTick来产生以1毫秒为周期的事项。设置系统时钟为72MHz,SysTick的时钟由AHB时钟提供,为其值HCLK除以8(HCLK/8)。1 f- c$ }0 W/ Z0 K- F  @

; W3 n2 s$ Y( d/ K2 h利用SysTick计数器为零事项(SysTick end-of-count event)来实现函数“Delay”。间隔在此函数中定义的时间,改变输出管脚PC.06 – PC. 09的状态,使与他们相连的4个LED闪耀。
. F0 Q# r. k6 _8 |% e7 h) e$ t# r4 |
在EKSTM32F,上,改PC.06 – PC.09为PC.04 – PC.07。
9 }: \" `% ^& v5 I/ f
. W0 v2 d  j4 ^8 V# p出处:barboon, i! p8 U" _) k# c

6 E7 d3 t+ Y5 T* A, H相关下载:  

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)

请问一下:
7 O$ Z" |, K' J/ A- s# wSPI Example 1 在本例程中,设置SPI1和SPI2为8bit数据帧,9Mbit/s传输速率。
* V1 V7 B% A9 W( LSPI Example 4 在本例程中,设置SPI1和SPI2为8bit数据帧,18Mbit/s传输速率
# Y( v- ?+ Y1 S$ W( u8 d! g两个例子波特率不一样,但范例全是使用  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 手机版