STM32有哪些不同GPIO驱动
发表于:2025-01-27 作者:千家信息网编辑
千家信息网最后更新 2025年01月27日,这篇文章主要介绍STM32有哪些不同GPIO驱动,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1 库函数版最常用的版本,使用ST标准外设库void Led_Key_Init(
千家信息网最后更新 2025年01月27日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安全错误
数据库的锁怎样保障安全
it审计+数据库安全
数据库刷库意思
数据库运维工程师能做多少年
手动连接无线网络安全类型
南岸区软件开发培训班
我的世界内置服务器
西安金融软件开发招聘
qq的数据库怎么实现共享的
delphi数据库安全问题
网络安全处罚滴滴进度
石化行业网络安全方案设计
收粮数据库
海康监控存储服务器
鄂尔多斯市恒新鸿业网络技术
杭州六哥网络技术有限公司
服务器cpu 排行
网络安全突出问题和意见建议
软件开发做得累不累
企业网络安全顾问
国家网络安全示范单位申报
集中管理式数据库
数据库设计的过程
java数据库题目
服务器没有网络怎么连接电脑
网络安全主题黑板报标题
应用服务器上执行sql
软件开发edge浏览器打不开
提升电力系统网络安全的方法
软件开发中标后的合同
中国的网络安全部门人员