请选择 进入手机版 | 继续访问电脑版

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

【STM8-SO8】01-点灯

[复制链接]
slotg 发布时间:2019-1-23 21:44
本帖最后由 slotg 于 2019-1-23 21:59 编辑
' \1 ?9 A4 f( Z" z" b' M+ E; L
6 j  b6 R8 z- P" YSTM8-SO8-DISCO 尺寸比想像中的还要小,小小的一块板子很有意思,只是这块板子的安排方式不适合直接外接模块或是元器件,因此我将底下的 3 块 MCU 小板掰下来打算插在面包板上做实验,而 STM8-SO8-DISCO 就做为编程器使用。( S. h  }/ `% q/ V5 L$ u

- _$ `' X/ q# c手上有一个 R,G,B LED 小模块:+ u* T, J: ?9 Y  {! H% w, a

- E. k5 t' e' ] DSC02518s.jpg ) {/ H! h8 R1 U; D

- H" ?0 p& l0 d) T9 m1 x! {" R我想用 STM8S001J3 来点灯,看了一下引脚排列 pin5,6,7 都是 GPIO 很适合连接这个 LED 模块,模块直接插在面包板上只需要再拉一根共地就可以了,程序中只要在该引脚输出高电位时 LED 就会亮,我想实现的就是一个简单的 LED 依序亮灭功能,拉好线也写好了程序,只是下载烧录后运行结果怎么只亮了一个 LED 呢?pin5 与 pin6 所连接的 LED 不会亮!一开始怀疑是拉线的问题?也怀疑是程序上的问题?只是一个简单的点灯程序怎么会不行呢?
9 U+ m8 c" j- r
/ m) D3 O  B# gSTM8S001J3 的 GPIO 引脚有复用功能:8 S7 l! b2 u, f6 H% f! c

- q5 i! J' P  T7 V4 l. e P04.JPG
7 {" m  P. }% V8 D9 j) n* X0 f1 q1 m7 u6 K3 S' i& o+ l) G; e) ?
以 pin7 来说,这根引脚兼具了 PC3、PC4、PC5 功能,也就是程序改变这 3 个 GPIO 任何一个的状态时都会反应到 pin7 上,我在程序中发现了 pin5 定义成 PA3 时是有输出的,不过定义成 PB5 时 LED 就不会亮?查看数据手册的引脚说明里有这样的描述:
/ I. f* h' G* {" L
" u1 p% b6 t8 G% t7 Q P01.JPG
, {7 K6 T! c) Z* t' b+ f7 U. n8 ^# w2 a& Z( m$ ~8 A6 Z6 a) @7 y* p" ~  E
PB4 与 PB5 有特别的说明:
) n) L0 }5 V' R( h4 ?7 ]0 P5 d) }! K! @% w/ e. e
P03.JPG
' i# R+ e3 y- m" b
2 B( ^, m8 z( M' Y1 ?' cSTM8 的 GPIO 架构图:% X4 f0 [# u, K

/ R1 D" r9 c% F  F8 x) E2 m/ E P02.JPG . c, d5 z- M, B" p3 k9 ]1 C% ^( _' c
3 j7 f6 D3 j' [# e( S. j/ M
这个意思是说明了当 PB4 与 PB5 做为输出时,P-BUFFER、PULL-UP 与保护二极管是不存在的,也就是 PB4 与 PB5 是一个单纯的 Open-Drain 架构,是不会有电位输出的!因此当 pin5 做为 PA3 时因为有 P-BUFFER 所以会有电位输出可以驱动 LED,但是做为 PB5 时就是一个单纯的 OD,以目前 LED 的接法当然是不会亮的。我改变 LED 接法,让 LED 的阳极接电源,阴级接控制引脚,程序输出低电位时点亮 LED,这样就实现了我想要的结果了。4 q% X  j- K+ ?5 L
# C: _& R. d% d+ {
DSC02521s.jpg 3 L. _" l0 e! {1 _" ?" ?
$ R8 v8 v  }; o  I  T5 w& E* I
图上的模块原本 LED 的接法也是共地的,不过我将 LED 拆下反接改成了共接电源。
6 J( L3 g4 e- r' s' v4 p5 F3 ]+ I/ P5 r2 L, D) p; S
源代码:
' Y0 V4 n) w1 ?! t: q; @
  1. /* Includes ------------------------------------------------------------------*/+ P+ {3 M# ~# C4 B  P
  2. #include "stm8s.h"6 [3 |/ p- Z2 l; x
  3. $ q8 u& g' F6 V4 l2 n  D
  4. /* Private defines -----------------------------------------------------------*/
    % S' N9 M. ]1 j1 B7 A1 n

  5. 1 _) S8 ^6 }$ W' E
  6. #define LED1_GPIO_PORT  (GPIOC)
    ; j. b0 K8 C( R6 g
  7. #define LED1_GPIO_PINS  (GPIO_PIN_3)
    6 u- R/ P/ A: K6 P

  8. + A1 q. b* |# g" z
  9. #define LED2_GPIO_PORT  (GPIOB)
    * R( i. y4 g( W, x; A
  10. #define LED2_GPIO_PINS  (GPIO_PIN_4)
    3 i6 L! e1 X  P2 J5 ^
  11. # k  x! ]  G- D* n( w
  12. #define LED3_GPIO_PORT  (GPIOB)
    5 M" q9 T" }9 Q! T+ M' Y& A
  13. #define LED3_GPIO_PINS  (GPIO_PIN_5)
    8 f5 L. z0 `3 T

  14. % E# e/ g  G$ N5 ]- A, D- R; \
  15. /* Private function prototypes -----------------------------------------------*/+ v8 Z0 O0 ?3 O/ T
  16. void Delay (uint16_t nCount);# i2 |2 ?* p7 E5 f

  17. 7 z* X$ J2 e2 n. w
  18. /* Private functions ---------------------------------------------------------*/
    4 u- Q! v. L% M( p0 B, A. y
  19. ' U; |6 W7 G8 c5 b7 p
  20. void main(void)
    % R, ~. X" |" H" D
  21. {
    8 n9 L- P  d- }# w
  22.   /* Infinite loop */. o- T) A; f  ^. w
  23.   GPIO_Init(LED1_GPIO_PORT, (GPIO_Pin_TypeDef)LED1_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);& j$ e  ~6 F( J4 L8 [
  24.   GPIO_Init(LED2_GPIO_PORT, (GPIO_Pin_TypeDef)LED2_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
    + ]% n3 T: E% Q
  25.   GPIO_Init(LED3_GPIO_PORT, (GPIO_Pin_TypeDef)LED3_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
    5 Q9 V, e, r, W/ \7 {/ Q" c
  26.   ) L* Q' z9 s/ l0 G4 R
  27.   while (1)
    0 R$ R+ r8 A7 A* g8 N9 L0 X9 F
  28.   {  |, d0 D5 T$ H; Q# h7 ?: Q& j8 Z
  29.     GPIO_WriteReverse(LED1_GPIO_PORT, (GPIO_Pin_TypeDef)LED1_GPIO_PINS);
    8 Q7 d% y1 _. O5 F
  30.     Delay(0xFFFF);5 f+ C7 J9 s( S: r0 D1 o) b

  31. ; v; v9 B* L( b+ W; J2 b
  32.     GPIO_WriteReverse(LED2_GPIO_PORT, (GPIO_Pin_TypeDef)LED2_GPIO_PINS);6 N3 d$ P$ W0 U* k; E0 x+ Z8 [
  33.     Delay(0xFFFF);5 Q7 H# B5 P/ h) B; V

  34. ) a* k+ S* h3 `5 M! a* x
  35.     GPIO_WriteReverse(LED3_GPIO_PORT, (GPIO_Pin_TypeDef)LED3_GPIO_PINS);
    4 E, Z. J  c7 z) d
  36.     Delay(0xFFFF);
    & z! k) _" J5 W9 L/ E! i
  37.   }
    & ~" |5 R( U5 g( k# T1 {' B
  38.   
      p5 P$ ]5 j$ ?4 |
  39. }
复制代码

- R' s8 d* v3 J  q) x% Q 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 手机版