源:像51一样操作STM32的IO

//-----------------------------------------------------------------------------------------------------
//别名区 ADDRESS=0x4200 0000 + (0x0001 100C*0x20) + (bitx*4) ;bitx:第x位
// 把“位段地址+位序号”转换别名地址宏
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
//把该地址转换成一个指针
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr)) #define BIT_ADDR(addr, bitnum) MEM_ADDR( BITBAND(addr, bitnum) ) #define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C
#define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C
#define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C
#define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C
#define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C #define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808
#define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08
#define GPIOC_IDR_Addr (GPIOC_BASE+8) //0x40011008
#define GPIOD_IDR_Addr (GPIOD_BASE+8) //0x40011408
#define GPIOE_IDR_Addr (GPIOE_BASE+8) //0x40011808 //-----------------------------------------------------
#define PA0 BIT_ADDR(GPIOA_ODR_Addr, 0) //输出
#define PA1 BIT_ADDR(GPIOA_ODR_Addr, 1) //输出
#define PA2 BIT_ADDR(GPIOA_ODR_Addr, 2) //输出
#define PA3 BIT_ADDR(GPIOA_ODR_Addr, 3) //输出
#define PA4 BIT_ADDR(GPIOA_ODR_Addr, 4) //输出
#define PA5 BIT_ADDR(GPIOA_ODR_Addr, 5) //输出
#define PA6 BIT_ADDR(GPIOA_ODR_Addr, 6) //输出
#define PA7 BIT_ADDR(GPIOA_ODR_Addr, 7) //输出
#define PA8 BIT_ADDR(GPIOA_ODR_Addr, 8) //输出
#define PA9 BIT_ADDR(GPIOA_ODR_Addr, 9) //输出
#define PA10 BIT_ADDR(GPIOA_ODR_Addr, 10) //输出
#define PA11 BIT_ADDR(GPIOA_ODR_Addr, 11) //输出
#define PA12 BIT_ADDR(GPIOA_ODR_Addr, 12) //输出
#define PA13 BIT_ADDR(GPIOA_ODR_Addr, 13) //输出
#define PA14 BIT_ADDR(GPIOA_ODR_Addr, 14) //输出
#define PA15 BIT_ADDR(GPIOA_ODR_Addr, 15) //输出 #define PA0in BIT_ADDR(GPIOA_IDR_Addr, 0) //输入
#define PA1in BIT_ADDR(GPIOA_IDR_Addr, 1) //输入
#define PA2in BIT_ADDR(GPIOA_IDR_Addr, 2) //输入
#define PA3in BIT_ADDR(GPIOA_IDR_Addr, 3) //输入
#define PA4in BIT_ADDR(GPIOA_IDR_Addr, 4) //输入
#define PA5in BIT_ADDR(GPIOA_IDR_Addr, 5) //输入
#define PA6in BIT_ADDR(GPIOA_IDR_Addr, 6) //输入
#define PA7in BIT_ADDR(GPIOA_IDR_Addr, 7) //输入
#define PA8in BIT_ADDR(GPIOA_IDR_Addr, 8) //输入
#define PA9in BIT_ADDR(GPIOA_IDR_Addr, 9) //输入
#define PA10in BIT_ADDR(GPIOA_IDR_Addr, 10) //输入
#define PA11in BIT_ADDR(GPIOA_IDR_Addr, 11) //输入
#define PA12in BIT_ADDR(GPIOA_IDR_Addr, 12) //输入
#define PA13in BIT_ADDR(GPIOA_IDR_Addr, 13) //输入
#define PA14in BIT_ADDR(GPIOA_IDR_Addr, 14) //输入
#define PA15in BIT_ADDR(GPIOA_IDR_Addr, 15) //输入 //-----------------------------------------------------
#define PB0 BIT_ADDR(GPIOB_ODR_Addr, 0) //输出
#define PB1 BIT_ADDR(GPIOB_ODR_Addr, 1) //输出
#define PB2 BIT_ADDR(GPIOB_ODR_Addr, 2) //输出
#define PB3 BIT_ADDR(GPIOB_ODR_Addr, 3) //输出
#define PB4 BIT_ADDR(GPIOB_ODR_Addr, 4) //输出
#define PB5 BIT_ADDR(GPIOB_ODR_Addr, 5) //输出
#define PB6 BIT_ADDR(GPIOB_ODR_Addr, 6) //输出
#define PB7 BIT_ADDR(GPIOB_ODR_Addr, 7) //输出
#define PB8 BIT_ADDR(GPIOB_ODR_Addr, 8) //输出
#define PB9 BIT_ADDR(GPIOB_ODR_Addr, 9) //输出
#define PB10 BIT_ADDR(GPIOB_ODR_Addr, 10) //输出
#define PB11 BIT_ADDR(GPIOB_ODR_Addr, 11) //输出
#define PB12 BIT_ADDR(GPIOB_ODR_Addr, 12) //输出
#define PB13 BIT_ADDR(GPIOB_ODR_Addr, 13) //输出
#define PB14 BIT_ADDR(GPIOB_ODR_Addr, 14) //输出
#define PB15 BIT_ADDR(GPIOB_ODR_Addr, 15) //输出 #define PB0in BIT_ADDR(GPIOB_IDR_Addr, 0) //输入
#define PB1in BIT_ADDR(GPIOB_IDR_Addr, 1) //输入
#define PB2in BIT_ADDR(GPIOB_IDR_Addr, 2) //输入
#define PB3in BIT_ADDR(GPIOB_IDR_Addr, 3) //输入
#define PB4in BIT_ADDR(GPIOB_IDR_Addr, 4) //输入
#define PB5in BIT_ADDR(GPIOB_IDR_Addr, 5) //输入
#define PB6in BIT_ADDR(GPIOB_IDR_Addr, 6) //输入
#define PB7in BIT_ADDR(GPIOB_IDR_Addr, 7) //输入
#define PB8in BIT_ADDR(GPIOB_IDR_Addr, 8) //输入
#define PB9in BIT_ADDR(GPIOB_IDR_Addr, 9) //输入
#define PB10in BIT_ADDR(GPIOB_IDR_Addr, 10) //输入
#define PB11in BIT_ADDR(GPIOB_IDR_Addr, 11) //输入
#define PB12in BIT_ADDR(GPIOB_IDR_Addr, 12) //输入
#define PB13in BIT_ADDR(GPIOB_IDR_Addr, 13) //输入
#define PB14in BIT_ADDR(GPIOB_IDR_Addr, 14) //输入
#define PB15in BIT_ADDR(GPIOB_IDR_Addr, 15) //输入
//----------------------------------------------------
#define PC0 BIT_ADDR(GPIOC_ODR_Addr, 0) //输出
#define PC1 BIT_ADDR(GPIOC_ODR_Addr, 1) //输出
#define PC2 BIT_ADDR(GPIOC_ODR_Addr, 2) //输出
#define PC3 BIT_ADDR(GPIOC_ODR_Addr, 3) //输出
#define PC4 BIT_ADDR(GPIOC_ODR_Addr, 4) //输出
#define PC5 BIT_ADDR(GPIOC_ODR_Addr, 5) //输出
#define PC6 BIT_ADDR(GPIOC_ODR_Addr, 6) //输出
#define PC7 BIT_ADDR(GPIOC_ODR_Addr, 7) //输出
#define PC8 BIT_ADDR(GPIOC_ODR_Addr, 8) //输出
#define PC9 BIT_ADDR(GPIOC_ODR_Addr, 9) //输出
#define PC10 BIT_ADDR(GPIOC_ODR_Addr, 10) //输出
#define PC11 BIT_ADDR(GPIOC_ODR_Addr, 11) //输出
#define PC12 BIT_ADDR(GPIOC_ODR_Addr, 12) //输出
#define PC13 BIT_ADDR(GPIOC_ODR_Addr, 13) //输出
#define PC14 BIT_ADDR(GPIOC_ODR_Addr, 14) //输出
#define PC15 BIT_ADDR(GPIOC_ODR_Addr, 15) //输出 #define PC0in BIT_ADDR(GPIOC_IDR_Addr, 0) //输入
#define PC1in BIT_ADDR(GPIOC_IDR_Addr, 1) //输入
#define PC2in BIT_ADDR(GPIOC_IDR_Addr, 2) //输入
#define PC3in BIT_ADDR(GPIOC_IDR_Addr, 3) //输入
#define PC4in BIT_ADDR(GPIOC_IDR_Addr, 4) //输入
#define PC5in BIT_ADDR(GPIOC_IDR_Addr, 5) //输入
#define PC6in BIT_ADDR(GPIOC_IDR_Addr, 6) //输入
#define PC7in BIT_ADDR(GPIOC_IDR_Addr, 7) //输入
#define PC8in BIT_ADDR(GPIOC_IDR_Addr, 8) //输入
#define PC9in BIT_ADDR(GPIOC_IDR_Addr, 9) //输入
#define PC10in BIT_ADDR(GPIOC_IDR_Addr, 10) //输入
#define PC11in BIT_ADDR(GPIOC_IDR_Addr, 11) //输入
#define PC12in BIT_ADDR(GPIOC_IDR_Addr, 12) //输入
#define PC13in BIT_ADDR(GPIOC_IDR_Addr, 13) //输入
#define PC14in BIT_ADDR(GPIOC_IDR_Addr, 14) //输入
#define PC15in BIT_ADDR(GPIOC_IDR_Addr, 15) //输入 //----------------------------------------------------
#define PD0 BIT_ADDR(GPIOD_ODR_Addr, 0) //输出
#define PD1 BIT_ADDR(GPIOD_ODR_Addr, 1) //输出
#define PD2 BIT_ADDR(GPIOD_ODR_Addr, 2) //输出
#define PD3 BIT_ADDR(GPIOD_ODR_Addr, 3) //输出
#define PD4 BIT_ADDR(GPIOD_ODR_Addr, 4) //输出
#define PD5 BIT_ADDR(GPIOD_ODR_Addr, 5) //输出
#define PD6 BIT_ADDR(GPIOD_ODR_Addr, 6) //输出
#define PD7 BIT_ADDR(GPIOD_ODR_Addr, 7) //输出
#define PD8 BIT_ADDR(GPIOD_ODR_Addr, 8) //输出
#define PD9 BIT_ADDR(GPIOD_ODR_Addr, 9) //输出
#define PD10 BIT_ADDR(GPIOD_ODR_Addr, 10) //输出
#define PD11 BIT_ADDR(GPIOD_ODR_Addr, 11) //输出
#define PD12 BIT_ADDR(GPIOD_ODR_Addr, 12) //输出
#define PD13 BIT_ADDR(GPIOD_ODR_Addr, 13) //输出
#define PD14 BIT_ADDR(GPIOD_ODR_Addr, 14) //输出
#define PD15 BIT_ADDR(GPIOD_ODR_Addr, 15) //输出 #define PD0in BIT_ADDR(GPIOD_IDR_Addr, 0) //输入
#define PD1in BIT_ADDR(GPIOD_IDR_Addr, 1) //输入
#define PD2in BIT_ADDR(GPIOD_IDR_Addr, 2) //输入
#define PD3in BIT_ADDR(GPIOD_IDR_Addr, 3) //输入
#define PD4in BIT_ADDR(GPIOD_IDR_Addr, 4) //输入
#define PD5in BIT_ADDR(GPIOD_IDR_Addr, 5) //输入
#define PD6in BIT_ADDR(GPIOD_IDR_Addr, 6) //输入
#define PD7in BIT_ADDR(GPIOD_IDR_Addr, 7) //输入
#define PD8in BIT_ADDR(GPIOD_IDR_Addr, 8) //输入
#define PD9in BIT_ADDR(GPIOD_IDR_Addr, 9) //输入
#define PD10in BIT_ADDR(GPIOD_IDR_Addr, 10) //输入
#define PD11in BIT_ADDR(GPIOD_IDR_Addr, 11) //输入
#define PD12in BIT_ADDR(GPIOD_IDR_Addr, 12) //输入
#define PD13in BIT_ADDR(GPIOD_IDR_Addr, 13) //输入
#define PD14in BIT_ADDR(GPIOD_IDR_Addr, 14) //输入
#define PD15in BIT_ADDR(GPIOD_IDR_Addr, 15) //输入 //----------------------------------------------------
#define PE0 BIT_ADDR(GPIOE_ODR_Addr, 0) //输出
#define PE1 BIT_ADDR(GPIOE_ODR_Addr, 1) //输出
#define PE2 BIT_ADDR(GPIOE_ODR_Addr, 2) //输出
#define PE3 BIT_ADDR(GPIOE_ODR_Addr, 3) //输出
#define PE4 BIT_ADDR(GPIOE_ODR_Addr, 4) //输出
#define PE5 BIT_ADDR(GPIOE_ODR_Addr, 5) //输出
#define PE6 BIT_ADDR(GPIOE_ODR_Addr, 6) //输出
#define PE7 BIT_ADDR(GPIOE_ODR_Addr, 7) //输出
#define PE8 BIT_ADDR(GPIOE_ODR_Addr, 8) //输出
#define PE9 BIT_ADDR(GPIOE_ODR_Addr, 9) //输出
#define PE10 BIT_ADDR(GPIOE_ODR_Addr, 10) //输出
#define PE11 BIT_ADDR(GPIOE_ODR_Addr, 11) //输出
#define PE12 BIT_ADDR(GPIOE_ODR_Addr, 12) //输出
#define PE13 BIT_ADDR(GPIOE_ODR_Addr, 13) //输出
#define PE14 BIT_ADDR(GPIOE_ODR_Addr, 14) //输出
#define PE15 BIT_ADDR(GPIOE_ODR_Addr, 15) //输出 #define PE0in BIT_ADDR(GPIOE_IDR_Addr, 0) //输入
#define PE1in BIT_ADDR(GPIOE_IDR_Addr, 1) //输入
#define PE2in BIT_ADDR(GPIOE_IDR_Addr, 2) //输入
#define PE3in BIT_ADDR(GPIOE_IDR_Addr, 3) //输入
#define PE4in BIT_ADDR(GPIOE_IDR_Addr, 4) //输入
#define PE5in BIT_ADDR(GPIOE_IDR_Addr, 5) //输入
#define PE6in BIT_ADDR(GPIOE_IDR_Addr, 6) //输入
#define PE7in BIT_ADDR(GPIOE_IDR_Addr, 7) //输入
#define PE8in BIT_ADDR(GPIOE_IDR_Addr, 8) //输入
#define PE9in BIT_ADDR(GPIOE_IDR_Addr, 9) //输入
#define PE10in BIT_ADDR(GPIOE_IDR_Addr, 10) //输入
#define PE11in BIT_ADDR(GPIOE_IDR_Addr, 11) //输入
#define PE12in BIT_ADDR(GPIOE_IDR_Addr, 12) //输入
#define PE13in BIT_ADDR(GPIOE_IDR_Addr, 13) //输入
#define PE14in BIT_ADDR(GPIOE_IDR_Addr, 14) //输入
#define PE15in BIT_ADDR(GPIOE_IDR_Addr, 15) //输入 //举例: //输出 PA0=; PA1=; //输入 if(PB0==) ;//检测到低电平

像51一样操作STM32的IO(转)的更多相关文章

  1. 转载电子发烧友网---STM32的IO口灌入电流和输出驱动电流

    刚开始学习一款单片机的时候一般都是从操作IO口开始的,所以我也一样,先是弄个流水灯. 刚开始我对STM32的认识不够,以为是跟51单片机类似,可以直接操作端口,可是LED灯却没反应,于是乎,仔细查看资 ...

  2. 51单片机I/O引脚IO口工作原理

    51单片机I/O引脚IO口工作原理 一.51单片机管脚p0.p1.p2.p3口区别如下: 1.意思不同P0口作输出口用时,需加上拉电阻.P0口有复用功能.当对外部存储器进行读写操作时,P0口先是提供外 ...

  3. 51单片机和STM32单片机区别在那里

    ​大部分朋友可能都知道51单片机和stm32单片机也知道一般入门会先学习51单片机在学习stm32单片机会简单一些,但是对于51单片机和stm32单片机的具体区别却不知道了,有些人觉得没必要,但是我个 ...

  4. STM32的IO口的8种配置

    STM32的IO口的8种配置 1 STM32的输入输出管脚有以下8种可能的配置:(4输入+2输出+2复用输出) ① 浮空输入_IN_FLOATING ② 带上拉输入_IPU ③ 带下拉输入_IPD ④ ...

  5. 使用BSRR和BRR寄存器直接操作STM32的I/O端口

    STM32的每个GPIO端口都有两个特别的寄存器,GPIOx_BSRR和GPIOx_BRR寄存器,通过这两个寄存器可以直接对对应的GPIOx端口置'1'或置'0'. GPIOx_BSRR的高16位中每 ...

  6. C# - openxml 操作excel - '“System.IO.Packaging.Package”在未被引用的程序集中定义'

    在 CodeProject中,有位网友写的一篇基于OpenXML SDK 2.0对excel(大数据量)进行操作,其中,运行的时候,有如下错误: 类型“System.IO.Packaging.Pack ...

  7. STM32中IO口的8中工作模式

    该文摘自:http://blog.csdn.net/kevinhg/article/details/17490273 一.推挽输出:可以输出高.低电平,连接数字器件:推挽结构一般是指两个三极管分别受两 ...

  8. 【C# IO 操作 】开篇 IO命名空间的解析

    图片模板下载 System.IO命名空间类分为:文件.驱动 .目录.路径.流.比特率流的操作 驱动类:比较简单,所以就不区分静态和实例操作类,所有的操作合并在DriverInfo类中 路径类:比较简单 ...

  9. 关于STM32的IO口速率问题

    输入模式可以不用配置速度,但是输出模式必须确定最大输出频率.当STM32的GPIO端口设置为输出模式时,有三种速度可以选择:2MHz.10MHz和50MHz,这个速度是指I/O口驱动电路的速度,是用来 ...

随机推荐

  1. group_concat()函数总结

    group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果.比较抽象,难以理解. 通俗点理解,其实是这样的:group_concat()会计算哪些行属于同一组, ...

  2. POJ3264/RMQ

    题目链接 /* 询问一段区间内的元素差值最大是多少,用RMQ维护一个最大值和一个最小值,相减即可. */ #include<cstdio> #include<cstring> ...

  3. gSoap工具wsdl2h及soapcpp2指令汇总

    gSoap开发包的下载地址http://sourceforge.net/projects/gsoap2,在bin目录下提供了两个工具: 1:wsdl2h:The gSOAP wsdl2h tool i ...

  4. RxSwift 之官方文档

    RxSwift 官方文档结构 Introduction: Subjects Transforming Observables Filtering Observables Combining Obser ...

  5. [转]理解SSL(https)中的对称加密与非对称加密

    加密 解密 Tweet   密码学最早可以追溯到古希腊罗马时代,那时的加密方法很简单:替换字母. 早期的密码学 古希腊人用一种叫 Scytale 的工具加密.更快的工具是 transposition ...

  6. ajax2016/4/15 post与get

    post方式,数据放在send()里面作为参数传递 xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded'); ...

  7. CentOS 下mysql 的安装

    1.安装mysql服务器 yum -y install mysql-server 2.装入service启动服务 /etc/rc.d/init.d/mysqld start 3.设置mysql服务开机 ...

  8. nodejs的重要支柱

    概念:模块(Module)和包(Package)是Node.js最重要的支柱. 开发一个具有一定规模的程序不可能只用一个文件,通常需要把各个功能拆分.分装.然后组合起来.模块正式为了实现这种方式而诞生 ...

  9. AndroidGradle--瘦身apk(转发)

    apk瘦身一般有两条线, 去除无用的代码,例如引用一个比较大的lib,只使用了其中很少的功能.其他无用的代码可以想办法去掉 去除无用的资源文件,可能是第三方lib中的,也有可能是开发中引入了无用的资源 ...

  10. mybatis generator Date类型时间丢失

    开篇 本次项目换用了Oracle数据库,讲真,真的不好用,不太喜欢,比较喜欢轻量级的MySQL但是不得不说从Oracle的严谨中学到不少好东西. <resultMap id="Base ...