源:像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. Swift 学习笔记(五)

    126. 协议(Protocols) 协议语法(Protocol Syntax) 属性要求(Property Requirements) 方法要求(Method Requirements) Mutat ...

  2. RatingBar

    题记:保持旺盛的求知欲.希望会一直这样. 说明:来了新控件了.就是经常用的打分的那种东东. 说明:1.看上图分别是系统自带的和自己做的.rating就是设置小星星的数目. 2.用系统自带的必须是Wra ...

  3. 初识Jmeter(一)

    倒霉熊的推荐: 文本学习网址:http://m.open-open.com/m/doc/category/105 视频学习网址: 软件学习网:http://www.ask3.cn/index.html ...

  4. IE6下绝对定位元素和浮动元素并列绝对定位元素消失

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. android 数据存储分配的一些事

    应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的.大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中.这样当该应用被卸载后,这些数据还 ...

  6. STM32F2系列低功耗总结

    序号 运行状态 进入指令(stm32f2xx_pwr.c) 退出条件 状态 IO管脚状态 进一步降低功耗的措施 1 运行模式 上电/系统复位后的默认模式, HCLK驱动CPU运行代码 可通过指令 进入 ...

  7. hdu_5723_Abandoned country(最小生成树)

    题目链接:hdu_5723_Abandoned country 题意: 让你求最小生成树的花费,然后求任给两点的期望路程 题解: 最小生成树大家都会求,Kruskal这里要改改,因为后面要求任意两点的 ...

  8. Mac linux 安装memcached服务 用法

    今天在Mac上安装memcached服务的时候 由于安装memcached之前需要安装libevent依赖包 所以使用brew install libevent 安装过程中报错 Warning: Yo ...

  9. 很好的一个dp题目 Codeforces Round #326 (Div. 2) D dp

    http://codeforces.com/contest/588/problem/D 感觉吧,这道题让我做,我应该是不会做的... 题目大意:给出n,L,K.表示数组的长度为n,数组b的长度为L,定 ...

  10. java删除文件夹 Java中实现复制文件或文件夹

    删除文件夹 import java.io.File; public class DeleteDir { /** * @param args */ public static void main(Str ...