STM32F103 GPIO面向对象变成实例

  创建一个GPIO对象

GpioClass gStateLed = NEW_GPIO(C, 0, GPIO_Mode_Out_PP);

  初始化对象

GpioConfig(&gStateLed);

  使用对象

GPIO_TOGGLE(gStateLed);

  

Gpio.c

/******************** (C) COPYRIGHT 2017  ***********************************
File name:
Description:
Author: duking
Version: 1.0.0
Date: 2017.2.4
History:
*****************************************************************************/
#include "Gpio.h" /*******************************************************************************
* Function Name :
* Description :
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void GpioConfig(GpioClass* gpio)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(gpio->rcc_mask, ENABLE); GPIO_InitStructure.GPIO_Pin = gpio->pin;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = gpio->mode; GPIO_Init(gpio->port, &GPIO_InitStructure);
} /*******************************************************************************
* Function Name :
* Description :
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void GpioListConfig(GpioClass* gpio_list, uint8_t len)
{
for(int i = 0; i < len; i ++){
GpioConfig(&(gpio_list[i]));
}
} /*******************************************************************************
* Function Name :
* Description :
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void GpioConfigLowSpeed(GpioClass* gpio)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(gpio->rcc_mask, ENABLE); GPIO_InitStructure.GPIO_Pin = gpio->pin;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = gpio->mode; GPIO_Init(gpio->port, &GPIO_InitStructure);
} /******************* (C) COPYRIGHT 2017 *******END OF FILE********************/

  Gpio.h

/******************** (C) COPYRIGHT 2017  ***********************************
File name:
Description:
Author: duking
Version: 1.0.0
Date: 2017.2.4
History:
*****************************************************************************/
#ifndef CONFIG_GPIO_H_
#define CONFIG_GPIO_H_ #include "stm32f10x.h" #ifdef __cplusplus
extern "C" {
#endif typedef struct
{
GPIO_TypeDef* port;
uint16_t pin;
uint32_t rcc_mask;
GPIOMode_TypeDef mode;
} GpioClass; #define NEW_GPIO(port_, pin_, mode_) { \
.port = GPIO##port_, \
.pin = GPIO_Pin_##pin_, \
.rcc_mask = RCC_APB2Periph_GPIO##port_, \
.mode = mode_ \
} #define NEW_GPIO_NOMODE(port_, pin_) { \
.port = GPIO##port_, \
.pin = GPIO_Pin_##pin_, \
.rcc_mask = RCC_APB2Periph_GPIO##port_ \
} void GpioConfig(GpioClass* gpio);
void GpioListConfig(GpioClass* gpio_list, uint8_t len);
void GpioConfigLowSpeed(GpioClass* gpio); #define GPIO_NO_REMAP (uint32_t)-1 #define GPIO_SET(GPIO) GPIO_WriteBit((GPIO).port, (GPIO).pin, Bit_SET)
#define GPIO_RESET(GPIO) GPIO_WriteBit((GPIO).port, (GPIO).pin, Bit_RESET)
#define GPIO_TOGGLE(GPIO) GPIO_WriteBit((GPIO).port, (GPIO).pin, (BitAction)!GPIO_ReadOutputDataBit((GPIO).port, (GPIO).pin))
#define GPIO_READ(GPIO) GPIO_ReadInputDataBit((GPIO).port, (GPIO).pin) #ifdef __cplusplus
}
#endif #endif
/******************* (C) COPYRIGHT 2017 *******END OF FILE********************/

  

Stm32F103面向对象编程之GPIO的更多相关文章

  1. PHP面向对象编程之深入理解方法重载与方法覆盖(多态)

    这篇文章主要介绍了PHP面向对象编程之深入理解方法重载与方法覆盖(多态)的相关资料,需要的朋友可以参考下: 什么是多态? 多态(Polymorphism)按字面的意思就是"多种状态" ...

  2. 深入理解JavaScript系列(17):面向对象编程之概论

    介绍 在本篇文章,我们考虑在ECMAScript中的面向对象编程的各个方面(虽然以前在许多文章中已经讨论过这个话题).我们将更多地从理论方面看这些问题. 特别是,我们会考虑对象的创建算法,对象(包括基 ...

  3. python基础-面向对象编程之继承

    面向对象编程之继承 继承的定义:是一种新建类的方式,新建的类称之为子类或派生类,被继承的父类称之为基类或超类 继承的作用:子类会""遗传"父类的属性,从而解决代码重用问题 ...

  4. python基础-面向对象编程之封装、访问限制机制和property

    面向对象编程之封装 封装 定义:将属性和方法一股脑的封装到对象中,使对象可通过"对象."的方式获取或存储数据. 作用:让对象有了"."的机制,存取数据更加方便 ...

  5. python基础-面向对象编程之反射

    面向对象编程之反射 反射 定义:通过字符串对对象的属性和方法进行操作. 反射有4个方法,都是python内置的,分别是: hasattr(obj,name:str) 通过"字符串" ...

  6. python基础-面向对象编程之多态

    面向对象编程之多态以及继承.抽象类和鸭子类型三种表现形式 多态 定义:同一种类型的事物,不同的形态 作用: 多态也称之为"多态性".用于在不知道对象具体类型的情况下,统一对象调用方 ...

  7. python基础-面向对象编程之组合

    面向对象编程之组合 定义:一个对象中拥有另一个或其他多个对象的属性和方法. 作用:减少代码的冗余,降低耦合度 关于耦合度的说明 耦合:通俗地讲,就是相互作用,相互影响的意思 耦合度越高,程序的可扩展性 ...

  8. 迅为4412开发板Linux驱动教程之GPIO的初始化

    视频下载地址:http://pan.baidu.com/s/1c06oiti GPIO的初始化 • 在内核源码目录下使用命令“ls drivers/gpio/*.o”,可以看到“gpio-exynos ...

  9. 如果你也会C#,那不妨了解下F#(7):面向对象编程之继承、接口和泛型

    前言 面向对象三大基本特性:封装.继承.多态.上一篇中介绍了类的定义,下面就了解下F#中继承和多态的使用吧.

随机推荐

  1. linux devcie lspci,lscpu,blkdiscard,fstrim,parted,partprobe,smartctl

    blkdiscard/sparse/thin-provisioned device,like ssdfstrim--- discard unused blocks on a mounted files ...

  2. ICO成本价

    [当前ICO成本价]仅供参考:ICOcoin 成本价1元SNT 成本价0.26元UGT 成本价2.7元PAY 成本价6元OMG 成本价2.6元YOYO 成本价 0.17元BNT 成本价26元BAT 成 ...

  3. Myeclipse更新SVNStatusSubscriber 时报告了错误。1 中的 0 个资源已经同步。

    1.先确认SVN服务是否能连接,或权限. 方法:在项目目录下右键选择repo-browser 能打开就表示正常. 2.同样在项目目录下选择cleaup 选择下面3个选项 clean up workin ...

  4. Spark Standalone Mode 单机启动Spark -- 分布式计算系统spark学习(一)

    spark是个啥? Spark是一个通用的并行计算框架,由UCBerkeley的AMP实验室开发. Spark和Hadoop有什么不同呢? Spark是基于map reduce算法实现的分布式计算,拥 ...

  5. 阿里云部署 Flask + uWSGI + Nginx

    一.引言 今天入手了一台阿里云服务器,是centeros 7.5版本.本文解决的是 Flask 的部署问题.假设你的Flask的应用已经完成,现在只是部署的问题,本文以部署我的二次开发微信订阅号的项目 ...

  6. java组件学习15天

    Linuxdocker redminegitlabnginxmavenkibanakafkaspringspring cloudLucene 搭建基本使用

  7. IDEA中打包Spark项目提示Error:(16, 48) java: -source 1.5 中不支持 lambda 表达式

    在idea中新建了一Spark的项目,在做项目的编译打包的时候,提示如下错误信息: Error:(, ) java: -source 1.5 中不支持 lambda 表达式 (请使用 -source ...

  8. Spark Streaming Checkpoint反序列化问题分析

    转载自:https://mp.weixin.qq.com/s/EQgDUSf3TK0oVg1xmg-49Q Checkpoint是Spark Streaming中的核心机制,它为应用程序的7*24小时 ...

  9. 最长上升子序列算法(n^2 及 nlogn) (LIS) POJ2533Longest Ordered Subsequence

    问题描述: 一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的.对于给定的一个序列(a1, a2, ..., aN),我们可以得到一些上升的子序列 ...

  10. EventFiringWebDriver网页事件监听(一)

    Selenium提供了很多的event listening functions来跟踪脚本执行过程中的events. How it works? 在注册了listener的webDriver里面,这些l ...