STM8S系列学习笔记

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

加入收藏

联系站长

. 网站首页 . 新品 . 新闻 . 方案 . 技术文库 . TI设计应用 . TI专家解答 . TI资源中心 . 移动开发 . 嵌入式厂商 . 前沿科技 . 下载 . 商城 . 邮购须知 .

|技术文库首页|嵌入式系统| EDA工具与服务|可编程逻辑|通信技术|电源技术|模拟设计|测试测量|消费电子|汽车电子|医疗电子|工业电子|存储

|

STM8S系列学习笔记★★★【字体:小大】

STM8S系列学习笔记

作者:Free 文章来源:Free 点击数: 482 更新时间:

2011-4-4

tuv移值寄存器7 6 5 4 3 2 1 0

0x00 Px_ODR

复位值ODR7

ODR6

ODR5

ODR4

ODR3

ODR2

ODR1

ODR0

0x01 Px_IDR

复位值IDR7

IDR6

IDR5

IDR4

IDR3

IDR2

IDR1

IDR0

0x02 Px_DDR

复位值DDR7

DDR6

DDR5

DDR4

DDR3

DDR2

DDR1

DDR0

0x03 Px_CR1

复位值C17

C16

C15

C14

C13

C12

C11

C10

0x04 Px_CR2

复位值C27

C26

C25

C24

C23

C22

C21

C20

到其他引脚。

Px_IDR: IDR[7:0]:端口输入数据寄存器位

不论引脚是输入还是输出模式,都可以通过该寄存器读入引脚状态值。该寄存器为只读寄存器。 0:逻辑低电平 1:逻辑高电平

Px_DDR: DDR[7:0]:数据方向寄存器位 ,这些位可通过软件置1或置0,选择引脚输入或输出 0: 输入模式 1: 输出模式

Px_CR1: C1[7:0]控制寄存器位

这些位可通过软件置1或置0,用来在输入或输出模式下选择不同的功能。在输入模式时(DDR=0): 0:浮空输入 1::带上拉电阻输入

在输出模式时(DDR=1): 0:模拟开漏输出(不是真正的开漏输出)

1:推挽输出, 由CR2相应的位做输出摆率控制

Px_CR2: C2[7:0]控制寄存器位相应的位通过软件置1或置0,用来在输入或输出模式下选择不同的功能。在输入模式下,由CR2相应的位使能中断。如果该引脚无中断功能,则对该引脚无影响。在输出模式下,置位将提高IO速度。此功能适用O3和O4输出类型。(参见引脚描述表)

在输入模式时(DDR=0): 0: 禁止外部中断 1: 使能外部中断

在输出模式时(DDR=1): 0:输出速度最大为2MHZ. 1:输出速度最大为10MHZ

在stm8的库里面已经将这些外设都进行了封装定义,并提供这些外设的SPI,也就是我们所说的stm8的库函数。下面我们看看任何结构化的定义这些IO的寄存器的。

typedef struct GPIO_struct

{

vu8 ODR; /*!< Output Data Register */

vu8 IDR; /*!< Input Data Register */

vu8 DDR; /*!< Data Direction Register */

vu8 CR1; /*!< Configuration Register 1 */

vu8 CR2; /*!< Configuration Register 2 */

}GPIO_TypeDef;

所有的IO通用寄存器,定义成GPIO_TypeDef这种类型的结构体,结构体中的每个寄存器都是u8类型,这个可以查看stm8库函数类型声明,其实等价于volatie unsigned char这种类型。那么我们就有了GPIO_TypeDef这种类型。下面是各个端口的结构化定义:

#define GPIOA ((GPIO_TypeDef *) GPIOA_BaseAddress)

#define GPIOB ((GPIO_TypeDef *) GPIOB_BaseAddress)

#define GPIOC ((GPIO_TypeDef *) GPIOC_BaseAddress)

#define GPIOD ((GPIO_TypeDef *) GPIOD_BaseAddress)

#define GPIOE ((GPIO_TypeDef *) GPIOE_BaseAddress)

#define GPIOF ((GPIO_TypeDef *) GPIOF_BaseAddress)

下面是各个端口的起始地址:

#define GPIOA_BaseAddress 0x5000

#define GPIOB_BaseAddress 0x5005

#define GPIOC_BaseAddress 0x500A

#define GPIOD_BaseAddress 0x500F

#define GPIOE_BaseAddress 0x5014

#define GPIOF_BaseAddress 0x5019

#define GPIOG_BaseAddress 0x501E

#define GPIOH_BaseAddress 0x5023

#define GPIOI_BaseAddress 0x5028

上面的部分是硬件的抽象成软件的部分,有了这些我们就可以进行对寄存器操作了,比如上面的PA_DDR的操作,现在就可以写成GPIO->DDR=VALUE;

这样进行每个端口设置时,肯定要设置使用哪个引脚,速度是多少,哪种模式,这几个对每组端口都是一样的,st有对他进行了封装,如下:

typedef enum

{

GPIO_MODE_IN_FL_NO_IT = (u8)0b00000000, /*!< Input floating, no external interrupt */

GPIO_MODE_IN_PU_NO_IT = (u8)0b01000000, /*!< Input pull-up, no external interrupt */

相关文档
最新文档