STM32有哪些不同GPIO驱动
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍STM32有哪些不同GPIO驱动,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1 库函数版最常用的版本,使用ST标准外设库void Led_Key_Init(
千家信息网最后更新 2026年11月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安全错误
数据库的锁怎样保障安全
高科技互联网
互联网科技保险
没上市的科技互联网公司
沃里互联网科技
玖二柒互联网科技公司待遇
小米互联网科技园设置
汽车互联网创新科技园
受益于互联网科技的高速发展
互联网还是高科技吗
上海宁丞科技互联网
杭州壁岐互联网科技有限公司
恒生互联网科技业指数调整周期
华中科技大学互联网的牛人
黑云互联网科技有限公司
互联网科技数字货币
上海乐五互联网科技有限公司
银川新华互联网科技学校是国营吗
同城互联网络科技
广州三三互联网科技有限公司
优雇互联网科技有限公司
互联网科技网
中国互联网科技股
麻工互联网科技
卓越科技(互联网 )
科技创新互联网企业
承德科技产业互联网发展
保险科技服务互联网营销体系
卡尔迅互联网科技有限公司
南京一网一红互联网科技有限公司
互联网大会出现的黑科技