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

c++封装类GPIO

[复制链接]
wecreate 发布时间:2019-8-16 16:09
f407vet6的" R: I) P6 R  P! {& D, i
自己以前写的,发布出来,希望有什么问题,大家可以指证出来,我好完善程序。  y4 L$ I7 c% R/ s
=========gpio.h
3 h4 _& f+ W3 g' I# [8 W9 m9 B
( Y$ [/ W% f$ j+ S0 lclass PORT{1 t3 F- W# X; E& r4 s
        public:  R6 o! h3 P$ k3 x
                        GPIO_TypeDef* GPIO;7 j- C+ s7 _2 s0 a* d8 O8 w8 `
                        uint16_t                        Pin;/ e3 \3 C$ v( h4 V- D: W; Y
                        PORT();. u4 h8 s! ]8 L
                        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);
5 e1 e7 l- V: V7 g7 q- E; O' s" U7 G) I3 d' l$ P$ E
                        void Low();
" H* K0 {! J  D* |+ `* }; U* F                        void High();7 q$ o! W8 |8 l; i- [2 Q0 n9 ]
                        void setMode(GPIOMode_TypeDef mode);! C7 y: }5 `" F$ c) F8 t0 v
                        void setType(GPIOOType_TypeDef type);
- ?' ]* p) m/ E) j                        void setSpeed(GPIOSpeed_TypeDef speed);" z5 h- J) G" {8 l. W- C
                        void setPUPD(GPIOPuPd_TypeDef pupd);
8 H3 m9 b# W6 \* Y                        u8 Read();
6 u6 M( Q, D. B1 c8 Q5 U, _                        u8 PortNo;: k/ g4 ]( D! l5 j
                        u8 PinNo;. J! e( e8 Q2 P; ?/ b' i
                 
) k2 l2 t( s) q2 |; J7 c  q! n};! z$ n, Q# K) H# L9 D( }, \# I

$ `! B$ P9 Q  N; q" \% t( l; f  u! t$ [3 h
=========gpio.cpp1 L! O  a: s$ g
% h# p8 V% [. q( z! P  N- Y8 b

. Z4 y4 t0 r! k' K" L6 ^4 ?PORT:ORT(){};0 a7 n5 l/ e- _% a" v. |
PORT:ORT(GPIO_TypeDef* gpio,u8 pin,GPIOMode_TypeDef mode,GPIOOType_TypeDef type,GPIOPuPd_TypeDef pupd,GPIOSpeed_TypeDef speed){
* c( U; o) P5 W9 n* i& z        if (gpio==GPIOA) PortNo=0;
4 i. h8 Y& Z7 j3 O# q' U        if (gpio==GPIOB) PortNo=1;# C8 \7 I$ e6 N4 T7 [
        if (gpio==GPIOC) PortNo=2;1 ~- Q5 O" A$ ]7 `) o% U8 t
        if (gpio==GPIOD) PortNo=3;
8 ^3 h( W+ i3 g" v1 d        if (gpio==GPIOE) PortNo=4;; ?: k- \" V. G, w+ K3 w
        if (gpio==GPIOF) PortNo=5;
6 a3 D6 S& Z& {3 t( D& f5 P) U       
* p! o, o1 X  h- ~2 l        GPIO=gpio;
8 c( ?0 d+ U1 ^        Pin=1<<pin;" t2 p9 e0 P: U, V- \; P1 s5 o5 E' Q
        PinNo=pin*2;
$ p9 d8 k2 s$ |                5 v1 }- l4 u5 I8 o
                RCC->AHB1ENR |= 1<<ortNo;9 g" d" s+ Q! q
                6 j2 q9 K  J" j) [4 s4 R8 D0 i1 X! v7 k
                setType(type);! E2 j: O$ k- q6 s* x
                setMode(mode);
: y: D+ P. P3 \9 m* V                setPUPD(pupd);
/ Q1 O- ?# {6 J- i, V                setSpeed(speed);
* b# ~) p' _/ v; i& [* o! {        5 z0 Q* h0 K, a, V" a' ?$ Z
}
9 x* T& c: N4 d( I' c
- H7 ^7 g8 ?/ X' V# A3 Z' `. Qvoid PORT:ow() {
3 f) T1 [) c$ d. _6 l5 B                GPIO->ODR &=~(1<<(PinNo/2));0 {$ I# A! H! N/ w* X# Z" s
}! [! k# E& X9 }$ P  Y
void PORT::High() {
5 F+ R) R( c1 Q1 p: F                GPIO->ODR |=1<<(PinNo/2);
& g) q* l, C3 ?( b}$ j5 ?& g0 l: i4 ]$ y8 I3 q
' u: J* [+ W  q3 ?3 @. M  O
void PORT::setType(GPIOOType_TypeDef type) {" g0 E! p' w+ ?8 }( O9 n4 C
                GPIO->OTYPER &=~(1<<(PinNo/2));' H" t, V/ V7 k7 V8 p- n
                GPIO->OTYPER |=type<<(PinNo/2);" u; E7 a/ @+ z7 ?. O' c. N* y
}% r  T: c8 U0 F) @2 G
1 |2 T0 D% m9 e6 a* x  y
void PORT::setSpeed(GPIOSpeed_TypeDef speed) {
# d9 f. G. J6 }6 t4 \) }& y                GPIO->OSPEEDR &=~(3<<inNo);5 G. w- H' n+ Z' c) i2 P
    GPIO->OSPEEDR |= (speed << PinNo);+ U; M3 R3 e1 H8 p5 h
}2 d" l/ Z8 Q7 z! j
) ^+ W" n7 s$ ], M2 @% v, O
void PORT::setPUPD(GPIOPuPd_TypeDef pupd) {5 g7 W7 W" J2 c( H, O1 M
                GPIO->UPDR &=~(3<<inNo);1 X. f! |* D6 e
    GPIO->UPDR |= (pupd << PinNo);
5 z8 Y- t' a; Q' J4 t7 g9 g}
0 q; \; n! z5 R9 D7 dvoid PORT::setMode(GPIOMode_TypeDef mode) {
, x0 R+ ~$ R5 u1 X) ~- F: D/ _                GPIO->MODER &= ~(3<<inNo);
7 L9 B# N! x: }' a    GPIO->MODER |= (mode << PinNo);
% _" u( F* z% ~, j/ W}
% A0 V$ i# k/ @$ s4 L. xu8 PORT::Read() {: }& z0 ^4 ?. ?5 Y0 f
                return GPIO_ReadInputDataBit(GPIO,Pin);' N0 h3 g4 U+ m- ^+ Q2 ]( G7 P
}
0 U* {% b8 ~- _+ V' \
5 t1 W2 O' t% X$ q' ?* X: Q9 }==========使用' k* M& \) m2 C( J
- y2 l1 L. q) a' G) f
PORT p(GPIOA,9);' T& Q/ [. {( h% |9 C. Y" [! |* Z
p.Low();低电平,p.High();高电平 p.Read();读取
收藏 评论0 发布时间:2019-8-16 16:09

举报

0个回答

所属标签

相似分享

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