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
阅读全文
0 0
- STM8 IAR中实现类似 位带操作【兼容库函数】
- STM32F030系列实现仿位带操作
- 位带操作
- stmf103 位带操作
- stm32 位带操作
- STM32位带操作
- STM32位带操作
- stm32位带操作
- STM32F2位带操作
- 位带操作在stm32中的C语言实现
- 在C语言中使用位带操作
- ARM -M3位带操作
- STM32位带操作详解
- STM32的位带操作
- STM32位带操作举例
- M4的位带操作
- 跑马灯-位带操作
- stm32之位带操作
- Mysql学习之暂时关闭外键的方法
- 练习笔记
- epoll网路模型
- 《图解HTTP》下载地址及介绍
- 蓝桥杯 算法训练 最大最小公倍数
- STM8 IAR中实现类似 位带操作【兼容库函数】
- Oracle之索引、位图索引、物化视图、缓存结果集等性能比拼
- JS数据类型
- spring in action笔记(一)——why spring
- 171104 逆向-上海CTF(Re)
- 《python数据分析组键篇》之numpy
- frameset框架
- 171105 逆向-上海CTF(cLemency)
- 深入浅出UML类图