你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

c++封装类GPIO

[复制链接]
wecreate 发布时间:2019-8-16 16:09
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();读取
收藏 评论0 发布时间:2019-8-16 16:09

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版