STM8S_库函数_GPIO控制LED闪烁

大家好,我是单片机爱好者-MCU起航。这里说下使用库函数方式控制STM8S103F3P6的GPIO。

首先看原理图,这里使用我设计的地心一号的开发板做演示:

可以看到,单片机的PB4管脚外接了一个绿色的LED。虽然限流电阻很大,有10K,但因为LED是高亮的,所以亮度依然可以满足我们的需求。

程序如何写?很简单,如下:

#include "stm8s.h"
#include "stm8s_gpio.h"

/* Private defines -----------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
#define LED_GPIO_PORT  (GPIOB)
#define LED_GPIO_PINS  (GPIO_PIN_4)
void Delay(uint16_t nCount)
{
  /* Decrement nCount value */
  while (nCount != 0)
  {   
    nCount--;
  }
}
void main(void)
{
  /* Initialize I/Os in Output Mode */
  GPIO_Init(GPIOB, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);

  while (1)
  {
    /* Toggles LEDs */
    GPIO_WriteReverse(GPIOB, GPIO_PIN_4);
    Delay(0xffff);
  }
  
}

首先看宏定义,那里定义了要初始化的GPIO的组和编号,组为GPIOB,编号为GPIO_PIN_4。

然后看main函数里的内容。初始化部分相比寄存器操作非常简单,只有一句话:

GPIO_Init(GPIOB, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);

STM8S的GPIO,在使用库函数方式进行初始化的时候,有多种状态可选,如下:

  GPIO_MODE_IN_FL_NO_IT      = (uint8_t)0x00,  /*!< Input floating, no external interrupt */
  GPIO_MODE_IN_PU_NO_IT      = (uint8_t)0x40,  /*!< Input pull-up, no external interrupt */
  GPIO_MODE_IN_FL_IT         = (uint8_t)0x20,  /*!< Input floating, external interrupt */
  GPIO_MODE_IN_PU_IT         = (uint8_t)0x60,  /*!< Input pull-up, external interrupt */
  GPIO_MODE_OUT_OD_LOW_FAST  = (uint8_t)0xA0,  /*!< Output open-drain, low level, 10MHz */
  GPIO_MODE_OUT_PP_LOW_FAST  = (uint8_t)0xE0,  /*!< Output push-pull, low level, 10MHz */
  GPIO_MODE_OUT_OD_LOW_SLOW  = (uint8_t)0x80,  /*!< Output open-drain, low level, 2MHz */
  GPIO_MODE_OUT_PP_LOW_SLOW  = (uint8_t)0xC0,  /*!< Output push-pull, low level, 2MHz */
  GPIO_MODE_OUT_OD_HIZ_FAST  = (uint8_t)0xB0,  /*!< Output open-drain, high-impedance level,10MHz */
  GPIO_MODE_OUT_PP_HIGH_FAST = (uint8_t)0xF0,  /*!< Output push-pull, high level, 10MHz */
  GPIO_MODE_OUT_OD_HIZ_SLOW  = (uint8_t)0x90,  /*!< Output open-drain, high-impedance level, 2MHz */
  GPIO_MODE_OUT_PP_HIGH_SLOW = (uint8_t)0xD0   /*!< Output push-pull, high level, 2MHz */

初始化GPIOB的GPIO_PIN_4,初始化为推挽输出、快速、引脚初始化完成后输出低电平。

最后,通过翻转函数和延时函数,实现LED的闪烁。

要深入理解STM8S的库函数操作,需要有51单片机的基础,同时对C语言理解较好。想要获取该程序完整的工程文件,可以关注公众号:单片机爱好者,然后回复关键词:STM8S。可以获取完整的下载链接,里面包含工程文件、视频、PPT、数据手册等所有相关资料。

《STM8S_库函数_GPIO控制LED闪烁》有2条评论

  1. 一直没搞明白stm8的gpio宏操作是怎么计算实际gpio口的对应关系的

    PB_ODR &=~0x01
    PB_ODR |= 0x01

    PB_ODR &=~0x02
    PB_ODR |= 0x02

    PB_ODR &=~0x03
    PB_ODR |= 0x03

    这都是对应哪几个gpio口呢? 是怎么计算规则的?

    回复

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据