GPIO 用于普通I/O口的输入输出
C预备知识:
const 修饰只读常量
volatile修饰易变量,表示编译器不能进行优化
GPIO模块的编程步骤:
1.设置PORT端口为GPIO复用
2.设置GPIO口的输入输出方向
在进行库开发时要有软件分层的思想 。
GPIO.c
GPIO_MemMapPtr GPIOX[PTX_MAX] = {PTA_BASE_PTR,PTB_BASE_PTR,PTC_BASE_PTR, PTD_BASE_PTR, PTE_BASE_PTR}; //定义五个指针数组保存 GPIOX 的地址
//这些数组元素表达了GPIO_MemMapPtr结构体指针的地址
//GPIO初始化
void gpio_init (PTXn_e ptxn, GPIO_CFG cfg, uint8 data)
{
//端口方向控制输入还是输出
if( cfg == GPI )
//在GPIO.h中有枚举:
//typedef enum GPIO_CFG
// {
// //这里的值不能改!!!
// GPI = 0, //定义管脚输入方向
// GPO = 1, //定义管脚输出方向
// } GPIO_CFG;
{
//设置端口方向为输入
GPIO_PDDR_REG(GPIOX_BASE(ptxn)) &= ~(1 << PTn(ptxn)); // GPIO PDDR 管脚号 清0,即对应管脚配置为端口方向输入
//#define GPIOX_BASE(PTxn) GPIOX[PTX(PTxn)] //GPIO模块的地址
}
else
{
//设置端口方向为输出
GPIO_PDDR_REG(GPIOX_BASE(ptxn)) |= (1 << PTn(ptxn)); // GPIO PDDR 管脚号 置1,即对应管脚配置为端口方向输出
//端口输出数据
if(data == 0)
{
GPIO_PDOR_REG(GPIOX_BASE(ptxn)) &= ~(1 << PTn(ptxn));