打印
[STM8]

实验分享-【STM8-SO8】01-点灯

[复制链接]
302|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
STM8-SO8-DISCO 尺寸比想像中的还要小,小小的一块板子很有意思,只是这块板子的安排方式不适合直接外接模块或是元器件,因此我将底下的 3 块 MCU 小板掰下来打算插在面包板上做实验,而 STM8-SO8-DISCO 就做为编程器使用。

手上有一个 R,G,B LED 小模块:



我想用 STM8S001J3 来点灯,看了一下引脚排列 pin5,6,7 都是 GPIO 很适合连接这个 LED 模块,模块直接插在面包板上只需要再拉一根共地就可以了,程序中只要在该引脚输出高电位时 LED 就会亮,我想实现的就是一个简单的 LED 依序亮灭功能,拉好线也写好了程序,只是下载烧录后运行结果怎么只亮了一个 LED 呢?pin5 与 pin6 所连接的 LED 不会亮!一开始怀疑是拉线的问题?也怀疑是程序上的问题?只是一个简单的点灯程序怎么会不行呢?

STM8S001J3 的 GPIO 引脚有复用功能:



以 pin7 来说,这根引脚兼具了 PC3、PC4、PC5 功能,也就是程序改变这 3 个 GPIO 任何一个的状态时都会反应到 pin7 上,我在程序中发现了 pin5 定义成 PA3 时是有输出的,不过定义成 PB5 时 LED 就不会亮?查看数据手册的引脚说明里有这样的描述:



PB4 与 PB5 有特别的说明:



STM8 的 GPIO 架构图:



这个意思是说明了当 PB4 与 PB5 做为输出时,P-BUFFER、PULL-UP 与保护二极管是不存在的,也就是 PB4 与 PB5 是一个单纯的 Open-Drain 架构,是不会有电位输出的!因此当 pin5 做为 PA3 时因为有 P-BUFFER 所以会有电位输出可以驱动 LED,但是做为 PB5 时就是一个单纯的 OD,以目前 LED 的接法当然是不会亮的。我改变 LED 接法,让 LED 的阳极接电源,阴级接控制引脚,程序输出低电位时点亮 LED,这样就实现了我想要的结果了。



图上的模块原本 LED 的接法也是共地的,不过我将 LED 拆下反接改成了共接电源。

源代码:
  • /* Includes ------------------------------------------------------------------*/
  • #include "stm8s.h"
  • /* Private defines -----------------------------------------------------------*/
  • #define LED1_GPIO_PORT  (GPIOC)
  • #define LED1_GPIO_PINS  (GPIO_PIN_3)
  • #define LED2_GPIO_PORT  (GPIOB)
  • #define LED2_GPIO_PINS  (GPIO_PIN_4)
  • #define LED3_GPIO_PORT  (GPIOB)
  • #define LED3_GPIO_PINS  (GPIO_PIN_5)
  • /* Private function prototypes -----------------------------------------------*/
  • void Delay (uint16_t nCount);
  • /* Private functions ---------------------------------------------------------*/
  • void main(void)
  • {
  •   /* Infinite loop */
  •   GPIO_Init(LED1_GPIO_PORT, (GPIO_Pin_TypeDef)LED1_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
  •   GPIO_Init(LED2_GPIO_PORT, (GPIO_Pin_TypeDef)LED2_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
  •   GPIO_Init(LED3_GPIO_PORT, (GPIO_Pin_TypeDef)LED3_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
  •   while (1)
  •   {
  •     GPIO_WriteReverse(LED1_GPIO_PORT, (GPIO_Pin_TypeDef)LED1_GPIO_PINS);
  •     Delay(0xFFFF);
  •     GPIO_WriteReverse(LED2_GPIO_PORT, (GPIO_Pin_TypeDef)LED2_GPIO_PINS);
  •     Delay(0xFFFF);
  •     GPIO_WriteReverse(LED3_GPIO_PORT, (GPIO_Pin_TypeDef)LED3_GPIO_PINS);
  •     Delay(0xFFFF);
  •   }
  • }

[color=rgb(51, 102, 153) !important]复制代码


本文转载于【STM8-SO8】01-点灯http://www.stmcu.org.cn/module/forum/thread-619267-1-1.html


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:每天都要开心呀

210

主题

505

帖子

4

粉丝