shunyuyang 发表于 2015-3-1 21:13:11

【STM8】第一讲-GPIO寄存器及操作

        开始教程的第一讲。想操作好一个单片机,首先要非常明确单片机的每一个引脚的作用以及如何正确的使用它。那么我们首先要请出STM8S系列的数据手册(RM0016),一般这个手册都是英文的,当然你也可以找到中文的。
        在STM8中,General Purpose Input Output (通用输入/输出)简称为GPIO,用于与外界设备连接和通信,下面我们就来看一下STM8各个引脚对应的分别是哪个GPIO接口。
        我们需要打开的是STM8针对不同型号写的介绍手册(与编程手册RM0016不同),这个手册更加详细的介绍了不同型号单片机具体的参数,但是没有详细的寄存器配置方法的介绍。我们要找到名为Pinout and pin description这一项,它针对不同封装的每一个引脚都有十分详细的介绍,这里就不再赘述,各位可以在ST官网上下载。
        还需要说明的一点是,因为单片机内部的功能丰富,但是考虑到方方面面的原因,很多功能的通信引脚都和普通的GPIO引脚复用,当要使用这些特殊功能的时候一定注意它对应的GPIO就不要使用了。

        这就是关于某引脚的输出寄存器,该寄存器允许位操作,当某一位写1时,该位对应的GPIO引脚电平为高,反之为低。默认值为0。

        同理,当我们要读取某一引脚的电平值时,就需要用到这个寄存器,该寄存器只能读取。
        那么是不是我们只需要控制这两个寄存器就可以让对应的GPIO口工作呢?当然不是,下面介绍的几个寄存器用于确定GPIO的工作方式。



        在操作输入输出寄存器前,应先正确的配置如上三个寄存器,这样才能正确的使用GPIO,这里需要注意的是,GPIO所有的寄存器都允许位操作,也就是允许单独操控任意一个引脚。
在IAR中的写法举例应如下:PD5_DDR_DDR5 =1;
        好了,以上就是关于STM8S系列单片机关于GPIO寄存器以及操作方法的简单介绍,希望对大家能有所帮助,下面是关于操作GPIO控制LED的简单的小程序:
#include <iostm8s103f2.h>                        //这是stm8s103的头文件,根据自己的单片机选择
#define led PB_ODR_ODR5                        //这里我们应该把LED连接在PD5接口上
#define DDR1 PB_DDR_DDR5
/***************延时子程序start****************/
void delayms(unsigned int count)
{
unsigned int i,j;
for(i=0;i<count;i++)
for(j=0;j<120;j++);
}
/*************延时子程序end*****************/

/***********主程序******************/
main()
{
DDR1 = 1;
PB_CR1 = 1;
PB_CR2 = 0;
while(1)
{
    led = 1;
    delayms(500);             // 延时
    led = 0;
    delayms(500);
}                              
}

shunyuyang 发表于 2015-3-1 21:13:54

又是篇纯手打的小教程,各位路过的麻烦给加个分鼓励一下哈,谢谢:lol

lxa000 发表于 2015-3-1 22:05:45

没看明白~~~~~~~~~~~

zzbinfo 发表于 2015-3-2 15:18:26

:lol路过支持一下

ChrisLove 发表于 2015-3-2 15:41:31

本帖最后由 ChrisLove 于 2015-3-2 15:48 编辑

提个小建议,用LED做端口操作还是不够全面,应该写一段端口三态配置程序。比如配置端口为H/L/Hi-Z,再写一句读端口的,比如读IDR,这样就涵盖了本篇的所有内容。程序其实也不复杂

我想学STM8来着。。没坚持下去。。现在依然在用AVR


顺便附上一段AVR单片机在手册里边的范例代码,这一段程序,精简且严谨。
三部分,
PORT 端口数据寄存器定义,
DDR 端口方向寄存器定义
最后还有个pin ,读取端口B并赋值给i


不过我见过的单片机教材里,用LED表示是千篇一律的。。。

huarana 发表于 2015-3-2 15:49:40

iar还是 stvd ?

最好是stvd的

shunyuyang 发表于 2015-3-2 17:34:31

huarana 发表于 2015-3-2 15:49 static/image/common/back.gif
iar还是 stvd ?

最好是stvd的

我用的是IAR,感觉IAR 在调试和程序编译上更方便

shunyuyang 发表于 2015-3-2 17:37:50

ChrisLove 发表于 2015-3-2 15:41 static/image/common/back.gif
提个小建议,用LED做端口操作还是不够全面,应该写一段端口三态配置程序。比如配置端口为H/L/Hi-Z,再写一句 ...

您说的有道理,但是对于一个单片机的初学者来说用LED会更加直观,而且也很容易搭建电路:lol

ChrisLove 发表于 2015-3-2 18:17:18

shunyuyang 发表于 2015-3-2 17:37 static/image/common/back.gif
您说的有道理,但是对于一个单片机的初学者来说用LED会更加直观,而且也很容易搭建电路

毕竟RISC的单片机和CISC的不一样,对于51如果用LED表示那倒是很合适的。我想大概所有人刚接触RISC的时候都被端口方向寄存器弄得很头疼。所以加一段范例程序也不是不可

shunyuyang 发表于 2015-3-2 20:42:02

ChrisLove 发表于 2015-3-2 18:17 static/image/common/back.gif
毕竟RISC的单片机和CISC的不一样,对于51如果用LED表示那倒是很合适的。我想大概所有人刚接触RISC的时候都 ...

恩,您说的有道理。像模拟I2C时就需要不断地调整方向寄存器,的确挺让人头大的。

huarana 发表于 2015-3-3 09:06:10

shunyuyang 发表于 2015-3-2 17:34 static/image/common/back.gif
我用的是IAR,感觉IAR 在调试和程序编译上更方便

IAR的教程很多了,风驰的做的就很好。

但是stvd的教程却很少 - -!

另外仿真烧写用stvd很方便的,毕竟是自家出的,还是免费的不用破解。

wey05 发表于 2015-5-13 12:19:44

接下去啊!

liuyuexun 发表于 2015-5-13 13:23:57

单片机编程好像有点难啊,学习一下,好羡慕啊,希望也成为高手啊。

wey05 发表于 2015-5-14 16:27:09

比51和AVR麻烦多了。优点在哪儿呢?

yangcheng84 发表于 2015-9-7 20:36:06

wey05 发表于 2015-5-14 16:27 static/image/common/back.gif
比51和AVR麻烦多了。优点在哪儿呢?

优点是性价比很高很高.:lol

适合做控制而不适合作为“标准计算机”:lol
页: [1] 2
查看完整版本: 【STM8】第一讲-GPIO寄存器及操作