STM8 IAR中实现类似 位带操作【兼容库函数】

来源:互联网 发布:js实现的字幕滚动 编辑:程序博客网 时间:2024/06/02 02:32

STM8 IAR中实现类似 位带操作【兼容库函数】

用了STM8有一段时间了,发现STM8用IAR自带的"iostm8xxx.h" 和ST的标准库不能共存,于是结合IAR的库以及仿照 正点原子STM32 例程里面的"sys.h",写个"stm8_sys.h",方便自己,也方便其他人。谢谢支持!

代码如下:

/************************************************************************  * 文件 :stm8_sys.h  * 作者 :QinYUN575  * 版本 :V1.0  * 时间 :2017年11月5日 17:11:10  * 描述 :STM8实现位带操作  * 注意&示例:  * 将PA.0置高: PAout(0) = HIGHT_LEVEL 或者 PAout(0) = 1;  * 读取PA.0引脚电平: bit = PAin(0);  ***********************************************************************/#ifndef __SYS_H_#define __SYS_H_#include "stm8s.h"#define HIGHT_LEVEL 1;  /*定义高电平*/#define LOW_LEVEL   0;  /*定义低电平*/#define __READ_WRITE        /*可读写*/#define __READ     const    /*只读*//*--------------------------------------------- * 将NAME定义成有按位访问I/O口寄存器权限的联合体类型 * 访问8位的寄存器: NAME * 访问位: NAME_bit.noXX *--------------------------------------------*/#define __IO_REG8_BIT(NAME, ADDRESS, ATTRIBUTE, BIT_STRUCT)         \                        __near __no_init volatile ATTRIBUTE union   \                            {                                       \                                unsigned char NAME;                 \                                BIT_STRUCT NAME ## _bit;            \                            } @ADDRESS;/*------------------------------------------------------------------------- *      端口寄存器定义 *-----------------------------------------------------------------------*//* 端口数据输出寄存器 */typedef struct{  unsigned char ODR0        : 1;  unsigned char ODR1        : 1;  unsigned char ODR2        : 1;  unsigned char ODR3        : 1;  unsigned char ODR4        : 1;  unsigned char ODR5        : 1;  unsigned char ODR6        : 1;  unsigned char ODR7        : 1;} __BITS_ODR;/* 输入引脚寄存器 */typedef struct{  unsigned char IDR0        : 1;  unsigned char IDR1        : 1;  unsigned char IDR2        : 1;  unsigned char IDR3        : 1;  unsigned char IDR4        : 1;  unsigned char IDR5        : 1;  unsigned char IDR6        : 1;  unsigned char IDR7        : 1;} __BITS_IDR;/* 端口模式寄存器 */typedef struct{  unsigned char DDR0        : 1;  unsigned char DDR1        : 1;  unsigned char DDR2        : 1;  unsigned char DDR3        : 1;  unsigned char DDR4        : 1;  unsigned char DDR5        : 1;  unsigned char DDR6        : 1;  unsigned char DDR7        : 1;} __BITS_DDR;/* 端口控制寄存器1 */typedef struct{  unsigned char C10         : 1;  unsigned char C11         : 1;  unsigned char C12         : 1;  unsigned char C13         : 1;  unsigned char C14         : 1;  unsigned char C15         : 1;  unsigned char C16         : 1;  unsigned char C17         : 1;} __BITS_CR1;/* 端口控制寄存器2 */typedef struct{  unsigned char C20         : 1;  unsigned char C21         : 1;  unsigned char C22         : 1;  unsigned char C23         : 1;  unsigned char C24         : 1;  unsigned char C25         : 1;  unsigned char C26         : 1;  unsigned char C27         : 1;} __BITS_CR2;/*------------------------------------------------------------------------- *      端口地址结构体[联合体]定义 *-----------------------------------------------------------------------*//* 端口输出地址定义 */__IO_REG8_BIT(PA_ODR,      0x5000, __READ_WRITE, __BITS_ODR);   //PA输出口 __IO_REG8_BIT(PB_ODR,      0x5005, __READ_WRITE, __BITS_ODR);   //PB输出口 __IO_REG8_BIT(PC_ODR,      0x500A, __READ_WRITE, __BITS_ODR);   //PC输出口 __IO_REG8_BIT(PD_ODR,      0x500F, __READ_WRITE, __BITS_ODR);   //PD输出口 __IO_REG8_BIT(PE_ODR,      0x5014, __READ_WRITE, __BITS_ODR);   //PE输出口 __IO_REG8_BIT(PF_ODR,      0x5019, __READ_WRITE, __BITS_ODR);   //PF输出口 __IO_REG8_BIT(PG_ODR,      0x501E, __READ_WRITE, __BITS_ODR);   //PG输出口 __IO_REG8_BIT(PH_ODR,      0x5023, __READ_WRITE, __BITS_ODR);   //PH输出口 __IO_REG8_BIT(PI_ODR,      0x5028, __READ_WRITE, __BITS_ODR);   //PI输出口 /* 端口输入地址定义 */__IO_REG8_BIT(PA_IDR,      0x5001, __READ, __BITS_IDR); //PA输入口 __IO_REG8_BIT(PB_IDR,      0x5006, __READ, __BITS_IDR); //PB输入口 __IO_REG8_BIT(PC_IDR,      0x500B, __READ, __BITS_IDR); //PC输入口 __IO_REG8_BIT(PD_IDR,      0x5010, __READ, __BITS_IDR); //PD输入口 __IO_REG8_BIT(PE_IDR,      0x5015, __READ, __BITS_IDR); //PE输入口 __IO_REG8_BIT(PF_IDR,      0x501A, __READ, __BITS_IDR); //PF输入口 __IO_REG8_BIT(PG_IDR,      0x501F, __READ, __BITS_IDR); //PG输入口 __IO_REG8_BIT(PH_IDR,      0x5024, __READ, __BITS_IDR); //PH输入口 __IO_REG8_BIT(PI_IDR,      0x5029, __READ, __BITS_IDR); //PI输入口 /* 端口模式配置寄存器地址定义 */__IO_REG8_BIT(PA_DDR,      0x5002, __READ_WRITE, __BITS_DDR);__IO_REG8_BIT(PB_DDR,      0x5007, __READ_WRITE, __BITS_DDR);__IO_REG8_BIT(PC_DDR,      0x500C, __READ_WRITE, __BITS_DDR);__IO_REG8_BIT(PD_DDR,      0x5011, __READ_WRITE, __BITS_DDR);__IO_REG8_BIT(PE_DDR,      0x5016, __READ_WRITE, __BITS_DDR);__IO_REG8_BIT(PF_DDR,      0x501B, __READ_WRITE, __BITS_DDR);__IO_REG8_BIT(PG_DDR,      0x5020, __READ_WRITE, __BITS_DDR);__IO_REG8_BIT(PH_DDR,      0x5025, __READ_WRITE, __BITS_DDR);__IO_REG8_BIT(PI_DDR,      0x502A, __READ_WRITE, __BITS_DDR);/* 端口控制寄存器1地址定义 */__IO_REG8_BIT(PA_CR1,      0x5003, __READ_WRITE, __BITS_CR1);__IO_REG8_BIT(PB_CR1,      0x5008, __READ_WRITE, __BITS_CR1);__IO_REG8_BIT(PC_CR1,      0x500D, __READ_WRITE, __BITS_CR1);__IO_REG8_BIT(PD_CR1,      0x5012, __READ_WRITE, __BITS_CR1);__IO_REG8_BIT(PE_CR1,      0x5017, __READ_WRITE, __BITS_CR1);__IO_REG8_BIT(PF_CR1,      0x501C, __READ_WRITE, __BITS_CR1);__IO_REG8_BIT(PG_CR1,      0x5021, __READ_WRITE, __BITS_CR1);__IO_REG8_BIT(PH_CR1,      0x5026, __READ_WRITE, __BITS_CR1);__IO_REG8_BIT(PI_CR1,      0x502B, __READ_WRITE, __BITS_CR1);/* 端口控制寄存器2地址定义 */__IO_REG8_BIT(PA_CR2,      0x5004, __READ_WRITE, __BITS_CR2);__IO_REG8_BIT(PB_CR2,      0x5009, __READ_WRITE, __BITS_CR2);__IO_REG8_BIT(PC_CR2,      0x500E, __READ_WRITE, __BITS_CR2);__IO_REG8_BIT(PD_CR2,      0x5013, __READ_WRITE, __BITS_CR2);__IO_REG8_BIT(PE_CR2,      0x5018, __READ_WRITE, __BITS_CR2);__IO_REG8_BIT(PF_CR2,      0x501D, __READ_WRITE, __BITS_CR2);__IO_REG8_BIT(PG_CR2,      0x5022, __READ_WRITE, __BITS_CR2);__IO_REG8_BIT(PH_CR2,      0x5027, __READ_WRITE, __BITS_CR2);__IO_REG8_BIT(PI_CR2,      0x502C, __READ_WRITE, __BITS_CR2);/*------------------------------------------------------------------------- * 实现位带操作 *-----------------------------------------------------------------------*/#define PAout(n) PA_ODR_bit.ODR##n#define PBout(n) PB_ODR_bit.ODR##n#define PCout(n) PC_ODR_bit.ODR##n#define PDout(n) PD_ODR_bit.ODR##n#define PEout(n) PE_ODR_bit.ODR##n#define PFout(n) PF_ODR_bit.ODR##n#define PGout(n) PG_ODR_bit.ODR##n#define PHout(n) PH_ODR_bit.ODR##n#define PIout(n) PI_ODR_bit.ODR##n#define PAin(n)  PA_IDR_bit.IDR##n#define PBin(n)  PB_IDR_bit.IDR##n#define PCin(n)  PC_IDR_bit.IDR##n#define PDin(n)  PD_IDR_bit.IDR##n#define PEin(n)  PE_IDR_bit.IDR##n#define PFin(n)  PF_IDR_bit.IDR##n#define PGin(n)  PG_IDR_bit.IDR##n#define PHin(n)  PH_IDR_bit.IDR##n#define PIin(n)  PI_IDR_bit.IDR##n#endif
原创粉丝点击