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

c++封装类GPIO

[复制链接]
wecreate 发布时间:2019-8-16 16:09
f407vet6的
2 t# Z) y6 u. \) b; U, z* D, V/ d) a自己以前写的,发布出来,希望有什么问题,大家可以指证出来,我好完善程序。
' W8 O9 J% v# m3 `  T1 k$ F& I=========gpio.h1 f1 k9 r3 b+ ]3 e
* H% E$ p6 ^- t
class PORT{4 ^5 u- C( |! `; M1 |1 C' ^7 v
        public:
6 k& ?( }+ F& F3 T6 }8 \7 P5 p                        GPIO_TypeDef* GPIO;
0 X  r! \9 s6 [                        uint16_t                        Pin;
+ X& Y+ P$ x$ A. k( j                        PORT();
& a0 M1 P! y8 {! q& L0 ^: Y                        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);
) Q/ o; v0 j( {% N( X! W: z$ |( j' P2 K8 v
                        void Low();
: @6 [, a. W9 M                        void High();
& F3 R6 Q. F& @! T, k, B                        void setMode(GPIOMode_TypeDef mode);3 ?5 f9 v$ y' J4 I' W8 I
                        void setType(GPIOOType_TypeDef type);% Q+ u( V) M& H) }
                        void setSpeed(GPIOSpeed_TypeDef speed);. l/ l% L$ N) S8 y) s7 \
                        void setPUPD(GPIOPuPd_TypeDef pupd);! {# ]; g! {. c. J; R  r. Q
                        u8 Read();/ B. Q% [8 a" x+ i4 _- F5 E4 i8 ]
                        u8 PortNo;& r& A. u: H1 ~4 H% x9 s7 d
                        u8 PinNo;
9 e) j$ t" s; N% u                 - ~- _7 Q3 b. A3 i7 r
};: j9 P+ K% z8 r5 o4 X# ?, m- D5 D
6 v, y5 ^4 I, l$ U5 G5 b6 w9 u
, ~2 i! n  m% E) H& E3 N$ C+ W8 p
=========gpio.cpp) D0 G1 e( n( B! v, N
- d- k0 c2 ~# V7 L5 y
$ K! G, I8 p8 \: b0 z2 ^
PORT:ORT(){};
  v  M* a$ A  PPORT:ORT(GPIO_TypeDef* gpio,u8 pin,GPIOMode_TypeDef mode,GPIOOType_TypeDef type,GPIOPuPd_TypeDef pupd,GPIOSpeed_TypeDef speed){0 B% _7 i/ h8 @+ {% o
        if (gpio==GPIOA) PortNo=0;. A" ]) D3 Z" ]4 k& q( M* ~
        if (gpio==GPIOB) PortNo=1;
3 E& Q" R; G) C0 T, s        if (gpio==GPIOC) PortNo=2;
7 M" m$ a- V9 p6 P6 A        if (gpio==GPIOD) PortNo=3;+ e7 L& L5 j* ~) F9 ?
        if (gpio==GPIOE) PortNo=4;$ c) e  e# z: ?+ `
        if (gpio==GPIOF) PortNo=5;
  I. J7 f  i& H' S9 p" P       
- [9 c, L& A# E/ g        GPIO=gpio;
/ \6 w9 k/ i1 w        Pin=1<<pin;
; E. {$ o2 F6 e4 g        PinNo=pin*2;
8 v. Y/ r: C& o' w7 E* C                8 D& `- j7 Q7 }
                RCC->AHB1ENR |= 1<<ortNo;6 h& g- G0 N# R: R
               
# U4 m  @8 O4 I3 N3 `                setType(type);
- h, E# ~. a% q( j$ ?) ^  `                setMode(mode);4 {! c) e( ^7 j1 f$ t
                setPUPD(pupd);
& I' N+ E9 S" L  u- a+ X                setSpeed(speed);
- m4 K6 |9 w6 O! u" F9 c        " _2 a0 q( p8 b, z$ g! ?4 h" k
}
* a+ d5 h6 Z" H3 R$ N% j7 N7 f 7 }% G1 _) z, t
void PORT:ow() {% L0 v  y" {3 g3 _6 s1 X1 R
                GPIO->ODR &=~(1<<(PinNo/2));- }+ Q: ^( |( g9 f! F# W0 W7 P
}
4 k5 r2 X& [" k& g2 M: P) y1 J. g3 Mvoid PORT::High() {, ~8 @% v' b! D  a$ i
                GPIO->ODR |=1<<(PinNo/2);
3 d- W% t- {! v- D}
) U$ _/ K/ T  R4 d% H. d% H. L$ Q( B) e$ a( d! x
void PORT::setType(GPIOOType_TypeDef type) {) N* O2 P& s) d8 T, N) i
                GPIO->OTYPER &=~(1<<(PinNo/2));
, Y: H1 Q4 i5 l                GPIO->OTYPER |=type<<(PinNo/2);
3 X8 ~2 ?+ G% Z1 ?}* A! r1 W9 O4 P5 p7 W
0 P( K! G% i" L8 z& M
void PORT::setSpeed(GPIOSpeed_TypeDef speed) {# r) J1 B9 K2 L& U
                GPIO->OSPEEDR &=~(3<<inNo);" D/ \/ ?' O8 H9 D
    GPIO->OSPEEDR |= (speed << PinNo);5 ^0 ]( H$ G" `9 k2 J5 V* {& H
}% G/ D* L6 _6 s* d- i
" }# [1 Q: B4 L7 R3 d2 o0 i  [
void PORT::setPUPD(GPIOPuPd_TypeDef pupd) {, ~+ G+ \( v9 @+ ^9 \$ M8 c) H9 I
                GPIO->UPDR &=~(3<<inNo);
* J1 u- S. Q5 Z, |# i    GPIO->UPDR |= (pupd << PinNo);
% x% ^, u8 o6 i; r& u; L' M+ t6 c}
, C$ g7 L: u( `, {* s4 cvoid PORT::setMode(GPIOMode_TypeDef mode) {' O0 l" s# I- K6 u1 z% b& J
                GPIO->MODER &= ~(3<<inNo);
; w1 o( p! k, C$ p4 c$ E5 {) {    GPIO->MODER |= (mode << PinNo);
4 {& Q- h  u  B}
, a; _; c; F7 d" }# ?. y6 `/ Ru8 PORT::Read() {
- L9 u# n; A& T; ?5 `1 d- E                return GPIO_ReadInputDataBit(GPIO,Pin);& r  a) K" _4 t3 Y) |. b1 Q' r
}
  V/ {; E- J0 a/ G
% G2 |, x; i7 v& ~6 u& W==========使用
% o1 ]9 Q2 g# n* r7 m" m! P" r  W
PORT p(GPIOA,9);
  v* h" n6 W' r9 f' k' hp.Low();低电平,p.High();高电平 p.Read();读取
收藏 评论0 发布时间:2019-8-16 16:09

举报

0个回答

所属标签

相似分享

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