千家信息网

STM32有哪些不同GPIO驱动

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章主要介绍STM32有哪些不同GPIO驱动,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1 库函数版最常用的版本,使用ST标准外设库void Led_Key_Init(
千家信息网最后更新 2025年12月02日STM32有哪些不同GPIO驱动

这篇文章主要介绍STM32有哪些不同GPIO驱动,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

1 库函数版

最常用的版本,使用ST标准外设库

void  Led_Key_Init(void){    GPIO_InitTypeDef GPIO_Init_s;    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);//使能时钟    GPIO_Init_s.GPIO_Pin = GPIO_Pin_4;  GPIO_Init_s.GPIO_Mode = GPIO_Mode_OUT;  GPIO_Init_s.GPIO_OType = GPIO_OType_PP;  GPIO_Init_s.GPIO_Speed = GPIO_Speed_50MHz;  GPIO_Init_s.GPIO_PuPd = GPIO_PuPd_UP;  GPIO_Init(GPIOE, &GPIO_Init_s);}

开源代码:

https://github.com/strongercjd/STM32F207VCT6/tree/master/06-GPIO-Input-Output

2 寄存器版

寄存器版其实就是把ST标准外设库拷贝出来,可以简化一些操作

/********使用寄存器---start********///TP---PA15 #define TP_PORT      GPIOA      #define TP_PIN      GPIO_Pin_15 #define TP_OUT()   TP_PORT->CRH&=0X0FFFFFFF; TP_PORT->CRH|=0X50000000;   //!IO输出#define TP_IN()    TP_PORT->CRH&=0X0FFFFFFF; TP_PORT->CRH|=0X40000000;   //!IO输入#define TP_READ()  (((TP_PORT->IDR)>>15)?1:0)   //!BSRR = TP_PIN;//写1#define TP_CLR()    TP_PORT->BRR  = TP_PIN;//写0 #define TP_DATA_SET()   TP_SET() //IO写1#define TP_DATA_CLR()   TP_CLR() //IO写0#define TP_DATA_OUT()   TP_OUT() //将IO设为输出#define TP_DATA_IN()    TP_IN()  //将IO设为输入#define TP_DATA_READ()  TP_READ()//读取IO的电平 /********使用寄存器---end********/

开源代码:

https://github.com/strongercjd/STM32F207VCT6/tree/master/06-GPIO-Input-Output

3 位段版

基于位段的,操作方便

/*LED配置---PE4*/#define  GPIO_IDR_OFFSET  (GPIOE_BASE+0x10 - PERIPH_BASE)#define  GPIO_ODR_OFFSET  (GPIOE_BASE+0x14 - PERIPH_BASE) #define  GPIO_BitNumber   4#define  GPIO_OUT_BB     (PERIPH_BB_BASE + (GPIO_ODR_OFFSET * 32) + (GPIO_BitNumber * 4))    #define  GPIO_OUT_DATA           *(__IO uint32_t *)GPIO_OUT_BB #define  GPIO_IN_BB     (PERIPH_BB_BASE + (GPIO_IDR_OFFSET * 32) + (GPIO_BitNumber * 4))    #define  GPIO_IN_DATA           *(__IO uint32_t *)GPIO_IN_BB #define  GPIO_DIR_REG     *(__IO uint32_t *)(GPIOE_BASE+0X00)  #define PE4_SET()  GPIO_OUT_DATA = 1   //!< IO写1#define PE4_CLR()  GPIO_OUT_DATA = 0   //!< IO写0#define PE4_OUT()  GPIO_DIR_REG = (((GPIO_DIR_REG) & 0xFFFFFCFF) | 0x00000100)  //!IO输出#define PE4_IN()   GPIO_DIR_REG = ((GPIO_DIR_REG) & 0xFFFFFCFF)  //!IO输入#define PE4_READ() GPIO_IN_DATA   //!

将上述整理为通用GPIO驱动代码

*GPIO配置---PXX*/#define GPIO_SET(GPIOx_BASE,GPIO_BitNumber)   *(__IO uint32_t *)((PERIPH_BB_BASE + ((GPIOx_BASE+0x14 - PERIPH_BASE) * 32) + (GPIO_BitNumber * 4))) = 1   //!< IO写1#define GPIO_CLR(GPIOx_BASE,GPIO_BitNumber)   *(__IO uint32_t *)((PERIPH_BB_BASE + ((GPIOx_BASE+0x14 - PERIPH_BASE) * 32) + (GPIO_BitNumber * 4))) = 0   //!< IO写0 #define GPIO_OUT(GPIOx_BASE,GPIO_BitNumber)   *(__IO uint32_t *)(GPIOx_BASE+0X00)  &= ~(GPIO_MODER_MODER0 << (GPIO_BitNumber * 2));\                                              *(__IO uint32_t *)(GPIOx_BASE+0X00) |= ((GPIO_Mode_OUT) << (GPIO_BitNumber * 2)); //!IO输出 #define GPIO_IN(GPIOx_BASE,GPIO_BitNumber)    *(__IO uint32_t *)(GPIOx_BASE+0X00)  &= ~(GPIO_MODER_MODER0 << (GPIO_BitNumber * 2));\                                              *(__IO uint32_t *)(GPIOx_BASE+0X00) |= ((GPIO_Mode_IN) << (GPIO_BitNumber * 2));  //!IO输入                                              #define GPIO_READ(GPIOx_BASE,GPIO_BitNumber)  *(__IO uint32_t *)((PERIPH_BB_BASE + ((GPIOx_BASE+0x10 - PERIPH_BASE) * 32) + (GPIO_BitNumber * 4)))   //!

调用方法

GPIOx_BASE:GPIOE_BASE基地址,而不是GPIOE

GPIO_BitNumber:4,而不是GPIO_Pin_4

GPIO_OUT(GPIOE_BASE,4);

开源代码:

https://github.com/strongercjd/STM32F207VCT6/tree/master/08-GPIO-bit-band

以上是"STM32有哪些不同GPIO驱动"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

代码 寄存器 输入 输出 驱动 不同 内容 外设 标准 篇文章 配置 价值 兴趣 函数 基地 基地址 小伙 小伙伴 就是 常用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 杭州领爱网络技术 mac本地服务器搭建 服务器发布命令 无锡智能软件开发培训 网络技术实训心得300字 科达服务器怎么添加摄像头 深圳布塔网络技术有限公司 英雄联盟山东有哪些服务器 网站数据库服务器放在dmz去吗 宿州软件开发培训学费 做软件开发成本怎么算 上海移动开发票服务器 易班大学生网络安全教育截图 下载外文文献的数据库 数据库设计个人报告 数据库约束冲突怎么解决 部落冲突要关闭所有服务器了吗 巴斯勒相机用什么软件开发 潘多拉系统 服务器 协作机器人的安全性软件开发 华三服务器带外管理配置 西峡直播软件开发 数据库创建部门表用英文怎么说 佛山市永天网络技术有限公司 选择哪种数据库系统模型 办公室电脑网络安全要求 共享服务器和云服务器的区别 网络技术对手机是如何收费的 小程序saas软件开发外包 无线网络技术速查方法
0