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

【STM8-SO8】01-点灯

[复制链接]
slotg 发布时间:2019-1-23 21:44
本帖最后由 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
DSC02518s.jpg
! 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 P04.JPG ; ]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 P01.JPG
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
P03.JPG
; 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 P02.JPG . 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
DSC02521s.jpg
/ ]) 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
  1. /* Includes ------------------------------------------------------------------*/
    . L' ~4 A7 S3 z1 o" P; k/ [. D! m
  2. #include "stm8s.h"7 X$ O1 }, P3 o& B  M2 j
  3. - R1 T4 B4 Y% M( O* i! g
  4. /* Private defines -----------------------------------------------------------*/
    % p3 ~* \9 T! @" S' H4 ?9 v( O7 [
  5. : k0 S6 F5 Y+ S# Z2 G$ f
  6. #define LED1_GPIO_PORT  (GPIOC)) k7 m! d: M$ W0 j! l1 U
  7. #define LED1_GPIO_PINS  (GPIO_PIN_3)  U% D5 e( j, z* A7 c: o2 x
  8. 7 g- r+ j  H/ z3 v' C
  9. #define LED2_GPIO_PORT  (GPIOB)
    % m4 m* L1 B* K/ _- t
  10. #define LED2_GPIO_PINS  (GPIO_PIN_4)
      O% S: ~# g8 r9 S! A
  11. . r7 R/ s6 \3 c/ x' z/ Z+ f! `
  12. #define LED3_GPIO_PORT  (GPIOB)
      X9 j" F4 `6 d3 K( B$ C
  13. #define LED3_GPIO_PINS  (GPIO_PIN_5)
    ( D; M) J0 v; F  P3 d- a1 _6 V' J

  14. , m8 i* S/ U7 Z. G0 q' k  g9 P3 W
  15. /* Private function prototypes -----------------------------------------------*/
    ' M3 z; R+ V* q; t7 Y# m0 L
  16. void Delay (uint16_t nCount);' |/ m% V' o( u' n2 T, C

  17. . a8 \/ J$ ^" l; E- S
  18. /* Private functions ---------------------------------------------------------*/5 O& H) J& i& Y

  19. 2 E$ O! j8 n2 f' \9 h# J0 D1 g, z* u
  20. void main(void)
    0 y! [  ]1 Z5 y, o; ~* L
  21. {5 r( l( u! f( _- T) I! t9 Y6 Q2 \
  22.   /* Infinite loop */8 y' \  _8 [. ^+ i* j
  23.   GPIO_Init(LED1_GPIO_PORT, (GPIO_Pin_TypeDef)LED1_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
    8 D$ G, x$ h3 ^
  24.   GPIO_Init(LED2_GPIO_PORT, (GPIO_Pin_TypeDef)LED2_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
    5 T- _0 I+ |' P2 Y; D
  25.   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
  26.   9 R( s. d1 K+ _. D2 ]. m3 i+ k* w
  27.   while (1)0 t$ E; m5 J+ \. r3 d' q: _/ ~) j
  28.   {; i4 ]; y' [( c3 r; v8 D5 `+ y
  29.     GPIO_WriteReverse(LED1_GPIO_PORT, (GPIO_Pin_TypeDef)LED1_GPIO_PINS);
    6 G) G1 p3 n* ^! U6 i
  30.     Delay(0xFFFF);6 I( B$ Z  @3 w% r* P; @- Y

  31. * ~, _( a7 N' }7 N4 j2 \
  32.     GPIO_WriteReverse(LED2_GPIO_PORT, (GPIO_Pin_TypeDef)LED2_GPIO_PINS);/ {' i  F. P* D% ~6 q! Y. m
  33.     Delay(0xFFFF);
    4 m, B- ^  e# ^  E  S

  34. - X& B5 b1 G+ @% [  u
  35.     GPIO_WriteReverse(LED3_GPIO_PORT, (GPIO_Pin_TypeDef)LED3_GPIO_PINS);/ j% y) b" s- f, L' z: }& o, J3 C" |
  36.     Delay(0xFFFF);
    2 f* U  b% G5 g, I3 _. {
  37.   }6 I$ h0 x. J1 m3 v
  38.   2 Y' s  K1 Q/ w8 f
  39. }
复制代码

1 |' |6 U5 F8 G' F2 ~0 J 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 手机版