
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: ![]() PORT: ![]() 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<< ![]() setType(type); setMode(mode); setPUPD(pupd); setSpeed(speed); } void PORT: ![]() 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<< ![]() GPIO->OSPEEDR |= (speed << PinNo); } void PORT::setPUPD(GPIOPuPd_TypeDef pupd) { GPIO-> ![]() ![]() GPIO-> ![]() } void PORT::setMode(GPIOMode_TypeDef mode) { GPIO->MODER &= ~(3<< ![]() GPIO->MODER |= (mode << PinNo); } u8 PORT::Read() { return GPIO_ReadInputDataBit(GPIO,Pin); } ==========使用 PORT p(GPIOA,9); p.Low();低电平,p.High();高电平 p.Read();读取 |