本帖最后由 slotg 于 2019-1-23 21:59 编辑 5 I3 B8 T& ?: d, j# P
k6 r E2 U; ?* P, Z1 |/ z
STM8-SO8-DISCO 尺寸比想像中的还要小,小小的一块板子很有意思,只是这块板子的安排方式不适合直接外接模块或是元器件,因此我将底下的 3 块 MCU 小板掰下来打算插在面包板上做实验,而 STM8-SO8-DISCO 就做为编程器使用。
0 b3 h2 S3 z2 _4 M0 Y1 Q1 W+ }; q; M2 W
' ?/ g7 }- P. V# w2 q% M手上有一个 R,G,B LED 小模块:
6 |# H9 @* M6 `5 y/ v1 O! z+ t- |' ~5 V# }& X2 s
! I* a2 W9 m9 v: T5 t
3 U8 H Q+ N7 i2 h我想用 STM8S001J3 来点灯,看了一下引脚排列 pin5,6,7 都是 GPIO 很适合连接这个 LED 模块,模块直接插在面包板上只需要再拉一根共地就可以了,程序中只要在该引脚输出高电位时 LED 就会亮,我想实现的就是一个简单的 LED 依序亮灭功能,拉好线也写好了程序,只是下载烧录后运行结果怎么只亮了一个 LED 呢?pin5 与 pin6 所连接的 LED 不会亮!一开始怀疑是拉线的问题?也怀疑是程序上的问题?只是一个简单的点灯程序怎么会不行呢?
$ d* G% P/ o9 q0 O" m
- G# m% d# I9 s. `! {$ l9 i. r: ASTM8S001J3 的 GPIO 引脚有复用功能:/ ~( I4 [# [! G% O/ e" @
. w* y- A3 c8 h% k' s3 Y: b
; ]9 ?3 w [7 C2 h2 d
" [$ s7 `4 W, s! `4 t" o5 F3 S' U以 pin7 来说,这根引脚兼具了 PC3、PC4、PC5 功能,也就是程序改变这 3 个 GPIO 任何一个的状态时都会反应到 pin7 上,我在程序中发现了 pin5 定义成 PA3 时是有输出的,不过定义成 PB5 时 LED 就不会亮?查看数据手册的引脚说明里有这样的描述:# x( c0 _6 k& Z3 N
3 F8 _! ]! x. ^- \+ m$ D
2 z" p" f2 j: _2 R! ^5 a& g7 @! v( r
PB4 与 PB5 有特别的说明:
" y' d- v$ i$ p' O/ o, f" i8 r" |, A9 a/ B2 w* {) P+ w- d$ f
; N" ^$ X& P8 J, p- ]2 e) |$ @; C5 l# S' D, ^, F! i
STM8 的 GPIO 架构图:) U2 u$ R e# V/ P0 Z" f0 P
) x9 Q/ [: b% _; m
. e7 o/ A$ J+ P' U, \, }
0 g" ~, k( j& D# y! a* A6 |5 {
这个意思是说明了当 PB4 与 PB5 做为输出时,P-BUFFER、PULL-UP 与保护二极管是不存在的,也就是 PB4 与 PB5 是一个单纯的 Open-Drain 架构,是不会有电位输出的!因此当 pin5 做为 PA3 时因为有 P-BUFFER 所以会有电位输出可以驱动 LED,但是做为 PB5 时就是一个单纯的 OD,以目前 LED 的接法当然是不会亮的。我改变 LED 接法,让 LED 的阳极接电源,阴级接控制引脚,程序输出低电位时点亮 LED,这样就实现了我想要的结果了。
# v+ c* C4 V9 a0 S& w* D( M. I0 l/ Y3 B K6 Q
/ ]) B3 I7 r4 ?
% i- o5 g0 V0 q* I6 n+ v8 `图上的模块原本 LED 的接法也是共地的,不过我将 LED 拆下反接改成了共接电源。: ]/ O) K" r2 T
& w' [# |% B# l% E
源代码:4 j6 H8 ^7 S- y3 _2 ^6 U( z
- /* Includes ------------------------------------------------------------------*/
. L' ~4 A7 S3 z1 o" P; k/ [. D! m - #include "stm8s.h"7 X$ O1 }, P3 o& B M2 j
- - R1 T4 B4 Y% M( O* i! g
- /* Private defines -----------------------------------------------------------*/
% p3 ~* \9 T! @" S' H4 ?9 v( O7 [ - : k0 S6 F5 Y+ S# Z2 G$ f
- #define LED1_GPIO_PORT (GPIOC)) k7 m! d: M$ W0 j! l1 U
- #define LED1_GPIO_PINS (GPIO_PIN_3) U% D5 e( j, z* A7 c: o2 x
- 7 g- r+ j H/ z3 v' C
- #define LED2_GPIO_PORT (GPIOB)
% m4 m* L1 B* K/ _- t - #define LED2_GPIO_PINS (GPIO_PIN_4)
O% S: ~# g8 r9 S! A - . r7 R/ s6 \3 c/ x' z/ Z+ f! `
- #define LED3_GPIO_PORT (GPIOB)
X9 j" F4 `6 d3 K( B$ C - #define LED3_GPIO_PINS (GPIO_PIN_5)
( D; M) J0 v; F P3 d- a1 _6 V' J
, m8 i* S/ U7 Z. G0 q' k g9 P3 W- /* Private function prototypes -----------------------------------------------*/
' M3 z; R+ V* q; t7 Y# m0 L - void Delay (uint16_t nCount);' |/ m% V' o( u' n2 T, C
. a8 \/ J$ ^" l; E- S- /* Private functions ---------------------------------------------------------*/5 O& H) J& i& Y
2 E$ O! j8 n2 f' \9 h# J0 D1 g, z* u- void main(void)
0 y! [ ]1 Z5 y, o; ~* L - {5 r( l( u! f( _- T) I! t9 Y6 Q2 \
- /* Infinite loop */8 y' \ _8 [. ^+ i* j
- GPIO_Init(LED1_GPIO_PORT, (GPIO_Pin_TypeDef)LED1_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
8 D$ G, x$ h3 ^ - GPIO_Init(LED2_GPIO_PORT, (GPIO_Pin_TypeDef)LED2_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
5 T- _0 I+ |' P2 Y; D - GPIO_Init(LED3_GPIO_PORT, (GPIO_Pin_TypeDef)LED3_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
+ Q; v) L9 d9 X. B/ q9 _' F - 9 R( s. d1 K+ _. D2 ]. m3 i+ k* w
- while (1)0 t$ E; m5 J+ \. r3 d' q: _/ ~) j
- {; i4 ]; y' [( c3 r; v8 D5 `+ y
- GPIO_WriteReverse(LED1_GPIO_PORT, (GPIO_Pin_TypeDef)LED1_GPIO_PINS);
6 G) G1 p3 n* ^! U6 i - Delay(0xFFFF);6 I( B$ Z @3 w% r* P; @- Y
* ~, _( a7 N' }7 N4 j2 \- GPIO_WriteReverse(LED2_GPIO_PORT, (GPIO_Pin_TypeDef)LED2_GPIO_PINS);/ {' i F. P* D% ~6 q! Y. m
- Delay(0xFFFF);
4 m, B- ^ e# ^ E S
- X& B5 b1 G+ @% [ u- GPIO_WriteReverse(LED3_GPIO_PORT, (GPIO_Pin_TypeDef)LED3_GPIO_PINS);/ j% y) b" s- f, L' z: }& o, J3 C" |
- Delay(0xFFFF);
2 f* U b% G5 g, I3 _. { - }6 I$ h0 x. J1 m3 v
- 2 Y' s K1 Q/ w8 f
- }
复制代码
1 |' |6 U5 F8 G' F2 ~0 J
B01.rar
(707.55 KB, 下载次数: 21)
|