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

c++封装类GPIO

[复制链接]
wecreate 发布时间:2019-8-16 16:09
f407vet6的
; J! K- T8 W9 A' R) Z自己以前写的,发布出来,希望有什么问题,大家可以指证出来,我好完善程序。1 V7 S8 p- r; `- Y( O' z
=========gpio.h8 W+ C3 K4 G$ c( T0 \

. i/ f: B% E/ i$ A# sclass PORT{1 R/ h/ ~9 b! _
        public:
5 H  _  d4 V* @- ]/ [' U                        GPIO_TypeDef* GPIO;
, E; d( d% P1 d                        uint16_t                        Pin;
+ m# F4 t1 ]7 F, f, r                        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);
0 k+ N) \; i1 a" Y4 l% J2 ^9 B0 R' 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);
# u* {. T+ _! A4 }) |" W                        void setPUPD(GPIOPuPd_TypeDef pupd);  d/ `  Q6 y1 f; N3 ]# C
                        u8 Read();" w  ~: f9 C9 D
                        u8 PortNo;
0 T4 |# [+ Z& M: s. c                        u8 PinNo;# p1 Y/ F1 W0 S5 U, j
                 
, ^4 U" h" V! _5 \: `};7 D4 t" F+ p7 @- j3 _" ~
# z6 n- e/ `8 k$ Q; ^( Y0 o! T

% [0 t( B0 L4 x* M1 h=========gpio.cpp( {# u3 ^0 y! t+ n9 i  n0 H

* t: Z$ E) ?! M  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;
; I* a3 J5 V! Z7 k        if (gpio==GPIOD) PortNo=3;& v2 w/ U% [9 [
        if (gpio==GPIOE) PortNo=4;
/ S7 y2 f  t8 e( l" v        if (gpio==GPIOF) PortNo=5;
# `2 [. Z' }/ G* q# L0 h- V* L       
7 d  J7 ~% }* x# B        GPIO=gpio;- {' w% R  J; d
        Pin=1<<pin;
4 b) F8 ]+ q, J% t3 |: R0 }- |        PinNo=pin*2;
, U7 b+ w& P! Y: Q; Z                * G; _2 e" d5 z+ S/ |
                RCC->AHB1ENR |= 1<<ortNo;
2 o( V+ X% Q! A, O3 B! w1 T6 F                $ g% `- @2 F3 Y7 I5 h: G
                setType(type);
+ R; h' V8 k( y2 c7 P5 u8 \( ?                setMode(mode);, k1 S( M* t" l: x7 y* X9 o8 ]8 I
                setPUPD(pupd);
3 z: P( O$ P: z3 U. _                setSpeed(speed);  |* u, ^  X' W  n4 [- C
        6 O' Z6 r* c7 b. }5 @  K; s
}
: _. Z& o$ z1 W5 J6 g) @' e 3 F. d+ h. @3 u, R1 W
void PORT:ow() {% h7 p3 _, v' T5 v& @
                GPIO->ODR &=~(1<<(PinNo/2));
' Y! V' K( n' A1 H}
$ [+ _6 T# f) r$ y. u4 lvoid PORT::High() {
3 h  u8 I% M( V                GPIO->ODR |=1<<(PinNo/2);( d2 w: \2 p! @
}
" q, @1 R( b7 o, i- C% {7 W* u. v% M5 t1 H+ b: E) v9 u
void PORT::setType(GPIOOType_TypeDef type) {
: A! |( s6 Y9 Y9 ?: |' c& b7 x# z/ L! _                GPIO->OTYPER &=~(1<<(PinNo/2));: i; w4 _. N7 M9 f
                GPIO->OTYPER |=type<<(PinNo/2);
- F5 `! e0 q  \$ _}8 j- y3 J, u2 J, J4 c

1 w/ K1 p) K" t; j4 b) M& cvoid PORT::setSpeed(GPIOSpeed_TypeDef speed) {) D: K- k+ _1 X( B1 ?- u
                GPIO->OSPEEDR &=~(3<<inNo);
) c0 ~; z( B3 J6 I  G. F3 Y$ k    GPIO->OSPEEDR |= (speed << PinNo);; r: d9 I7 q3 x9 r
}
* l  e% W( C# {+ f; |4 j' 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);
  c' `/ d+ @: U! h6 J$ I0 f}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
}
3 Q6 s9 R7 U7 D: _4 R3 m1 d+ G- b- d. ~+ J7 b
==========使用
, B& Q  n' E4 I) O2 F; A
6 I, v6 T& G  P$ k) F; cPORT p(GPIOA,9);
. {8 I# {9 V' `6 ip.Low();低电平,p.High();高电平 p.Read();读取
收藏 评论0 发布时间:2019-8-16 16:09

举报

0个回答

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版