9 t: \. D `+ N7 I* w . P/ S9 S8 p# _; L
通过开发板的上的SB4,SB5,SB6跳线来选择STM8L001芯片,STM8L050和STM8L001都属于STM8L系列芯片,所有工程文件就还是用之前的STM8L050创建的工程文件,通过GPIO驱动来验证工程的可运行性。
" b3 C* X$ y7 a( Y% ^' E; Z
" L2 U- }+ M4 S' v2 z# \8 R+ q3 W( D& E/ N* a' v
一、硬件部分& J3 n$ ]8 I9 j6 f5 }2 w
& z! e" {9 x; u7 C. }+ w
: F6 @2 P, h! T 使用PB5引脚来驱动LED。2 L' g2 W) U4 c6 n
( o) b* T: r# [ ! N R# k3 v( w; E0 [8 n
二、程序部分' U: G5 `$ P3 {- Y2 g
; n7 E( r0 d+ Z# K& I( W3 |. p
) F+ D$ P- r# X% v 2.1、在工程文件中,选择STM8L001芯片型号
8 v" S( N) V; ~1 z. v
* g) W. f, Q" t" e1 ~ P4 ~
; ]5 H0 g0 a5 Z" g 2.2、程序代码. G, r1 u. M0 q0 A V
- k+ Y) m$ x; _) h9 |
7 r6 @9 @3 \8 G% a. Y E
2.2.1、LED代码
- i8 ?- g: ]! r" Q2 R- //led/c/ Q/ c" \+ }& c. u# O
- #include "stm8l15x.h"
/ V; H) t2 d S0 z$ b - #include "led.h"
7 p) a4 W P# B% n6 C! q2 ` - : Z0 B v+ l7 X- k. U& q1 ~: \, V
- void led_init(void)
0 B. r6 H; _) C- u8 m' G- q5 K - { g% w2 v# X" S- V7 x
- GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS, GPIO_Mode_Out_PP_Low_Fast);
: u6 U% i5 O$ N( {. d4 D$ D$ ^. J - }
+ w; b2 q4 z6 a
6 |& v5 m$ G5 F- G% y$ @- ]$ z- //led.h
. u3 V) k7 G E" R) F - #ifndef __LED_H
3 C: M; M$ V- ^2 Q& a - #define __LED_H
' |8 ?- t( v4 h: N( V, J
8 t+ w" U! o% Q, `7 x( `- #define LED_GPIO_PORT (GPIOB)
2 Q1 G: J3 `) s! [5 h6 W5 p5 F - #define LED_GPIO_PINS (GPIO_Pin_5) 8 }4 J/ u; T. U/ R8 I x
- , d4 P5 U/ q: Q% U n6 u* V7 n
- #define led_tog() GPIO_ToggleBits(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS)* b. F& F4 ]; I, d! R# c
' ]" r: X( E$ ^3 N3 K- void led_init(void);& p, W9 i) P( y- a# w5 B- ]& P
3 |/ e$ M7 t4 W& M- #endif
复制代码 a8 @1 p, z. h* t5 k
2.2.2、主程序# e$ n4 x' {% j* B) y* X% q# R
- void main(void): | v0 X1 I# z* Y
- {
' }- n8 Z5 s1 g% X" w5 h - CLK_Config(); //时钟初始化* k4 P- y8 Y1 X9 J; |
-
3 P. v) m: \' {5 y: {, Z7 J - Delay(0x2fffff); //延时5S, Z0 L- O6 Y6 Q" c
- 4 |3 Z3 \ ~8 x1 k5 \
- led_init(); //led初始化
8 k0 t- ^& S4 U0 }( |6 G3 A -
p3 D% s! D7 z2 u - while (1)
/ c' L/ W% r3 [- ^! ^* h2 d - {! q# I6 i5 |5 X! Y6 _) {
- led_tog(); //LED取反
/ k" X* d' @9 m% U3 I! X- p - Delay(0xffff);) y' v0 Z' c/ z+ S, G" g$ ^" w
- }
8 G. L( Q6 s7 W4 \7 k; B - }
复制代码
) f- P1 m2 Z, x6 T9 e 三、执行结果
! D5 n# ^. E, b. _3 O3 m* o* \) ?: t" e) ?0 \# R
/ e* ?" y6 A+ }& t5 j/ X, v 3.1、在原来的工程文件仿真时,程序执行到
5 `5 a" F1 t4 f CLK_Config(); //时钟初始化
. W% r. E( ~% e* a! u$ }+ e- //时钟初始化: M' N$ z% H! @' q7 i6 v
- static void CLK_Config(void)
% _ f: M6 z# f8 K - { ! i8 ^) O$ y S* `4 Y8 y
- /* Select HSI as system clock source */ F. o9 Q- N4 \& g
- CLK_SYSCLKSourceSwitchCmd(ENABLE);" M1 w5 n/ h e
- CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);% V& h1 x+ [) z
- /* system clock prescaler: 1*/- P1 j% r0 l/ f5 c- w k9 O, p
- CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);, S) F5 F6 k3 M5 t& U
- //while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_HSI)2 O2 w+ L5 p- q- S3 h& D) r
- //{}
# ]: I5 B3 ]1 }0 Q - }
复制代码 ( T: m4 \0 N e
这个函数while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_HSI){} 位置跳转转不出来,把这个函数屏蔽掉以后,程序可以运行下去,后面再看看具体原因是什么。6 ?' h `) ?$ @4 T7 ~
$ j; I/ X8 d M 3.2、运行的视频
/ M9 Q0 f/ c( Z0 g1 d8 O* J
/ E& c' u9 c* ]7 {7 X4 L
V- v, A7 z' M6 K. z! P- U9 s: S+ M5 p! m( X8 x$ ]
, v6 F6 M, e' V( t" O
9 r/ o2 a4 Q& O4 P7 B2 @2 B stm8l001芯片运行正常。% k4 I( i4 Q* n% e& T' {6 L
1 l8 c" V' T! |0 m, R+ A% x
. g$ Q8 Q7 @0 A# G
) z$ L5 a ~* \! p
! r! L5 [2 ]/ ]$ k5 i
8 T- [0 z5 m+ l I, f" d
' a( m9 |! a7 a- n% v# a/ j
# }- p. c+ I$ }5 \' ]2 x: q
' r3 T* i( [4 A% O4 O& {) G }5 F: K- _2 L; _ x% k5 M2 k
|