请选择 进入手机版 | 继续访问电脑版
搜索
查看: 105|回复: 0

[原创] c++封装类GPIO

[复制链接]

该用户从未签到

5

主题

8

帖子

0

蝴蝶豆

初级会员

最后登录
2019-8-30
发表于 2019-8-16 16:09:10 | 显示全部楼层 |阅读模式
f407vet6的
自己以前写的,发布出来,希望有什么问题,大家可以指证出来,我好完善程序。
=========gpio.h

class PORT{
        public:
                        GPIO_TypeDef* GPIO;
                        uint16_t                        Pin;
                        PORT();
                        PORT(GPIO_TypeDef*,u8,GPIOMode_TypeDef mode=GPIO_Mode_OUT,GPIOOType_TypeDef type=GPIO_OType_PP,GPIOPuPd_TypeDef pupd=GPIO_PuPd_NOPULL,GPIOSpeed_TypeDef speed=GPIO_Speed_100MHz);

                        void Low();
                        void High();
                        void setMode(GPIOMode_TypeDef mode);
                        void setType(GPIOOType_TypeDef type);
                        void setSpeed(GPIOSpeed_TypeDef speed);
                        void setPUPD(GPIOPuPd_TypeDef pupd);
                        u8 Read();
                        u8 PortNo;
                        u8 PinNo;
                 
};


=========gpio.cpp


PORT:ORT(){};
PORT:ORT(GPIO_TypeDef* gpio,u8 pin,GPIOMode_TypeDef mode,GPIOOType_TypeDef type,GPIOPuPd_TypeDef pupd,GPIOSpeed_TypeDef speed){
        if (gpio==GPIOA) PortNo=0;
        if (gpio==GPIOB) PortNo=1;
        if (gpio==GPIOC) PortNo=2;
        if (gpio==GPIOD) PortNo=3;
        if (gpio==GPIOE) PortNo=4;
        if (gpio==GPIOF) PortNo=5;
       
        GPIO=gpio;
        Pin=1<<pin;
        PinNo=pin*2;
               
                RCC->AHB1ENR |= 1<<ortNo;
               
                setType(type);
                setMode(mode);
                setPUPD(pupd);
                setSpeed(speed);
       
}

void PORT:ow() {
                GPIO->ODR &=~(1<<(PinNo/2));
}
void PORT::High() {
                GPIO->ODR |=1<<(PinNo/2);
}

void PORT::setType(GPIOOType_TypeDef type) {
                GPIO->OTYPER &=~(1<<(PinNo/2));
                GPIO->OTYPER |=type<<(PinNo/2);
}

void PORT::setSpeed(GPIOSpeed_TypeDef speed) {
                GPIO->OSPEEDR &=~(3<<inNo);
    GPIO->OSPEEDR |= (speed << PinNo);
}

void PORT::setPUPD(GPIOPuPd_TypeDef pupd) {
                GPIO->UPDR &=~(3<<inNo);
    GPIO->UPDR |= (pupd << PinNo);
}
void PORT::setMode(GPIOMode_TypeDef mode) {
                GPIO->MODER &= ~(3<<inNo);
    GPIO->MODER |= (mode << PinNo);
}
u8 PORT::Read() {
                return GPIO_ReadInputDataBit(GPIO,Pin);
}

==========使用

PORT p(GPIOA,9);
p.Low();低电平,p.High();高电平 p.Read();读取
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2019-12-16 10:12 , Processed in 0.100565 second(s), 14 queries , MemCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表