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软件开发外包
无线网络技术速查方法