GPIO的初始化和使用
程序员文章站
2022-06-08 19:42:37
...
一、STM32总线构架图
二、GPIO初始化
- 使能对应的端口时钟
RCC_APB2PeriphClockCmd(GPIOC,ENABLE);
- 使用GPIO_InitTypeDef声明一个结构体并对成员进行配置
GPIO_InitTypeDef GPIO_initStructure;
GPIO_initStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;//引脚配置
GPIO_initStructure.GPIO_Mode = GPIO_Mode_Out_PP;//输入或输出模式
GPIO_initStructure.GPIO_Speed = GPIO_Speed_50MHz;//输出速率
3.调用GPIO_Init初始化GPIO
GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); //第一个参数为端口,第二个为结构体地址
//例:GPIO_Init(GPIOC,&GPIO_initStructure);
三、GPIO的使用
1.方法一:使用GPIO_SetBits(置1)和GPIO_ResetBits(置0)
2.方法二:使用位带操作(方便简单)
添加一个头文件,命名任意,此处取system.h,内容如下
#ifndef _system_H
#define _system_H
#include "stm32f10x.h"
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
//IO口映射
#define GPIOA_ODR_Addr (GPIOA_BASE+12)
#define GPIOB_ODR_Addr (GPIOB_BASE+12)
#define GPIOC_ODR_Addr (GPIOC_BASE+12)
#define GPIOD_ODR_Addr (GPIOD_BASE+12)
#define GPIOE_ODR_Addr (GPIOE_BASE+12)
#define GPIOF_ODR_Addr (GPIOF_BASE+12)
#define GPIOG_ODR_Addr (GPIOG_BASE+12)
#define GPIOA_IDR_Addr (GPIOA_BASE+8)
#define GPIOB_IDR_Addr (GPIOB_BASE+8)
#define GPIOC_IDR_Addr (GPIOC_BASE+8)
#define GPIOD_IDR_Addr (GPIOD_BASE+8)
#define GPIOE_IDR_Addr (GPIOE_BASE+8)
#define GPIOF_IDR_Addr (GPIOF_BASE+8)
#define GPIOG_IDR_Addr (GPIOG_BASE+8)
//IO操作,只对单一的IO口
//确保n的值小于16
#define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //输出
#define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //输入
#define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n)
#define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n)
#define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n)
#define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n)
#define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n)
#define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n)
#define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n)
#define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n)
#define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n)
#define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n)
#define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n)
#define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n)
#endif
GPIO初始化后,使用时只需添加此头文件即可。
如:
PCout(0) = 1; //输出模式
a = PCin(1); //输入模式
推荐阅读
-
纯css3使用vw和vh实现自适应的方法
-
SQL Server遍历表中记录的2种方法(使用表变量和游标)
-
sqlserver中delete、update中使用表别名和oracle的区别
-
Python使用poplib模块和smtplib模块收发电子邮件的教程
-
使用HTML5的File实现base64和图片的互转
-
PHP实现的汉字拼音转换和公历农历转换类及使用示例
-
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
-
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
-
在Surface中IE浏览器触摸版和桌面版的设置使用技巧
-
基于B-树和B+树的使用:数据搜索和数据库索引的详细介绍