|
f407vet6的 自己以前写的,发布出来,希望有什么问题,大家可以指证出来,我好完善程序。& f5 y$ k: n! \, P4 r =========gpio.h class PORT{ public:2 x9 {7 y- h9 ]$ p7 V' a2 ]1 C r GPIO_TypeDef* GPIO;) c9 T9 u8 ~# } uint16_t Pin;0 w8 l$ k- \' N4 m PORT();! q( `) ^3 V- X% j0 s3 I2 w 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); + M0 z5 U! o% G3 R void Low();( g/ o# H! I. I! ] void High();( e: f5 t+ j+ v void setMode(GPIOMode_TypeDef mode);8 z9 z5 ^) [9 Y0 X void setType(GPIOOType_TypeDef type); void setSpeed(GPIOSpeed_TypeDef speed);/ k# }# x8 N( b6 [+ R P' t void setPUPD(GPIOPuPd_TypeDef pupd);8 y, Z7 U5 B I% q4 U5 Y u8 Read();3 G9 ^/ p$ E% L1 U# Y E2 [ P: T u8 PortNo;) V# Y9 ]% k/ k7 v. u" ^ u8 PinNo;6 I9 T! E5 P# U" O }; 5 c. X v9 N0 v. O& ]& H6 E =========gpio.cpp ( A( M4 _% L' i- G! m; T + ^* T) A, m. b4 X PORT: ORT(){}; x) P, c6 u3 F: }- Q iPORT: 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;9 `( m' ^* [- q" [: p4 F if (gpio==GPIOC) PortNo=2;- O$ P2 i$ h1 d# T+ ] if (gpio==GPIOD) PortNo=3; y: f/ f2 f+ w! X5 @! S; R$ g1 ~ J if (gpio==GPIOE) PortNo=4;) x' U9 G5 H" t7 \6 u0 e# S4 s- J if (gpio==GPIOF) PortNo=5; GPIO=gpio; Pin=1<<pin; PinNo=pin*2;0 h. z; S% d k; X& D; a, F RCC->AHB1ENR |= 1<< ortNo;setType(type); setMode(mode); setPUPD(pupd); setSpeed(speed); 7 Q( c& ^ z) `6 E. J7 g1 f } $ R4 A/ k, x8 L! D, g void PORT: ow() {GPIO->ODR &=~(1<<(PinNo/2));$ L2 i/ H/ \# z } void PORT::High() { GPIO->ODR |=1<<(PinNo/2); }% u( r' c. a2 o: d& m void PORT::setType(GPIOOType_TypeDef type) {+ N; I4 P" B1 E9 { GPIO->OTYPER &=~(1<<(PinNo/2));7 i# Q6 `( B: s: ]9 e9 U" X GPIO->OTYPER |=type<<(PinNo/2);$ [9 H1 u- l R R& `) B } 6 }: F( ? D9 n2 {* }5 |# l void PORT::setSpeed(GPIOSpeed_TypeDef speed) {3 z( B5 ~6 O* u0 \ GPIO->OSPEEDR &=~(3<< inNo);GPIO->OSPEEDR |= (speed << PinNo); } void PORT::setPUPD(GPIOPuPd_TypeDef pupd) { GPIO-> UPDR &=~(3<< inNo);GPIO-> UPDR |= (pupd << PinNo);}% I8 ~* R; }. i" B# V7 r; ~ void PORT::setMode(GPIOMode_TypeDef mode) {3 A7 X% _: a* t; r, K4 r GPIO->MODER &= ~(3<< inNo);GPIO->MODER |= (mode << PinNo); }1 V. S5 j* q9 t6 o+ N! o4 g u8 PORT::Read() {2 R5 M4 h1 z4 @6 l9 h5 }/ m return GPIO_ReadInputDataBit(GPIO,Pin); }* I% x% F. f, s2 R( n ==========使用& X: e2 ~/ z& u% ] PORT p(GPIOA,9);, d) J& k2 ^9 Z3 c( | p.Low();低电平,p.High();高电平 p.Read();读取 |
微信公众号
手机版