STM8 GPIO入门讲解笔记

  • 格式:pdf
  • 大小:566.54 KB
  • 文档页数:45

下载文档原格式

  / 45
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STM8l最白菜的入门笔记(2)——gpio篇

v\:* {behavior:url(#default#VML);}

o\:* {behavior:url(#default#VML);}

w\:* {behavior:url(#default#VML);}

.shape {behavior:url(#default#VML);}

我们先来观察一下

例程里是怎么操作 gpio的。

我们打开discover这个例程。

我们看到main刚开始的几句就是gpio初始化。

(因为我曾折腾过STM32,所以多少熟一点,一看到这个,我就知道,事情就在这,所以不会再看太多。)

我们截取其中几句看看。

* USER button init: GPIO set in input

interrupt active mode */

GPIO_Init( BUTTON_GPIO_PORT, USER_GPIO_PIN, GPIO_Mode_In_FL_IT);

/* Green led init: GPIO set in output */

GPIO_Init( LED_GREEN_PORT, LED_GREEN_PIN, GPIO_Mode_Out_PP_High_Fast);

/* Blue led init: GPIO set in output */

GPIO_Init( LED_BLUE_PORT, LED_BLUE_PIN, GPIO_Mode_Out_PP_High_Fast);

/* Counter enable: GPIO set in output for

enable the counter */

GPIO_Init( CTN_GPIO_PORT, CTN_CNTEN_GPIO_PIN, GPIO_Mode_Out_OD_HiZ_Slow);

/* Wake up counter: for detect end of

counter GPIO set in input interupt active mode */

GPIO_Init( WAKEUP_GPIO_PORT, ICC_WAKEUP_GPIO_PIN,

GPIO_Mode_In_FL_IT);

注释已经写得很明白了。

玩过430或者stm32的童鞋应该多少都知道,这些比较新款的单片机,跟以前的51不太一样,那就是外部中断源贼多,而且是跟着gpio走的。

坦白说,现在回想起来,其实51的外部中断也是跟着io口走的,想起来了吗?

INT0和INT1就是P3.0和P3.1,只不过它少一点而已。

但鉴于我们现在是要入门,所以,我们先不管中断——说起来,玩这个还真费了我不少劲,不过说起来已经不错了,哈哈,那时候STM32还不会定时中断呢(当然,现在也没弄定时,但既然外部中断都会了,想来也差不多吧~~~)

所以,我们的目标先设得简单一点:

我们只要实现基本的gpio读写功能,读用来读按键,写用来点亮LED。

右键就可以点开

相关函数的定义位置(这里说一下,所谓定义,对函数来说,就是函数实现,与函数声明区分,在讨论程序时,我提到

实现,大多是指的都是这个意义上的

实现,而不再是一般说的那个实现的意思。)

void GPIO_Init(GPIO_TypeDef* GPIOx,

uint8_t GPIO_Pin,

GPIO_Mode_TypeDef GPIO_Mode)

没事,我们不会去看源码。

我们只要看函数接口。

一个是gpio的port口,一个是gpio的pin数,一个是gpio的配置模式。

对单片机比较熟悉的朋友基本不用多说,这里还是简单说一下,在单片机里,io口都是按组划分。

比如说,最常见的8位机一组8个,然后可能有4到6组。

当然也有16位机的16个一组,让我有点奇怪的是STM32是32位ARM,一组却也只有16个。

更有甚者,比如我玩的一个32位系统,居然只有8个一组,看来这个跟位数没必然关系。

说了这么多,我们来看看我们这个stm8l-discover开发套件上的gpio口情况。

用不着看pdf,从开发板引出的管脚就知道。

它总共有41个io口,

共分6组,五组8个,最后一组1个,它以A~F按顺序命名。

分别是GPIOA~GPIOF.这就是我们的port

然后每组分8位,这就是我们的pin。好了,现在我们搞清楚数目上的状况了。

我们再看第三个参数,IO口类型。

我们可以通过查看gpio.h这个头文件获取相关的信息。

看的时候不妨多看一些我们曾见到的熟面孔,这样会加快熟悉对与其相关的宏和操作函数的了解程度。

比如说,首先我们看到的就是io口类型

typedef enum

{

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 */