文档主体内容为位带的映射,目的是实现位带操作。

第一部分:位带映射的宏函数

1 #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
2 #define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
3 #define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))

第二部分:STM各GPIO的输入寄存器 (IDR)、输出寄存器寄存器(ODR)映射地址

//x范围:A~G
1 #define GPIOx_ODR_Addr (GPIOx_BASE+12)
2 .....
3 #define GPIOx_IDR_Addr (GPIOx_BASE+8)
4 .....

第三部分:上述各寄存器的位带区域

1 //x范围:A~G,n范围:[0,15]
2 #define Pxout(n) BIT_ADDR(GPIOx_ODR_Addr,n) //输出
3 #define Pxin(n) BIT_ADDR(GPIOx_IDR_Addr,n) //输入

使用办法:

实现后,可将Pxout(n)\Pxin(n) 再宏定义,例如

1 #define    DHT11_DQ_OUT PAout(0) //数据端口    PA0出方向
2 #define DHT11_DQ_IN PAin(0) //数据端口 PA0入方向

其中,

DHT11_DQ_OUT = 1/0, 可以代替:GPIO_SetBits/ResetBits(GPIOB,GPIO_Pin_0)
DHT11_DQ_IN ,可以代替 GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0)

最新文章

  1. 深入理解java内存模型系列文章
  2. [转]acm忠告
  3. Effective Java 读书笔记之五 枚举和注解
  4. JAVA_HOME path classpath 以及cmd编译运行java代码
  5. C语言break和continue
  6. Dynamics AX 2012 R2 客制化RDP报表参数对话框
  7. bzoj3551 3545
  8. 简单了解下Dubbo
  9. 一个简单版的波纹css3动画
  10. 进击的新版NavMesh系统:看我飞檐走壁
  11. 201521123008《Java程序设计》第10周学习总结
  12. redis基础二
  13. SQLSERVER 聚集一个表的字段2008及以后,要求支持XML
  14. 基于C++的成功-失败法演示
  15. C++学习 —— 住着魔鬼的细节
  16. Spring Boot 技术总结
  17. IIS W3C日志记录字段和HTTP状态代码的说明
  18. Hibernate学习笔记一:项目创建与基本配置文件
  19. python基础----&gt;python的使用(五)
  20. Android之自定义View学习(一)

热门文章

  1. Spark通信框架RPC介绍
  2. Redis缓存何以一枝独秀?——从百变应用场景与热门面试题中感受下Redis的核心特性与使用注意点
  3. CLISP学习(一)
  4. python进阶之路17 包的使用、collections、time、random模块
  5. [Untiy]贪吃蛇大作战(五)——游戏主界面
  6. Flutter新版本2.X系列--01创建项目
  7. 【Python】bytes和hex字符串之间的相互转换
  8. 真正“搞”懂HTTP协议11之代理服务
  9. 一文详解数仓GaussDB(DWS) 函数出参带出方式
  10. JavaScript: symbol 和 string key 取值用法