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

c++封装类GPIO

[复制链接]
wecreate 发布时间:2019-8-16 16:09
f407vet6的
  z, S1 o3 n. n/ Q& d# _# h  m& \! M自己以前写的,发布出来,希望有什么问题,大家可以指证出来,我好完善程序。& f5 y$ k: n! \, P4 r
=========gpio.h
$ A( a5 B- V8 m5 M! @! [1 W
* G; T4 g* k+ u( Y/ vclass PORT{
0 d( `1 b) V/ a1 B' a% {; u        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);
5 T0 o. n2 S4 s( V% V. p7 E4 y8 {+ 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);
. F( u  r: ^# H( g3 z/ A                        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
                 
- G) R! s9 A0 t! }$ b, K: S% v) N};
$ Z0 @" |; G; v8 H
2 P, A# _, [8 p: I& L% M7 I& I5 `6 i5 c. X  v9 N0 v. O& ]& H6 E
=========gpio.cpp
  ~- V- ^+ X; c/ t% t9 ^( A( M4 _% L' i- G! m; T
+ ^* T) A, m. b4 X
PORT:ORT(){};  x) P, c6 u3 F: }- Q  i
PORT:ORT(GPIO_TypeDef* gpio,u8 pin,GPIOMode_TypeDef mode,GPIOOType_TypeDef type,GPIOPuPd_TypeDef pupd,GPIOSpeed_TypeDef speed){
6 r3 ~: L0 i# a. v& g) y        if (gpio==GPIOA) PortNo=0;
$ ?; \0 a+ C% h. @        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;
# [9 n7 V# A; |* I       
, I! [2 S. R7 f        GPIO=gpio;
" ]5 u- d( e( k0 w        Pin=1<<pin;
+ O* V/ G5 W0 N& B9 y        PinNo=pin*2;0 h. z; S% d  k; X& D; a, F
               
& h+ d' M; ^% B* K  t                RCC->AHB1ENR |= 1<<ortNo;
2 h4 X5 y  ~* [! c2 ?4 ]2 {               
. _/ H. U0 W3 x3 ?7 s! p& U                setType(type);
7 l  X4 T7 U/ _$ G* w1 y( H7 P& v                setMode(mode);
& G, ?+ k4 P' N5 S                setPUPD(pupd);
: l3 H) K9 m: t8 @                setSpeed(speed);
) x1 a/ o% Z  g* f6 ~$ \        7 Q( c& ^  z) `6 E. J7 g1 f
}
; j3 g+ L& {6 [9 Q" a $ R4 A/ k, x8 L! D, g
void PORT:ow() {
. d" P" a6 A) Y/ ?: o                GPIO->ODR &=~(1<<(PinNo/2));$ L2 i/ H/ \# z
}
% m1 x( l) x6 {& ?void PORT::High() {
$ [" p9 M3 H; i                GPIO->ODR |=1<<(PinNo/2);
' v! [7 G+ t+ L# d}% u( r' c. a2 o: d& m

% S4 ?( Z- ^' Evoid 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
}
( a* @2 \3 R3 k5 E8 R6 }: F( ?  D9 n2 {* }5 |# l
void PORT::setSpeed(GPIOSpeed_TypeDef speed) {3 z( B5 ~6 O* u0 \
                GPIO->OSPEEDR &=~(3<<inNo);
- n3 z9 B" Y. w; [( F    GPIO->OSPEEDR |= (speed << PinNo);
' n/ A+ {# U7 Y$ o2 C' z' F}
0 ~9 s6 V+ i& F. H6 E
; X1 |3 r4 Z; _$ o) dvoid PORT::setPUPD(GPIOPuPd_TypeDef pupd) {
7 O# p5 [; g. H" [0 O                GPIO->UPDR &=~(3<<inNo);
3 j5 c! l8 q( r4 w3 j. u    GPIO->UPDR |= (pupd << PinNo);
/ ^; C1 [3 p6 v( v3 V}% I8 ~* R; }. i" B# V7 r; ~
void PORT::setMode(GPIOMode_TypeDef mode) {3 A7 X% _: a* t; r, K4 r
                GPIO->MODER &= ~(3<<inNo);
7 e- P2 h; d# [, z: C- X4 Y6 J4 g    GPIO->MODER |= (mode << PinNo);
. `. ~6 S  c7 }* E$ g/ _}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);
2 q& i- u+ ?  ^2 }}* I% x% F. f, s2 R( n

- F7 H1 z( ^# g' Z8 F==========使用& X: e2 ~/ z& u% ]

$ w: O% H6 r4 Z1 ZPORT p(GPIOA,9);, d) J& k2 ^9 Z3 c( |
p.Low();低电平,p.High();高电平 p.Read();读取
赞 收藏 评论0 发布时间:2019-8-16 16:09

举报

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