STM8S系列学习笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 */