3 [7 e* _: ?1 P9 W. {. Z 测试STM8L050 SPI输出测试
# Z1 S$ s+ C0 K! _1 r! u& V7 T4 ] 5 ?+ {+ I* c- a0 s
一、端口配置:
d- E# f- g; z* l % F' y% `) s, h! m, s' H
使用STM8CubeMX来查看SPI需要的引脚
7 c$ r. X6 |7 T. c
" Q- _# c( M8 b7 ?. z" U# ^
, s% h8 A Q; r7 D; p; y( O/ {
二、程序部分; y- E- y2 C6 R4 @4 m$ D# O* x9 E
0 C9 N5 u% z1 L. l 2.1、SPI程序
9 g& m/ V( I5 t1 i- //spi.c9 z# Z0 T0 K3 O; A7 R( [
- #include "stm8l15x.h"$ G; f9 `2 B0 {- Y, p4 c
- ! p/ Z7 L: ]7 f Q( M- D% u7 L5 W
- void SPI_FLASH_Init(void)
/ `0 v5 O. S2 ]8 X$ B - { 9 n" W; c5 Q9 D! S
- GPIO_Init(GPIOB, GPIO_Pin_6, GPIO_Mode_Out_PP_High_Fast); //SPI_MOSI* b& s* D: h o4 M: V
- GPIO_Init(GPIOB, GPIO_Pin_7, GPIO_Mode_In_PU_No_IT); //SPI_MISO* J3 M$ i: g) ?; N6 @
- GPIO_Init(GPIOB, GPIO_Pin_5, GPIO_Mode_Out_PP_High_Fast); //SPI_SCK2 p! M1 Z( E! q' f5 Z
- - `7 P1 u5 g( b% L. j% {6 e
- CLK_PeripheralClockConfig(CLK_Peripheral_SPI1, ENABLE);
! K: d. q" P% b( r* S -
/ h( E+ w6 w& K' n - SPI_Init(SPI1, SPI_FirstBit_MSB, SPI_BaudRatePrescaler_4, SPI_Mode_Master,\
; t" B+ }' ]. f( W5 R' ] - SPI_CPOL_High, SPI_CPHA_2Edge, \8 U$ x: | I: A0 U7 ]5 i- K
- SPI_Direction_2Lines_FullDuplex, SPI_NSS_Soft, 0x07);
. ~. d: Z0 v) s# S- ~2 G - ) J7 q9 @; _5 r# c$ f
- SPI_Cmd(SPI1, ENABLE); /* 使能SPI */ n6 R2 g" P. A& R, [9 B ?5 @
- ! x4 s: P- C( @7 a5 E
- /* 配置CS管脚 */3 a* S( |2 Y. B/ Q, B- _% f' T3 q
- // GPIO_Init(SPI_CS , SPI_Pin_CS, GPIO_Mode_Out_PP_High_Fast);
s8 D. u, h! |9 @- z" ~/ x0 g - // GPIO_WriteBit(SPI_CS, SPI_Pin_CS, SET); /* 拉高不使能外部SPI设备 */
' w+ H: W$ f; U1 ^7 s* [
6 l% a- t& s$ Z. _. ?- }; D; Y6 ]8 d2 D
! Y- f& s; J6 Z; I! Q+ o) u+ s7 t
# m; a2 K. X- q3 F5 K* \1 v- r- uint8_t SPI_FLASH_SendByte(u8 byte)$ F3 s) i3 |3 ?: H& [
- {4 X! V& b9 v8 D$ M8 F0 W
- /* Loop while DR register in not emplty */
% B- b- D$ m) I9 G6 i E) c4 H0 h1 U- L - while (SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE) == RESET);
: w! I2 E/ J* Q; t - /* Send byte through the SPI1 peripheral */3 }1 V* Z* f% R' ?( x& F6 w
- SPI_SendData(SPI1, byte);$ V8 A5 j, K1 m/ Z" u% f1 m7 s
- /* Wait to receive a byte */
& N/ i' S* n1 z8 r; a5 |/ e - while (SPI_GetFlagStatus(SPI1, SPI_FLAG_RXNE) == RESET);
( J# D0 s2 M* {6 R4 C$ @* m - /* Return the byte read from the SPI bus */: k+ f* S( n W" g: r
- return SPI_ReceiveData(SPI1); - c( i* r8 I4 e% d
- }# ?# E& I( a2 @, ^5 X% c9 p
- //spi.h+ \: {" M- ? T8 g
- #ifndef __SPI_H. T" u* e3 K2 j5 O1 J* {. }( i0 P) l4 V
- #define __SPI_H
) v& y- u& N3 T+ c3 m$ _
V$ n& T' {, p3 U! ~4 j$ k# X- T2 R- void SPI_FLASH_Init(void);! _: u! h7 Z2 d3 c. f; s1 G
- uint8_t SPI_FLASH_SendByte(u8 byte);
7 o1 A/ b3 G3 r. f! r
; E' O9 n& V4 {! H- #endif & L! t A: F$ \: L, ]) x
复制代码 . q8 N( r+ A& L& a' d
2.2、主程序
! |, \* Y' P) D# @8 V- void main(void)
& x; U$ y0 R9 d - {
& j5 N* X; V6 _7 ~ i' n6 s- w& v' J - 1 E% l1 ]5 O1 A& j
- CLK_Config(); //时钟初始化
, l1 K6 C; `! O) p -
~7 g. S" k- l( \* {' s9 @& c6 O - Delay(0x2fffff); //延时5S 7 Q! f2 m$ a; E3 b: ]: b
- / G {/ r$ `+ d5 r. h( }& q# u
- //led_init(); //led初始化0 N9 |$ @; V0 U B0 t' u8 \; n6 I
- //swim_init();$ {5 I( w1 R* `
- uart_init_halfduplex();
: E" `1 z. o4 ]8 o6 i - 5 K3 S; G1 L* t9 c
- SPI_FLASH_Init();
; R0 i" [: N6 R# p: D# P - ; A* \. R# f2 X
- while (1)
0 E: n7 F9 H i# l' p - {
! A2 k, y' w* i2 z -
! G. @. f4 j; g - SPI_FLASH_SendByte(0x55);! Z# ]) F2 r% ]5 J
- Delay(0xffff);
* ~3 E) L; z7 r5 q - }+ h9 @, \7 i+ P; b+ G) w [
- }
复制代码 9 P7 [9 [/ F; m" z0 B! _9 m
三、执行结果6 o: B& p: L6 P- ?+ I
1 f. j4 L$ [( E9 H3 r: n' r
& ]) ~* Z+ y9 i2 @: d9 H
手头上没有SPI通信的器件,使用示波器测试下,SPI_SCK和SPI_MOSI波形:/ Z. W4 A0 G& ?$ S8 _6 s7 R
黄色:SPI_SCK( D/ c# z& a" K5 `* ? t
绿色:SPI_MOSI
2 D- _& g1 c# D. `0 \4 _: F& P SPI发送的数据是0x554 {2 H% n& r) s. ~8 B
* D. [+ K5 W- h: U1 ?
. K7 x# @, Y5 S2 l. E- s# z5 C
. V3 A6 F& g. h" ~- |
; l6 q: X5 e8 R0 u; e: s3 c/ w1 p$ X# K! g5 ]
' i( ?! |$ L6 @4 @ I: N, ?8 A* c6 J
" L9 n' y1 E ^7 C( l# L; p9 V/ S# Z7 i, B# K- ?' D
, K8 n6 o) \( [' s
# B& S& W! m0 s, A8 s, g
4 O0 j+ `! f. Y" o. f
& ~: t9 f V$ V/ X" h
& m8 I: C* O8 O1 {+ C ~8 y( T6 e7 p
" }+ a: [2 c9 b; n" C$ E! e' o2 P/ I4 c7 ^6 c! l, n
* ~5 t, R. U, n: U5 a! k; M" J2 K) Z4 w( Q0 _% }
; f, g- s) K$ a; q6 u% ?" |
% Z8 h: w0 S% g3 n |
STM8CubeMX不能生成代码