) C+ L9 A/ Q9 k% h+ \. S5 y 测试STM8L050 SPI输出测试6 s# l: E/ J3 J" X
# c9 B- S9 w! w) R* K 一、端口配置:' s0 n* _: \% x9 S1 G
# J7 ]8 c/ G) C, L/ J- P7 E
使用STM8CubeMX来查看SPI需要的引脚3 |5 d0 V: @/ c& ~6 k
/ p9 V/ D: R6 X# s3 |8 T
/ a$ j/ [' o! @ 二、程序部分1 T& `) Y; i' r1 W
6 C8 |4 u; r7 ~& C: |% Z
2.1、SPI程序" k# K8 m$ ^& X: e8 }
- //spi.c# K9 `$ |7 ^# B2 h- m }) J6 e2 R
- #include "stm8l15x.h"6 \- N) `. [" I1 x: D
* T1 Q- M) f9 ]$ q% z7 v2 D- void SPI_FLASH_Init(void)
- T% G1 ]$ v S3 I - {
# I6 R6 g$ k7 G1 h, l8 T/ Q! a - GPIO_Init(GPIOB, GPIO_Pin_6, GPIO_Mode_Out_PP_High_Fast); //SPI_MOSI- w+ M4 x6 l- O# [& R0 n" P. l
- GPIO_Init(GPIOB, GPIO_Pin_7, GPIO_Mode_In_PU_No_IT); //SPI_MISO
& T. [2 q7 u7 p5 l2 j7 g E - GPIO_Init(GPIOB, GPIO_Pin_5, GPIO_Mode_Out_PP_High_Fast); //SPI_SCK* _" n! J0 a9 D. O( o7 Y
-
& b: s3 S% Q x3 I8 d - CLK_PeripheralClockConfig(CLK_Peripheral_SPI1, ENABLE);; R' |, R( J; U1 H9 [3 @. {
-
( J! Q) L* i: n6 ~5 r - SPI_Init(SPI1, SPI_FirstBit_MSB, SPI_BaudRatePrescaler_4, SPI_Mode_Master,\
% l+ @3 s( V% ^. x% h5 M - SPI_CPOL_High, SPI_CPHA_2Edge, \
; c3 A! J. g" L, O) Q7 J - SPI_Direction_2Lines_FullDuplex, SPI_NSS_Soft, 0x07);
& }- Z4 @2 @# ~6 s! p! _" m -
& U" D; m5 o) N- O3 j - SPI_Cmd(SPI1, ENABLE); /* 使能SPI */
2 p! w3 S& q- @% B- P -
2 ]$ E, ~# \) q# I/ Z - /* 配置CS管脚 */
3 L: k E/ J0 O, n/ ^( S - // GPIO_Init(SPI_CS , SPI_Pin_CS, GPIO_Mode_Out_PP_High_Fast);" |6 p% A, W2 W
- // GPIO_WriteBit(SPI_CS, SPI_Pin_CS, SET); /* 拉高不使能外部SPI设备 */
% a3 j$ n. K7 `& x - 2 P2 G2 w0 k! G, w' r
- }
: n( P7 o2 j4 G3 I$ k+ \& c - 5 S _3 Z2 y p/ }. U+ s a% b; j$ `9 X% D$ F
$ r8 X* |, B! D& T8 e" C' ^, ^- uint8_t SPI_FLASH_SendByte(u8 byte)
0 h9 M" { E7 z - {0 Y% ^+ Z( O: R" f7 E# p6 \6 @
- /* Loop while DR register in not emplty */) [6 f3 P8 {$ S
- while (SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE) == RESET);
' f; x/ K; {6 u' E - /* Send byte through the SPI1 peripheral */ N$ M* w6 z0 \2 l5 i+ K
- SPI_SendData(SPI1, byte);6 }5 a! O4 n- U, t3 O# l, g
- /* Wait to receive a byte */9 H% Y% d* m# ?( G6 t( t. o" A
- while (SPI_GetFlagStatus(SPI1, SPI_FLAG_RXNE) == RESET);3 o" L2 X \6 }% `( [1 H
- /* Return the byte read from the SPI bus */; O* X2 n# _- P7 h! l6 h! g
- return SPI_ReceiveData(SPI1);
. ]( @ m! D$ J6 ? - }0 y2 C, N# W. T# V! h
- //spi.h; R8 X; M. T! k# a: B8 G s3 w
- #ifndef __SPI_H
9 p8 X h7 D: Z. ~/ g - #define __SPI_H
* ?* i* Y& L) a9 P, l5 k - 4 a2 b9 t1 v2 y P5 w
- void SPI_FLASH_Init(void);
" |: T9 S# I! R% ?4 y6 L - uint8_t SPI_FLASH_SendByte(u8 byte); O; p- c6 e9 F* v* i9 P+ X
4 u* m5 W" s) n5 o- #endif
% {# N& J& g9 t
复制代码 / P9 i! Q, }6 v, S' M
2.2、主程序, T+ U& ]( X- x1 z! O: h
- void main(void)
o% v) C% k& l9 H5 `% F - {# K' `( d/ |! E5 }3 J1 Y4 I
- 2 q! E2 K3 l& o0 O, `0 o9 |
- CLK_Config(); //时钟初始化
, Q. C3 z6 y( ~( I1 y - ' K; g1 N: K# Y# ~7 m
- Delay(0x2fffff); //延时5S # D0 x$ }+ Q8 Q" K& R; G
-
6 m7 J( l7 R. q- `" t - //led_init(); //led初始化; A9 H8 W4 h5 |; D4 W5 D
- //swim_init();
- {' C: A2 a1 j - uart_init_halfduplex();
9 @1 s$ ?+ K$ j( `5 p' A- v7 V4 j; J -
6 v8 F$ Z1 d7 X# W/ X& D$ F - SPI_FLASH_Init();; C% B% i% y' @4 K; ^! e
- ! L+ u7 p! ]% Z8 |& m$ B
- while (1)/ O+ ^$ c! l9 y6 p2 S, t6 S
- {
2 P2 R, r* ~9 c- \ `- b - 2 f5 ~" {9 F8 X6 W6 Z
- SPI_FLASH_SendByte(0x55);
, ]$ l2 A3 b3 y% D# T N, G - Delay(0xffff);( U% h F q Z W) p
- }3 E/ z0 h2 J& R% c9 Q8 @' _
- }
复制代码 $ E) q" ^' O0 l9 n L, j9 ?
三、执行结果2 ?% v. W- u0 }+ y
0 {% A3 p: X8 B% C" y, z2 \" j% b( M$ t, D
手头上没有SPI通信的器件,使用示波器测试下,SPI_SCK和SPI_MOSI波形:- L( D3 O4 V5 x# x6 x
黄色:SPI_SCK
. q4 D- g- X9 H' @6 R- k: e 绿色:SPI_MOSI7 `) ^1 L! }% ?/ T! M2 P' J. `
SPI发送的数据是0x553 o* ], x6 s8 w( K- ]- j7 |
8 z! V7 N1 [0 N( Q. Z
8 D' W+ K3 N' X$ Y; r5 F) y) n D3 ~2 j. p4 U% M) z1 f I
& Z3 J/ ?9 D7 r0 m: X, Q* p; L- T, {7 A0 u$ J! ?
) O* ^ ]# O: v
) p: U" q# u& V9 G
& q/ d" @# q1 M3 B6 I* g. K8 O% r8 k: }+ L: e
, a( I+ n6 L! n0 M
+ s! R0 h/ d" l* C8 B9 R! n W
! g7 v1 u, l, |( X# C# {$ {8 {( g! _# R, I; Z2 h0 }
* _* ]6 b3 e0 d9 u. N$ b8 L$ n$ Y
2 g Q7 H5 Z; a8 p% h
- F9 _* `0 s5 @% C3 e9 C* N. s2 x
4 b8 r/ f6 Q" v9 A; u0 l9 U i' r/ I* s x. X- G4 n5 n+ H
# p$ s# }- T0 s4 J4 E' \0 v5 e |
STM8CubeMX不能生成代码