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
|