f407vet6的 自己以前写的,发布出来,希望有什么问题,大家可以指证出来,我好完善程序。1 V7 S8 p- r; `- Y( O' z =========gpio.h8 W+ C3 K4 G$ c( T0 \ class PORT{1 R/ h/ ~9 b! _ public: GPIO_TypeDef* GPIO; uint16_t Pin; PORT();% l( i# \+ z' \4 G- G6 v 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); ' F. D+ J3 m% `/ w: } void Low();' \' G# {: P$ Q0 D5 n8 V) N6 M void High();) O) A, x. u7 k) A void setMode(GPIOMode_TypeDef mode);8 F8 B4 E+ ~4 }4 `( p) W. q4 m; p void setType(GPIOOType_TypeDef type);7 G' g+ W/ s6 W$ T void setSpeed(GPIOSpeed_TypeDef speed); void setPUPD(GPIOPuPd_TypeDef pupd); d/ ` Q6 y1 f; N3 ]# C u8 Read();" w ~: f9 C9 D u8 PortNo; u8 PinNo;# p1 Y/ F1 W0 S5 U, j };7 D4 t" F+ p7 @- j3 _" ~ # z6 n- e/ `8 k$ Q; ^( Y0 o! T =========gpio.cpp( {# u3 ^0 y! t+ n9 i n0 H C% ^5 H9 o/ ~ PORT:ORT(){};+ U: [- T) E1 W5 E9 r% d PORT:ORT(GPIO_TypeDef* gpio,u8 pin,GPIOMode_TypeDef mode,GPIOOType_TypeDef type,GPIOPuPd_TypeDef pupd,GPIOSpeed_TypeDef speed){% J3 J" T* [9 [8 S [, B& e if (gpio==GPIOA) PortNo=0;+ H) K. [% R [1 l% M if (gpio==GPIOB) PortNo=1;$ T2 S1 ]$ y8 J0 |6 A. M3 ? h if (gpio==GPIOC) PortNo=2; if (gpio==GPIOD) PortNo=3;& v2 w/ U% [9 [ if (gpio==GPIOE) PortNo=4; if (gpio==GPIOF) PortNo=5; GPIO=gpio;- {' w% R J; d Pin=1<<pin; PinNo=pin*2; * G; _2 e" d5 z+ S/ | RCC->AHB1ENR |= 1<<ortNo; $ g% `- @2 F3 Y7 I5 h: G setType(type); setMode(mode);, k1 S( M* t" l: x7 y* X9 o8 ]8 I setPUPD(pupd); setSpeed(speed); |* u, ^ X' W n4 [- C 6 O' Z6 r* c7 b. }5 @ K; s } 3 F. d+ h. @3 u, R1 W void PORT:ow() {% h7 p3 _, v' T5 v& @ GPIO->ODR &=~(1<<(PinNo/2)); } void PORT::High() { GPIO->ODR |=1<<(PinNo/2);( d2 w: \2 p! @ } . v% M5 t1 H+ b: E) v9 u void PORT::setType(GPIOOType_TypeDef type) { GPIO->OTYPER &=~(1<<(PinNo/2));: i; w4 _. N7 M9 f GPIO->OTYPER |=type<<(PinNo/2); }8 j- y3 J, u2 J, J4 c void PORT::setSpeed(GPIOSpeed_TypeDef speed) {) D: K- k+ _1 X( B1 ?- u GPIO->OSPEEDR &=~(3<<inNo); GPIO->OSPEEDR |= (speed << PinNo);; r: d9 I7 q3 x9 r } ' E" Q: n b/ p; \ void PORT::setPUPD(GPIOPuPd_TypeDef pupd) {- i& m# }1 V6 G& l! \ GPIO->UPDR &=~(3<<inNo);. W6 W9 |% U H5 S GPIO->UPDR |= (pupd << PinNo); }6 j1 P% \0 B. ` b+ o) P: z void PORT::setMode(GPIOMode_TypeDef mode) {- }/ u+ v0 J( Q GPIO->MODER &= ~(3<<inNo);: p) l+ b5 J2 y2 ~/ s% A M GPIO->MODER |= (mode << PinNo);; W6 h4 C8 C* Q3 E. W9 W8 h! f }+ ~9 N8 n/ r$ ~+ h3 x% o+ X u8 PORT::Read() {0 S( i) S* |3 J& \% k return GPIO_ReadInputDataBit(GPIO,Pin);9 m: M, C& R4 V! ]: L } 1 d+ G- b- d. ~+ J7 b ==========使用 PORT p(GPIOA,9); p.Low();低电平,p.High();高电平 p.Read();读取 |