本帖最后由 slotg 于 2019-1-23 21:59 编辑
" Y$ f- _4 n5 r1 s: r. N* X3 U, L# y7 b
STM8-SO8-DISCO 尺寸比想像中的还要小,小小的一块板子很有意思,只是这块板子的安排方式不适合直接外接模块或是元器件,因此我将底下的 3 块 MCU 小板掰下来打算插在面包板上做实验,而 STM8-SO8-DISCO 就做为编程器使用。
" t4 ]$ b/ J- V0 H; t0 L9 _' t4 T _- [ r" g9 R8 J w+ {9 ?9 O$ l+ T
手上有一个 R,G,B LED 小模块:5 B3 u2 N/ H6 U2 g: X) Y
% Z k8 W# U3 l* G" h
8 l' s) o/ `% { x% ?" X1 D4 A
u9 }$ B# }5 o- w! b
我想用 STM8S001J3 来点灯,看了一下引脚排列 pin5,6,7 都是 GPIO 很适合连接这个 LED 模块,模块直接插在面包板上只需要再拉一根共地就可以了,程序中只要在该引脚输出高电位时 LED 就会亮,我想实现的就是一个简单的 LED 依序亮灭功能,拉好线也写好了程序,只是下载烧录后运行结果怎么只亮了一个 LED 呢?pin5 与 pin6 所连接的 LED 不会亮!一开始怀疑是拉线的问题?也怀疑是程序上的问题?只是一个简单的点灯程序怎么会不行呢?, B8 m- k. o; b1 H
. _& I) m% O; c4 \* Q& LSTM8S001J3 的 GPIO 引脚有复用功能:! D7 P D ?, ^8 w2 X' o% [3 i
) v( B) j+ Q: `/ G- \* \
& i2 Q+ i- G* T( G/ {: O) n, b' W4 E' K! s& p: a8 Q
以 pin7 来说,这根引脚兼具了 PC3、PC4、PC5 功能,也就是程序改变这 3 个 GPIO 任何一个的状态时都会反应到 pin7 上,我在程序中发现了 pin5 定义成 PA3 时是有输出的,不过定义成 PB5 时 LED 就不会亮?查看数据手册的引脚说明里有这样的描述:8 ~8 l( }# P+ l
- `9 U# S! t: U9 E
* F; i. u+ f6 M8 f# a$ W5 v
% i4 T5 f) f' M1 H& @PB4 与 PB5 有特别的说明:
+ ~6 Z3 K. o5 P7 K' h- M
2 Y5 L% [" U# k% A: T6 P& m
3 A. |% V, m2 \% w/ A% ^5 I
3 r; U! V: \; z; qSTM8 的 GPIO 架构图:* W- R; a4 |7 s5 ^. Y* P H; d3 M
D% U, }0 K% Q! w( U
, T& K, a- J: F9 K
+ i3 ?/ ~$ t3 I6 s* R, r1 ?4 m这个意思是说明了当 PB4 与 PB5 做为输出时,P-BUFFER、PULL-UP 与保护二极管是不存在的,也就是 PB4 与 PB5 是一个单纯的 Open-Drain 架构,是不会有电位输出的!因此当 pin5 做为 PA3 时因为有 P-BUFFER 所以会有电位输出可以驱动 LED,但是做为 PB5 时就是一个单纯的 OD,以目前 LED 的接法当然是不会亮的。我改变 LED 接法,让 LED 的阳极接电源,阴级接控制引脚,程序输出低电位时点亮 LED,这样就实现了我想要的结果了。4 [4 o! \) H! ?) A
4 ?: Q: o- _4 p7 }7 H. f* I/ g
. d, z, o1 _# j
8 R0 R% m* \ E& M
图上的模块原本 LED 的接法也是共地的,不过我将 LED 拆下反接改成了共接电源。/ }- v3 V. \( N1 w7 X
9 J4 U- ^) ^6 Z; O# ?
源代码:$ E0 O9 B3 ~' F6 P# S5 U7 L
- /* Includes ------------------------------------------------------------------*/
- n9 y w6 Y* r4 u - #include "stm8s.h"
( r1 x( J, A! e# w' C0 w) S - ; B5 k( s0 A$ a; ^/ m/ v% _' n
- /* Private defines -----------------------------------------------------------*/
. R2 r) {( M$ n# Z) t - - e, I( a6 ~% n! r* R1 `
- #define LED1_GPIO_PORT (GPIOC)
# U& y2 M- P: x' u5 J - #define LED1_GPIO_PINS (GPIO_PIN_3). g1 h! G. a; K- v" N8 t. T5 K7 T
- " r# z* m: f( b% M' @
- #define LED2_GPIO_PORT (GPIOB)
8 B' [; s+ m5 V' R - #define LED2_GPIO_PINS (GPIO_PIN_4)3 n+ G7 h5 `2 o0 D9 n2 p
7 I2 c( `, B+ \5 K. h- #define LED3_GPIO_PORT (GPIOB)2 K1 l0 K* O8 J% k, T4 a; J
- #define LED3_GPIO_PINS (GPIO_PIN_5)( U( Z R k, ?: P& V! b8 h
8 I9 l- `2 Z7 E# B- /* Private function prototypes -----------------------------------------------*/7 e/ M& G; I Y! j9 e# T o! ] {. n
- void Delay (uint16_t nCount);
' s6 ^; f4 D7 n7 V - 0 h8 l9 f- r0 |! A7 L. H
- /* Private functions ---------------------------------------------------------*/+ Q" ^' a. w( p
- 6 g- k% D+ j+ v' a
- void main(void)
/ a9 S. V& J# ]9 o/ _ - {5 F. e2 o# ^8 ~
- /* Infinite loop */
/ f' y, f2 I5 x! m- N0 x - GPIO_Init(LED1_GPIO_PORT, (GPIO_Pin_TypeDef)LED1_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
7 q# E: J; v5 q6 E - GPIO_Init(LED2_GPIO_PORT, (GPIO_Pin_TypeDef)LED2_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);, H. N% N( m. [6 v2 _
- GPIO_Init(LED3_GPIO_PORT, (GPIO_Pin_TypeDef)LED3_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
0 }5 E- |+ F0 D1 f8 u! z6 K - " l3 W3 O6 V3 w* v
- while (1); v* y8 W8 E& ^0 `/ v# [! w/ e
- {% m* _) ~/ ^$ w4 `3 M* W% P) Y
- GPIO_WriteReverse(LED1_GPIO_PORT, (GPIO_Pin_TypeDef)LED1_GPIO_PINS);; X/ \4 h* c; y' P3 L7 R+ b- X% T
- Delay(0xFFFF);* n, v3 O* m2 [0 a6 L) n7 V- u
- 1 w5 j8 {1 X, L" Y- N* I
- GPIO_WriteReverse(LED2_GPIO_PORT, (GPIO_Pin_TypeDef)LED2_GPIO_PINS);
% J2 m; F) h* T/ _1 m3 [ - Delay(0xFFFF); o+ J" n1 F6 s$ n- L6 ~; a+ A
* ]3 J1 x2 p7 v- GPIO_WriteReverse(LED3_GPIO_PORT, (GPIO_Pin_TypeDef)LED3_GPIO_PINS);
: L, N+ a$ {$ Q5 {; R - Delay(0xFFFF);' U5 q! s5 q3 P2 O; G8 M3 d- o
- }: ], T) e" l' f: i \
-
6 B1 \8 B5 s1 I7 g6 K - }
复制代码 7 A8 R; [ A; `) D* L& L% S. y
B01.rar
(707.55 KB, 下载次数: 21)
|