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

c++封装类GPIO

[复制链接]
wecreate 发布时间:2019-8-16 16:09
f407vet6的  q( G  X+ A9 f/ F& X
自己以前写的,发布出来,希望有什么问题,大家可以指证出来,我好完善程序。6 w5 i' u. l0 j4 z7 x
=========gpio.h
# _3 r, }7 \8 ~- C# E, J) E$ U: Q6 n1 P- p/ {5 G& b
class PORT{6 z+ D  m4 ]( k: n9 _& G
        public:
' h7 K, d- _+ b7 s                        GPIO_TypeDef* GPIO;  y7 K4 d+ v) |8 `
                        uint16_t                        Pin;
: D2 F' w$ S* p/ q4 D                        PORT();& t/ W1 q9 s% D# Q  Q; k
                        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);
; t) l' D4 [9 x9 x9 g; D7 ^
1 Q$ Y! Q8 Z% p                        void Low();$ A: C9 Y# ]1 m6 V
                        void High();" o! l: u" r/ b5 i5 u
                        void setMode(GPIOMode_TypeDef mode);
- k- `" c7 I7 k% |6 s; x                        void setType(GPIOOType_TypeDef type);! M: E  q, e! Z; Y. q5 ]/ V
                        void setSpeed(GPIOSpeed_TypeDef speed);/ }1 k# G5 ^4 U9 e# j% z3 {% \" d
                        void setPUPD(GPIOPuPd_TypeDef pupd);
- G5 L; s- I+ G9 L& }                        u8 Read();' k, r' _+ M0 X* n$ f3 e
                        u8 PortNo;9 J3 {0 l, Q; w; Q% P4 q
                        u8 PinNo;
3 ]- b0 R& R  u; q$ U0 `                 " X$ A4 L6 e5 w, v
};# {% e7 Y9 U1 N" p% v" ^8 h8 E

; x  ?# A& z6 {, m4 H; \9 C
3 q* ]; @: Z5 `! K0 e" W, Y4 E* J+ ]=========gpio.cpp% p4 @5 T- h* ]- D1 K

( |! a: h8 \. V9 M* E  s# p) D
9 I% E9 z7 r# p" ~2 I2 L$ FPORT:ORT(){};  G1 n; ]# A2 d* E: h
PORT:ORT(GPIO_TypeDef* gpio,u8 pin,GPIOMode_TypeDef mode,GPIOOType_TypeDef type,GPIOPuPd_TypeDef pupd,GPIOSpeed_TypeDef speed){9 p% ?9 z- b& M
        if (gpio==GPIOA) PortNo=0;* V' j, t) W9 a; Z: o* V9 G
        if (gpio==GPIOB) PortNo=1;
" o6 n* M: s# L$ \. C1 ?        if (gpio==GPIOC) PortNo=2;
' }3 r% j8 M7 }4 A- Z# T* `        if (gpio==GPIOD) PortNo=3;
& p8 ?1 ^- c7 R& H: W' O5 z        if (gpio==GPIOE) PortNo=4;
& t) f4 P4 ~0 N3 q        if (gpio==GPIOF) PortNo=5;; `& s" i7 |  |* }7 r; e
       
1 m/ |7 g6 @4 W        GPIO=gpio;* x( _+ ^/ M+ y3 `. i5 t0 @, k1 u
        Pin=1<<pin;
4 \3 `! b9 ~1 A; P) A; a        PinNo=pin*2;
6 ~$ r; `2 p5 x/ {               
: A$ J+ t& V9 I                RCC->AHB1ENR |= 1<<ortNo;
/ K% j! Z8 [$ ?0 l# F% x                . ~1 O1 [0 Q6 O2 [9 s
                setType(type);  h) U% L& c8 V1 G- g" H+ b5 R
                setMode(mode);# W% X3 o/ f4 i" }% {8 Y1 s# b6 o
                setPUPD(pupd);: R' {+ P! v9 P$ Q
                setSpeed(speed);
7 B* S( S$ |+ W' ^! }; A  O        1 b- a: c. i7 C% u
}1 ]. u2 T0 ]8 k

* E/ m) Y3 |1 l5 b; `* B4 tvoid PORT:ow() {
7 _  w: g" t5 M8 F6 `                GPIO->ODR &=~(1<<(PinNo/2));+ O) i* h- m5 j8 \' P2 v7 t, z3 v
}) s8 @7 R: h* L8 V3 f% @# }
void PORT::High() {5 Z2 ~- I+ l3 Z0 T( A, {
                GPIO->ODR |=1<<(PinNo/2);3 Z6 C3 e. S2 r  U7 m. F' O7 T
}; x: ^; f. j+ D6 L! R
( k+ g" \$ }5 P7 G. M
void PORT::setType(GPIOOType_TypeDef type) {' j% G4 n" c% j8 k$ c
                GPIO->OTYPER &=~(1<<(PinNo/2));( m) l* G% _( `
                GPIO->OTYPER |=type<<(PinNo/2);
0 ]' m( h) m( `}. G5 `2 n/ M( |- w
1 l$ E" N( @  H# K8 a* k6 Y* D
void PORT::setSpeed(GPIOSpeed_TypeDef speed) {
& F1 y7 L* m! o! [- k$ A: z                GPIO->OSPEEDR &=~(3<<inNo);
& [) x* A; i9 A    GPIO->OSPEEDR |= (speed << PinNo);
; s7 t) w. U% J6 v, X) q: `3 Y& ?& t! }}
( a- |4 Y! B5 d+ S+ c' o2 d
/ P7 f* T8 Y( |2 c5 o9 K2 Vvoid PORT::setPUPD(GPIOPuPd_TypeDef pupd) {
; H6 V/ ?" e& a4 r2 J                GPIO->UPDR &=~(3<<inNo);$ a/ E" D$ y* }, m# v; e0 l
    GPIO->UPDR |= (pupd << PinNo);
# j7 e6 r# R. Q/ g6 \+ u2 M}- ?2 y# D3 z! m) x8 a
void PORT::setMode(GPIOMode_TypeDef mode) {9 E$ k7 f' }3 l
                GPIO->MODER &= ~(3<<inNo);0 |. W4 g- c! {
    GPIO->MODER |= (mode << PinNo);5 e$ v( M9 c: i" Z
}. E4 ^' ~4 Y& r( S" U4 Y1 @6 M
u8 PORT::Read() {
( }+ S3 |/ _6 E  x- O6 B9 ?                return GPIO_ReadInputDataBit(GPIO,Pin);
' P# I* U8 Z0 Y/ q/ l9 |9 G6 e" r}& ?8 W; d9 y1 a/ r6 |7 A6 J% ]
4 m( i# w  F) s; M' I
==========使用
6 a% r0 j- k* W2 `  O8 I* O! Q" K9 y
( R) _! v4 b! n  R+ vPORT p(GPIOA,9);
. b9 U& F* o5 H* J$ R$ @p.Low();低电平,p.High();高电平 p.Read();读取
收藏 评论0 发布时间:2019-8-16 16:09

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版