STM32F4 C++ 封装库 之 GPIO

本文介绍了一种使用C++对STM32F4的GPIO进行封装的方法,基于官方ll库,旨在提供良好的移植性。作者分享了stm32f4xx_xgpio.h和stm32f4xx_xgpio.cpp文件,并提供了例程和归档链接。
摘要由CSDN通过智能技术生成

STM32F4 C++ 封装库 之 GPIO

       一直有一个想法就是用 C++ 去做 STM32 的开发,但是很少有这方面的资料。经过一段时间的思考,决定在官方的 ll 库的基础上做一层 C++ 的简单封装。因为官方的库基本实现了全系列的 MCU 都是相同的 API 接口,所以 C++ 封装后的库也有很好的移植性。原理性的东西就不讲理了,直接上代码。


stm32f4xx_xgpio.h 文件

/**
  ******************************************************************************
  * \file    stm32f4xx_xgpio.h
  * \author  XinLi
  * \version v1.0
  * \date    20-March-2018
  * \brief   Header file for general purpose I/O module.
  ******************************************************************************
  * \attention
  *
  * <h2><center>Copyright &copy; 2018 XinLi</center></h2>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation, either version 3 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  *
  ******************************************************************************
  */

#ifndef STM32F4XX_XGPIO_H
#define STM32F4XX_XGPIO_H

#include <stdint.h>
#include "stm32f4xx_ll_gpio.h"

/*! General purpose I/O module. */
class XGpio
{
public:
  /*! Enumerate GPIO ports. */
  enum GpioPort
  {
    PortA = (uint32_t)GPIOA, /*!< GPIO port A. */
    PortB = (uint32_t)GPIOB, /*!< GPIO port B. */
    PortC = (uint32_t)GPIOC, /*!< GPIO port C. */
  #ifdef GPIOD
    PortD = (uint32_t)GPIOD, /*!< GPIO port D. */
  #endif // GPIOD
  #ifdef GPIOE
    PortE = (uint32_t)GPIOE, /*!< GPIO port E. */
  #endif // GPIOE
  #ifdef GPIOF
    PortF = (uint32_t)GPIOF, /*!< GPIO port F. */
  #endif // GPIOF
  #ifdef GPIOG
    PortG = (uint32_t)GPIOG, /*!< GPIO port G. */
  #endif // GPIOG
  #ifdef GPIOH
    PortH = (uint32_t)GPIOH, /*!< GPIO port H. */
  #endif // GPIOH
  #ifdef GPIOI
    PortI = (uint32_t)GPIOI, /*!< GPIO port I. */
  #endif // GPIOI
  #ifdef GPIOJ
    PortJ = (uint32_t)GPIOJ, /*!< GPIO port J. */
  #endif // GPIOJ
  #ifdef GPIOK
    PortK = (uint32_t)GPIOK, /*!< GPIO port K. */
  #endif // GPIOK
  };
  
  /*! Enumeration of GPIO pins. */
  enum GpioPin
  {
    Pin0  = LL_GPIO_PIN_0,  /*!< GPIO pin 0. */
    Pin1  = LL_GPIO_PIN_1,  /*!< GPIO pin 1. */
    Pin2  = LL_GPIO_PIN_2,  /*!< GPIO pin 2. */
    Pin3  = LL_GPIO_PIN_3,  /*!< GPIO pin 3. */
    Pin4  = LL_GPIO_PIN_4,  /*!< GPIO pin 4. */
    Pin5  = LL_GPIO_PIN_5,  /*!< GPIO pin 5. */
    Pin6  = LL_GPIO_PIN_6,  /*!< GPIO pin 6. */
    Pin7  = LL_GPIO_PIN_7,  /*!< GPIO pin 7. */
    Pin8  = LL_GPIO_PIN_8,  /*!< GPIO pin 8. */
    Pin9  = LL_GPIO_PIN_9,  /*!< GPIO pin 9. */
    Pin10 = LL_GPIO_PIN_10, /*!< GPIO pin 10. */
    Pin11 = LL_GPIO_PIN_11, /*!< GPIO pin 11. */
    Pin12 = LL_GPIO_PIN_12, /*!< GPIO pin 12. */
    Pin13 = LL_GPIO_PIN_13, /*!< GPIO pin 13. */
    Pin14 = LL_GPIO_PIN_14, /*!< GPIO pin 14. */
    Pin15 = LL_GPIO_PIN_15, /*!< GPIO pin 15. */
  };
  
  /*! Enumeration of GPIO modes. */
  enum GpioMode
  {
    ModeInput     = LL_GPIO_MODE_INPUT,     /*!< GPIO input mode. */
    ModeOutput    = LL_GPIO_MODE_OUTPUT,    /*!< GPIO output mode. */
    ModeAlternate = LL_GPIO_MODE_ALTERNATE, /*!< GPIO alternate function mode. */
    ModeAnalog    = LL_GPIO_MODE_ANALOG,    /*!< GPIO analog mode. */
  };
  
  /*! Enumeration of GPIO output types. */
  enum GpioOutput
  {
    OutputPushPull  = LL_GPIO_OUTPUT_PUSHPULL,  /*!< GPIO push-pull output. */
    OutputOpenDrain = LL_GPIO_OUTPUT_OPENDRAIN, /*!< GPIO open-drain output. */
  };
  
  /*! Enumeration of GPIO output speeds. */
  enum GpioSpeed
  {
    SpeedLow      = LL_GPIO_SPEED_FREQ_LOW,       /*!< GPIO low output speed. */
    SpeedMedium   = LL_GPIO_SPEED_FREQ_MEDIUM,    /*!< GPIO medium output speed. */
    SpeedHigh     = LL_GPIO_SPEED_FREQ_HIGH,      /*!< GPIO high output speed. */
    SpeedVeryHigh = LL_GPIO_SPEED_FREQ_VERY_HIGH, /*!< GPIO very high output speed. */
  };
  
  /*! Enumeration of GPIO pull-up/pull-down. */
  enum GpioPull
  {
    PullNo   = LL_GPIO_PULL_NO,   /*!< GPIO no pull. */
    PullUp   = LL_GPIO_PULL_UP,   /*!< GPIO pull-up. */
    PullDown = LL_GPIO_PULL_DOWN, /*!< GPIO pull-down. */
  };
  
  /*! Enumeration of GPIO alternate functions. */
  enum GpioAlternate
  {
    Alternate0  = LL_GPIO_AF_0,  /*!< GPIO alternate function 0. */
    Alternate1  = LL_GPIO_AF_1,  /*!< GPIO alternate function 1. */
    Alternate2  = LL_GPIO_AF_2,  /*!< GPIO alternate function 2. */
    Alternate3  = LL_GPIO_AF_3,  /*!< GPIO alternate function 3. */
    Alternate4  = LL_GPIO_AF_4,  /*!< GPIO alternate function 4. */
    Alternate5  = LL_GPIO_AF_5,  /*!< GPIO alternate function 5. */
    Alternate6  = LL_GPIO_AF_6,  /*!< GPIO alternate function 6. */
    Alternate7  = LL_GPIO_AF_7,  /*!< GPIO alternate function 7. */
    Alternate8  = LL_GPIO_AF_8,  /*!< GPIO alternate function 8. */
    Alternate9  = LL_GPIO_AF_9,  /*!< GPIO alternate function 9. */
    Alternate10 = LL_GPIO_AF_10, /*!< GPIO alternate function 10. */
    Alternate11 = LL_GPIO_AF_11, /*!< GPIO alternate function 11. */
    Alternate12 = LL_GPIO_AF_12, /*!< GPIO a
STMicroelectronics STM32 F4全系列PROTEL 99SE 原理图库+PCB封装库文件: 'Library Component Count : 135 Name Description ---------------------------------------------------------------------------------------------------- STM32F401CBU6 ARM Cortex-M4 32-bit MCU+FPU, 105 DMIPS, 128 kB Flash, 64 kB Internal RAM, 36 I/Os, 48-pin UFQFPN, -40 to 85 degC, Tray STM32F401CBY6 ARM Cortex-M4 32-bit MCU+FPU, 105 DMIPS, 128 kB Flash, 64 kB Internal RAM, 36 I/Os, 49-pin WLCSP, -40 to 85 degC STM32F401CBY6TR ARM Cortex-M4 32-bit MCU+FPU, 105 DMIPS, 128 kB Flash, 64 kB Internal RAM, 36 I/Os, 49-pin WLCSP, -40 to 85 degC, Tape and Reel STM32F401CCU6 ARM Cortex-M4 32-bit MCU+FPU, 105 DMIPS, 256 kB Flash, 64 kB Internal RAM, 36 I/Os, 48-pin UFQFPN, -40 to 85 degC, Tray STM32F401CCY6TR ARM Cortex-M4 32-bit MCU+FPU, 105 DMIPS, 256 kB Flash, 64 kB Internal RAM, 36 I/Os, 49-pin WLCSP, -40 to 85 degC, Tape and Reel STM32F401RBT6 ARM Cortex-M4 32-bit MCU+FPU, 105 DMIPS, 128 kB Flash, 64 kB Internal RAM, 48 I/Os, 64-pin LQFP, -40 to 85 degC, Tray STM32F401RCT6 ARM Cortex-M4 32-bit MCU+FPU, 105 DMIPS, 256 kB Flash, 64 kB Internal RAM, 48 I/Os, 64-pin LQFP, -40 to 85 degC, Tray STM32F401RCT6U ARM Cortex-M4 32-bit MCU+FPU, 105 DMIPS, 256 kB Flash, 64 kB Internal RAM, 48 I/Os, 64-pin LQFP, -40 to 85 degC, Tray STM32F401VBT6 ARM Cortex-M4 32-bit MCU+FPU, 105 DMIPS, 128 kB Flash, 64 kB Internal RAM, 79 I/Os, 100-pin LQFP, -40 to 85 degC, Tray STM32F401VCT6 ARM Cortex-M4 32-bit MCU+FPU, 105 DMIPS, 256 kB Flash, 64 kB Internal RAM, 79 I/Os, 100-pin LQFP, -40 to 85 degC, Tray STM32F401VCT6U ARM Cortex-M4 32-bit MCU+FPU, 105 DMIPS, 256 kB Flash, 64 kB Internal RAM, 79 I/Os, 100-pin LQFP, -40 to 85 degC, Tray STM32F405OE ARM Cortex-M4 32-bit MCU+FPU, 210 DMIPS, 512 kB Flash, 192 kB Internal RAM, 72 I/Os, 90-pin WLCSP STM32F405OEY6TR ARM Cortex-M4 32-bit MCU+FPU, 210 DMIPS, 512 kB Flash, 192 kB Internal RAM, 72 I/Os, 90-pin WLCSP,
STM32F4系列芯片AltiumDesigner原理图库封装库。系列:一大堆。 具体型号列表如下: STM32F401CBU6 STM32F401CBY6 STM32F401CBY6TR STM32F401CCU6 STM32F401CCY6TR STM32F401RBT6 STM32F401RCT6 STM32F401RCT6U STM32F401VBT6 STM32F401VCT6 STM32F401VCT6U STM32F405OE STM32F405OEY6TR STM32F405OG STM32F405OGY6TR STM32F405OGY6VTR STM32F405OGY6WTR STM32F405RGT6 STM32F405RGT6U STM32F405RGT6V STM32F405RGT6W STM32F405RGT7 STM32F405RGT7TR STM32F405VGT6 STM32F405VGT6J STM32F405VGT6V STM32F405VGT6W STM32F405VGT7 STM32F405ZGT6 STM32F405ZGT6J STM32F405ZGT6V STM32F405ZGT6W STM32F405ZGT7 STM32F407IEH6 STM32F407IET6 STM32F407IGH6 STM32F407IGH6J STM32F407IGH6U STM32F407IGH7 STM32F407IGT6 STM32F407IGT6U STM32F407VET6 STM32F407VGT6 STM32F407VGT6J STM32F407VGT6TR STM32F407VGT6U STM32F407VGT7 STM32F407ZET6 STM32F407ZET7 STM32F407ZGT6 STM32F407ZGT6J STM32F407ZGT6U STM32F407ZGT7 STM32F415OG STM32F415OGY6TR STM32F415RGT6 STM32F415VGT6 STM32F415VGT6TR STM32F415ZGT6 STM32F417IEH6 STM32F417IET6 STM32F417IGH6 STM32F417IGH6U STM32F417IGH6W STM32F417IGT6 STM32F417IGT7 STM32F417VET6 STM32F417VET6TR STM32F417VGT6 STM32F417ZET6 STM32F417ZGT6 STM32F427IGH6 STM32F427IGT6 STM32F427IIH6 STM32F427IIH7 STM32F427IIT6 STM32F427VGT6 STM32F427VIT6 STM32F427VIT7TR STM32F427ZGT6 STM32F427ZIT6 STM32F429BGT6 STM32F429BIT6 STM32F429BIT6U STM32F429IGH6 STM32F429IGT6 STM32F429IIH6 STM32F429IIH6TR STM32F429IIH6U STM32F429IIT6 STM32F429IIT6U STM32F429NGH6 STM32F429NIH6 STM32F429NIH6U STM32F429VGT6 STM32F429VIT6 STM32F429VIT6U STM32F429ZGT6 STM32F429ZGY6 STM32F429ZIT6 STM32F429ZIT6U STM32F429ZIY6UTR STM32F437IGH6 STM32F437IGT6 STM32F437IIH6 STM32F437IIH6TR STM32F437IIT6 STM32F437VGT6 STM32F437VIT6 STM32F437VIT7TR STM32F437ZGT6 STM32F437ZIT6 STM32F437ZIT7 STM32F439BGT6 STM32F439BIT6 STM32F439BIT6U STM32F439IGH6 STM32F439IGT6 STM32F439IIH6 STM32F439IIH6TR STM32F439IIH6U STM32F439IIT6 STM32F439IIT6U STM32F439NGH6 STM32F439NIH6 STM32F439NIH6U STM32F439VGT6 STM32F439VIT6 STM32F439VIT6U STM32F439ZGT6 STM32F439ZGY6 STM32F439ZIT6 STM32F439ZIT6U STM32F439ZIY6TR
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值