正点原子sys.h文档详解
文档主体内容为位带的映射,目的是实现位带操作。
第一部分:位带映射的宏函数
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)
分类:
STM32
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具