f407vet6的 自己以前写的,发布出来,希望有什么问题,大家可以指证出来,我好完善程序。 =========gpio.h1 f1 k9 r3 b+ ]3 e * H% E$ p6 ^- t class PORT{4 ^5 u- C( |! `; M1 |1 C' ^7 v 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); ! W: z$ |( j' P2 K8 v void Low(); void High(); void setMode(GPIOMode_TypeDef mode);3 ?5 f9 v$ y' J4 I' W8 I void setType(GPIOOType_TypeDef type);% Q+ u( V) M& H) } void setSpeed(GPIOSpeed_TypeDef speed);. l/ l% L$ N) S8 y) s7 \ void setPUPD(GPIOPuPd_TypeDef pupd);! {# ]; g! {. c. J; R r. Q u8 Read();/ B. Q% [8 a" x+ i4 _- F5 E4 i8 ] u8 PortNo;& r& A. u: H1 ~4 H% x9 s7 d u8 PinNo; - ~- _7 Q3 b. A3 i7 r };: j9 P+ K% z8 r5 o4 X# ?, m- D5 D 6 v, y5 ^4 I, l$ U5 G5 b6 w9 u , ~2 i! n m% E) H& E3 N$ C+ W8 p =========gpio.cpp) D0 G1 e( n( B! v, N - d- k0 c2 ~# V7 L5 y $ K! G, I8 p8 \: b0 z2 ^ PORT:ORT(){}; PORT:ORT(GPIO_TypeDef* gpio,u8 pin,GPIOMode_TypeDef mode,GPIOOType_TypeDef type,GPIOPuPd_TypeDef pupd,GPIOSpeed_TypeDef speed){0 B% _7 i/ h8 @+ {% o if (gpio==GPIOA) PortNo=0;. A" ]) D3 Z" ]4 k& q( M* ~ if (gpio==GPIOB) PortNo=1; if (gpio==GPIOC) PortNo=2; if (gpio==GPIOD) PortNo=3;+ e7 L& L5 j* ~) F9 ? if (gpio==GPIOE) PortNo=4;$ c) e e# z: ?+ ` if (gpio==GPIOF) PortNo=5; GPIO=gpio; Pin=1<<pin; PinNo=pin*2; 8 D& `- j7 Q7 } RCC->AHB1ENR |= 1<<ortNo;6 h& g- G0 N# R: R setType(type); setMode(mode);4 {! c) e( ^7 j1 f$ t setPUPD(pupd); setSpeed(speed); " _2 a0 q( p8 b, z$ g! ?4 h" k } 7 }% G1 _) z, t void PORT:ow() {% L0 v y" {3 g3 _6 s1 X1 R GPIO->ODR &=~(1<<(PinNo/2));- }+ Q: ^( |( g9 f! F# W0 W7 P } void PORT::High() {, ~8 @% v' b! D a$ i GPIO->ODR |=1<<(PinNo/2); } . d% H. L$ Q( B) e$ a( d! x void PORT::setType(GPIOOType_TypeDef type) {) N* O2 P& s) d8 T, N) i GPIO->OTYPER &=~(1<<(PinNo/2)); GPIO->OTYPER |=type<<(PinNo/2); }* A! r1 W9 O4 P5 p7 W 0 P( K! G% i" L8 z& M void PORT::setSpeed(GPIOSpeed_TypeDef speed) {# r) J1 B9 K2 L& U GPIO->OSPEEDR &=~(3<<inNo);" D/ \/ ?' O8 H9 D GPIO->OSPEEDR |= (speed << PinNo);5 ^0 ]( H$ G" `9 k2 J5 V* {& H }% G/ D* L6 _6 s* d- i " }# [1 Q: B4 L7 R3 d2 o0 i [ void PORT::setPUPD(GPIOPuPd_TypeDef pupd) {, ~+ G+ \( v9 @+ ^9 \$ M8 c) H9 I GPIO->UPDR &=~(3<<inNo); GPIO->UPDR |= (pupd << PinNo); } void PORT::setMode(GPIOMode_TypeDef mode) {' O0 l" s# I- K6 u1 z% b& J GPIO->MODER &= ~(3<<inNo); GPIO->MODER |= (mode << PinNo); } u8 PORT::Read() { return GPIO_ReadInputDataBit(GPIO,Pin);& r a) K" _4 t3 Y) |. b1 Q' r } ==========使用 * r7 m" m! P" r W PORT p(GPIOA,9); p.Low();低电平,p.High();高电平 p.Read();读取 |