! @8 b) j/ D5 ^2 s
测试STM8L050 SPI输出测试& e4 ]& f( |4 C" [
; @( w* [) ], t) q 一、端口配置:
" J. m; j# S4 E4 r4 E& U 5 ^2 A& G+ V5 @, F) R5 B5 U# e. |
使用STM8CubeMX来查看SPI需要的引脚% d. f+ I, X- z. C- O+ b
2 c* b& x+ u& q$ s% ^7 A5 j
& Z# O. D6 c9 ` 二、程序部分
8 c; [/ X( R F+ O. B . G9 U' B1 }" w- @. W+ ?2 b) O
2.1、SPI程序
& D/ i+ W$ i1 R0 k7 G. i- //spi.c
3 q9 n& H9 F) Q; u7 A( `; u c - #include "stm8l15x.h"$ y: \9 g0 L# s4 F6 T
$ U2 P- h2 ` q \; R- void SPI_FLASH_Init(void)
+ E1 e+ A( ~0 W; i7 L9 ? - {
, h1 }2 R+ X9 C- Y7 c( D+ W) b - GPIO_Init(GPIOB, GPIO_Pin_6, GPIO_Mode_Out_PP_High_Fast); //SPI_MOSI6 @6 l4 [+ m$ j; \
- GPIO_Init(GPIOB, GPIO_Pin_7, GPIO_Mode_In_PU_No_IT); //SPI_MISO/ r" k9 V G7 P% U8 k" h
- GPIO_Init(GPIOB, GPIO_Pin_5, GPIO_Mode_Out_PP_High_Fast); //SPI_SCK
$ Z: R" R9 v) \: b -
* |' }7 C5 w4 `. g6 t - CLK_PeripheralClockConfig(CLK_Peripheral_SPI1, ENABLE);# p. r+ P; C p, J/ L
-
5 f7 R0 N9 s, z: D. z - SPI_Init(SPI1, SPI_FirstBit_MSB, SPI_BaudRatePrescaler_4, SPI_Mode_Master,\
. A0 S7 k) c" p7 i - SPI_CPOL_High, SPI_CPHA_2Edge, \
3 p5 b( i3 r* F0 u' K - SPI_Direction_2Lines_FullDuplex, SPI_NSS_Soft, 0x07);
3 h! ?- m: O8 o$ Y: ]: l5 _& L -
( b! c/ J$ ~- g @3 f% A- K2 | - SPI_Cmd(SPI1, ENABLE); /* 使能SPI */) C5 z( q W- x3 Q7 A
-
% N9 k6 z5 j5 K) @5 b - /* 配置CS管脚 */
4 \/ c9 U+ k: t+ P( h" e - // GPIO_Init(SPI_CS , SPI_Pin_CS, GPIO_Mode_Out_PP_High_Fast);- `( F- l1 d& e h7 T! F
- // GPIO_WriteBit(SPI_CS, SPI_Pin_CS, SET); /* 拉高不使能外部SPI设备 */
4 I5 J+ G! _, ~. w( ^$ e - ' g9 A4 w$ a2 A
- }
! L6 s( V$ {) @6 ^" W5 }" \5 q5 z
1 @ d4 D. P# n0 y
# N+ @( l6 F5 I. U( g- uint8_t SPI_FLASH_SendByte(u8 byte)' H: U4 L0 p2 P' @
- {
# m* z' U6 O5 m. U - /* Loop while DR register in not emplty */
5 |, {. q' J+ v4 x% i( K' Y - while (SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE) == RESET);$ V5 g: T% }/ ^$ p! |) g7 C* ^
- /* Send byte through the SPI1 peripheral */
- q- n6 g" B3 b - SPI_SendData(SPI1, byte); N- c% @ J2 w t6 N
- /* Wait to receive a byte */) _. x! `* p8 z( x) N( X
- while (SPI_GetFlagStatus(SPI1, SPI_FLAG_RXNE) == RESET);2 C! L2 y& S- t9 k2 P! s8 ~
- /* Return the byte read from the SPI bus */* j9 I, u1 H+ L/ ?5 ?, G
- return SPI_ReceiveData(SPI1); 8 Q1 [/ z# D8 p0 s
- }
6 q0 o& B& k8 S- W1 V- A% n - //spi.h
: [2 F. f, Q7 x! I3 V o; O4 g T - #ifndef __SPI_H$ D# Q. @+ F0 O8 k F9 O7 @2 `5 S
- #define __SPI_H) B, A3 p% f$ B% I. L( h
- ) l! U0 I2 \( W) M4 ^7 T# D
- void SPI_FLASH_Init(void);% B1 {, R/ m* K: F( m4 L% T; m& p
- uint8_t SPI_FLASH_SendByte(u8 byte);
! X' R. O% X) V
& y7 Q: i6 }% i0 f) [; U! a- #endif
$ F- k. I/ ?% L
复制代码
6 D* E- A& I e$ F: D1 S |1 }% K 2.2、主程序. h6 F5 J" M* [- q8 b0 A
- void main(void)
_, h4 V. q9 x- k+ |7 f |8 H - {
' Y' i& p' n. L: e: T
& B! {2 i- k. z3 h0 @6 l/ R$ M- CLK_Config(); //时钟初始化2 f4 Q9 C# P# Y- i& [
-
. i) N; [5 U H F' ~5 s$ L5 | - Delay(0x2fffff); //延时5S # T3 T, z, e8 d$ V( j+ t& T
- 8 l8 [1 Q9 p9 A: X
- //led_init(); //led初始化( W, _7 b2 M$ V5 Q: Q$ Q+ n9 I0 o: e
- //swim_init();( f; H6 j( w) g8 u- C
- uart_init_halfduplex();1 T! o, V9 p9 F' @( R
-
. K3 \$ `8 S3 N% Q; b' I1 t - SPI_FLASH_Init();; o8 G. g' r* R' r2 i T
-
5 Y1 a7 j# ~; ]9 y$ b1 |: L - while (1)& d+ C+ A! H g# I A/ B
- {
: p& t5 G( [2 N0 A. }& H/ H# r -
- b% o' q1 c& X& R8 }7 F# ^5 s* K - SPI_FLASH_SendByte(0x55);2 J1 K: N. w- m, ~- h
- Delay(0xffff);
1 M" Y' `; o+ h2 g0 k6 p - }
, `! P+ [' Y0 D4 X3 B; t' O- M- r - }
复制代码 % ~9 J: n) J% ]+ g( r
三、执行结果
! J3 J1 g9 R" W' k9 c& @7 S% I y9 f) G! O5 p
2 p$ x) S* t% r
手头上没有SPI通信的器件,使用示波器测试下,SPI_SCK和SPI_MOSI波形:
3 u" U+ C9 b8 l3 X5 \: X+ S& }% P1 g 黄色:SPI_SCK6 [4 u) M# n1 N9 b
绿色:SPI_MOSI
7 ?$ N0 h. u7 G$ c( R$ e0 s5 ~# K SPI发送的数据是0x55
! o6 i. v* S- ~$ k3 W; z
8 l0 z& Q9 g5 }9 e3 I$ z' ?+ y( Y2 U
* M6 Z" u; x$ k7 ]5 Q* v1 G, R# j
; X$ K8 L) H: y
' B2 A5 U+ g) K4 u( C) k" `% U$ w. F% ~, m
* N p0 M! U9 P
3 F7 A1 q7 Z4 I ? h$ R, ]& K5 s, l; L' n; q4 n I
! ^- s% e9 F. X8 j
; A6 n- k' j! w. ^' |* \' s: C0 @% E t* q* @# f
. e! t; W( Y% i x! g- ?0 j8 g
2 W T# v+ l8 Y6 _4 g* r5 y. ?: L' R# j5 t
6 x3 [' g9 h# g8 u4 a; l) [, A, t& r# L: N; W
3 y7 b: w+ E! N0 w
" T p: F' i8 w" H1 X/ t' n, C
8 ]$ t/ h( j6 u' b, K 5 O9 T- z1 }6 l6 I$ X7 E
|
STM8CubeMX不能生成代码