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

【STM8-SO8】01-点灯

[复制链接]
slotg 发布时间:2019-1-23 21:44
本帖最后由 slotg 于 2019-1-23 21:59 编辑 1 F- c5 c$ J" J2 t

$ u. [- j/ r& `+ K8 NSTM8-SO8-DISCO 尺寸比想像中的还要小,小小的一块板子很有意思,只是这块板子的安排方式不适合直接外接模块或是元器件,因此我将底下的 3 块 MCU 小板掰下来打算插在面包板上做实验,而 STM8-SO8-DISCO 就做为编程器使用。
( R/ Y, P. ^1 ?+ H, v" J3 t& L. B7 x* Z& a4 m
手上有一个 R,G,B LED 小模块:
$ D, M; ?0 Q5 L( q2 d6 H1 F, Z# j) J+ @
DSC02518s.jpg
8 P! V% a4 `1 a, h& I! e: T# H3 T; S' s* ]/ t/ L' R0 G/ t9 p
我想用 STM8S001J3 来点灯,看了一下引脚排列 pin5,6,7 都是 GPIO 很适合连接这个 LED 模块,模块直接插在面包板上只需要再拉一根共地就可以了,程序中只要在该引脚输出高电位时 LED 就会亮,我想实现的就是一个简单的 LED 依序亮灭功能,拉好线也写好了程序,只是下载烧录后运行结果怎么只亮了一个 LED 呢?pin5 与 pin6 所连接的 LED 不会亮!一开始怀疑是拉线的问题?也怀疑是程序上的问题?只是一个简单的点灯程序怎么会不行呢?
$ E# g7 X! F* I8 w5 ~" k2 O4 n% m! e9 K0 c+ x( {8 }  d1 O( k
STM8S001J3 的 GPIO 引脚有复用功能:
2 J$ i5 E" H( }( I5 w
3 a  Z6 }! R( x1 x8 m$ [! o& \+ }/ R P04.JPG ) ~+ n" {! [+ |# r* X: R
- f  A! m* y8 F" a5 V
以 pin7 来说,这根引脚兼具了 PC3、PC4、PC5 功能,也就是程序改变这 3 个 GPIO 任何一个的状态时都会反应到 pin7 上,我在程序中发现了 pin5 定义成 PA3 时是有输出的,不过定义成 PB5 时 LED 就不会亮?查看数据手册的引脚说明里有这样的描述:
9 h7 S5 Y0 j* `, d- H% f5 r0 ^# P0 _. a+ ?
P01.JPG / n2 A3 D/ k- w! G: ^4 ?

* F9 {1 @: p3 a! N1 DPB4 与 PB5 有特别的说明:2 `9 Q7 e- E0 c# l4 h- n* Z3 R
% \+ n$ V: i! f
P03.JPG * T0 y  D% z) i+ k8 I! O4 c! z
/ C6 q( e7 q9 y5 J) g0 m7 c
STM8 的 GPIO 架构图:2 A9 e; m3 \3 [. h; q6 \$ n  V' I
- W- `$ g; F+ }# D* k
P02.JPG % {+ C/ K" W: f

! }; N% q/ P0 J, _# H$ k这个意思是说明了当 PB4 与 PB5 做为输出时,P-BUFFER、PULL-UP 与保护二极管是不存在的,也就是 PB4 与 PB5 是一个单纯的 Open-Drain 架构,是不会有电位输出的!因此当 pin5 做为 PA3 时因为有 P-BUFFER 所以会有电位输出可以驱动 LED,但是做为 PB5 时就是一个单纯的 OD,以目前 LED 的接法当然是不会亮的。我改变 LED 接法,让 LED 的阳极接电源,阴级接控制引脚,程序输出低电位时点亮 LED,这样就实现了我想要的结果了。8 X- J4 {; o1 ]
; R9 N5 }# H5 A* Z% n
DSC02521s.jpg
* ]8 C. ^. C/ a% f" U" z1 ^7 a5 g8 l
图上的模块原本 LED 的接法也是共地的,不过我将 LED 拆下反接改成了共接电源。
0 Q7 z  L8 u4 Z: O- H* V/ Z
8 Y- Q( R1 x  v. A2 S源代码:. z% l3 D: }8 [8 N
  1. /* Includes ------------------------------------------------------------------*/
    9 C) B: H, l8 Z, t5 i/ N3 N8 f
  2. #include "stm8s.h"& N7 E* j6 I) o  ?5 a$ J+ F

  3. 8 V0 I3 }7 `) [; p, ?
  4. /* Private defines -----------------------------------------------------------*/) `4 i* F1 U7 ?
  5. 2 L5 E% r( F, N4 Z
  6. #define LED1_GPIO_PORT  (GPIOC)
    : w7 ]' b+ N/ ^" I
  7. #define LED1_GPIO_PINS  (GPIO_PIN_3)) K' t% I5 m6 b0 x' Y  L, G, M

  8. 6 K; N, N3 Y) b0 c& Z1 m
  9. #define LED2_GPIO_PORT  (GPIOB)2 k% N/ O8 ]7 j6 g7 `" V
  10. #define LED2_GPIO_PINS  (GPIO_PIN_4): w! a/ Z- f, v$ F6 G4 H& g2 W# m
  11. & t+ v. S5 R* f9 ^
  12. #define LED3_GPIO_PORT  (GPIOB)
    2 m& J$ ]" Y4 {6 `5 w6 [3 s
  13. #define LED3_GPIO_PINS  (GPIO_PIN_5)$ ^% Z1 M0 H5 h0 k- c
  14. 4 P  d) c8 F6 W" d
  15. /* Private function prototypes -----------------------------------------------*/
    + T- z+ u1 `: G+ U. N
  16. void Delay (uint16_t nCount);
    ' ?6 S- N5 ]. @+ o3 T
  17. ) n( N( T! g, w; d' W! s0 m
  18. /* Private functions ---------------------------------------------------------*/% \. ^+ D8 I3 B- @3 h0 t

  19. & b) l7 N2 r! t) {" ]* O
  20. void main(void)7 G# ~, Q5 z, q1 F
  21. {
    " z- M; ^1 d. m$ _& G: W1 G2 `
  22.   /* Infinite loop */
    # H% g' ?& T: Z$ t
  23.   GPIO_Init(LED1_GPIO_PORT, (GPIO_Pin_TypeDef)LED1_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);) ~- S. L- r; z" D# R
  24.   GPIO_Init(LED2_GPIO_PORT, (GPIO_Pin_TypeDef)LED2_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
    ( ]. g3 I1 y* u; Y4 b) ]
  25.   GPIO_Init(LED3_GPIO_PORT, (GPIO_Pin_TypeDef)LED3_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
    3 D" |0 p+ \3 H8 `
  26.   6 L# F. p. y( y1 Q# R0 u
  27.   while (1)7 v. n8 a/ u% [! Q
  28.   {
    * _! E0 I0 T7 s1 N# P% ]5 I( A
  29.     GPIO_WriteReverse(LED1_GPIO_PORT, (GPIO_Pin_TypeDef)LED1_GPIO_PINS);6 k( M* v5 k! I) A, Z% ^, f6 n
  30.     Delay(0xFFFF);0 Z1 x; E; \) _
  31. ' R/ `9 p' i9 ~$ v
  32.     GPIO_WriteReverse(LED2_GPIO_PORT, (GPIO_Pin_TypeDef)LED2_GPIO_PINS);
    : C$ f1 h. S" E& l
  33.     Delay(0xFFFF);- o5 P/ ?( j8 A0 C+ O' i
  34. 5 z" K; X( u3 X% E; x+ k) C
  35.     GPIO_WriteReverse(LED3_GPIO_PORT, (GPIO_Pin_TypeDef)LED3_GPIO_PINS);
    - y7 O  }5 E4 ~2 t: j$ {5 `7 F
  36.     Delay(0xFFFF);: h5 k- r: E# ]# a4 H4 |
  37.   }
    $ G7 C1 E& p. S% E# K# j0 }
  38.   
    , J% c% n. O6 U5 f3 c7 L2 K6 m
  39. }
复制代码
7 v, [( z3 m. m- i  g2 y' I, [
B01.rar (707.55 KB, 下载次数: 25)
收藏 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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版