你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM8-SO8】01-点灯

[复制链接]
slotg 发布时间:2019-1-23 21:44
本帖最后由 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
DSC02518s.jpg 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- \* \
P04.JPG
& 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
P01.JPG
* 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 P03.JPG
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 P02.JPG , 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
DSC02521s.jpg . 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
  1. /* Includes ------------------------------------------------------------------*/
    - n9 y  w6 Y* r4 u
  2. #include "stm8s.h"
    ( r1 x( J, A! e# w' C0 w) S
  3. ; B5 k( s0 A$ a; ^/ m/ v% _' n
  4. /* Private defines -----------------------------------------------------------*/
    . R2 r) {( M$ n# Z) t
  5. - e, I( a6 ~% n! r* R1 `
  6. #define LED1_GPIO_PORT  (GPIOC)
    # U& y2 M- P: x' u5 J
  7. #define LED1_GPIO_PINS  (GPIO_PIN_3). g1 h! G. a; K- v" N8 t. T5 K7 T
  8. " r# z* m: f( b% M' @
  9. #define LED2_GPIO_PORT  (GPIOB)
    8 B' [; s+ m5 V' R
  10. #define LED2_GPIO_PINS  (GPIO_PIN_4)3 n+ G7 h5 `2 o0 D9 n2 p

  11. 7 I2 c( `, B+ \5 K. h
  12. #define LED3_GPIO_PORT  (GPIOB)2 K1 l0 K* O8 J% k, T4 a; J
  13. #define LED3_GPIO_PINS  (GPIO_PIN_5)( U( Z  R  k, ?: P& V! b8 h

  14. 8 I9 l- `2 Z7 E# B
  15. /* Private function prototypes -----------------------------------------------*/7 e/ M& G; I  Y! j9 e# T  o! ]  {. n
  16. void Delay (uint16_t nCount);
    ' s6 ^; f4 D7 n7 V
  17. 0 h8 l9 f- r0 |! A7 L. H
  18. /* Private functions ---------------------------------------------------------*/+ Q" ^' a. w( p
  19. 6 g- k% D+ j+ v' a
  20. void main(void)
    / a9 S. V& J# ]9 o/ _
  21. {5 F. e2 o# ^8 ~
  22.   /* Infinite loop */
    / f' y, f2 I5 x! m- N0 x
  23.   GPIO_Init(LED1_GPIO_PORT, (GPIO_Pin_TypeDef)LED1_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
    7 q# E: J; v5 q6 E
  24.   GPIO_Init(LED2_GPIO_PORT, (GPIO_Pin_TypeDef)LED2_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);, H. N% N( m. [6 v2 _
  25.   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
  26.   " l3 W3 O6 V3 w* v
  27.   while (1); v* y8 W8 E& ^0 `/ v# [! w/ e
  28.   {% m* _) ~/ ^$ w4 `3 M* W% P) Y
  29.     GPIO_WriteReverse(LED1_GPIO_PORT, (GPIO_Pin_TypeDef)LED1_GPIO_PINS);; X/ \4 h* c; y' P3 L7 R+ b- X% T
  30.     Delay(0xFFFF);* n, v3 O* m2 [0 a6 L) n7 V- u
  31. 1 w5 j8 {1 X, L" Y- N* I
  32.     GPIO_WriteReverse(LED2_GPIO_PORT, (GPIO_Pin_TypeDef)LED2_GPIO_PINS);
    % J2 m; F) h* T/ _1 m3 [
  33.     Delay(0xFFFF);  o+ J" n1 F6 s$ n- L6 ~; a+ A

  34. * ]3 J1 x2 p7 v
  35.     GPIO_WriteReverse(LED3_GPIO_PORT, (GPIO_Pin_TypeDef)LED3_GPIO_PINS);
    : L, N+ a$ {$ Q5 {; R
  36.     Delay(0xFFFF);' U5 q! s5 q3 P2 O; G8 M3 d- o
  37.   }: ], T) e" l' f: i  \
  38.   
    6 B1 \8 B5 s1 I7 g6 K
  39. }
复制代码
7 A8 R; [  A; `) D* L& L% S. y
B01.rar (707.55 KB, 下载次数: 21)
收藏 1 评论3 发布时间:2019-1-23 21:44

举报

3个回答
STMCU-管管 回答时间:2019-1-24 09:47:42
谢谢分享
Kevin_G 回答时间:2019-1-24 10:03:25
赞一个
xujiantj 回答时间:2019-2-1 10:13:56
学习了
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版