像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(转)的更多相关文章
- 转载电子发烧友网---STM32的IO口灌入电流和输出驱动电流
刚开始学习一款单片机的时候一般都是从操作IO口开始的,所以我也一样,先是弄个流水灯. 刚开始我对STM32的认识不够,以为是跟51单片机类似,可以直接操作端口,可是LED灯却没反应,于是乎,仔细查看资 ...
- 51单片机I/O引脚IO口工作原理
51单片机I/O引脚IO口工作原理 一.51单片机管脚p0.p1.p2.p3口区别如下: 1.意思不同P0口作输出口用时,需加上拉电阻.P0口有复用功能.当对外部存储器进行读写操作时,P0口先是提供外 ...
- 51单片机和STM32单片机区别在那里
大部分朋友可能都知道51单片机和stm32单片机也知道一般入门会先学习51单片机在学习stm32单片机会简单一些,但是对于51单片机和stm32单片机的具体区别却不知道了,有些人觉得没必要,但是我个 ...
- STM32的IO口的8种配置
STM32的IO口的8种配置 1 STM32的输入输出管脚有以下8种可能的配置:(4输入+2输出+2复用输出) ① 浮空输入_IN_FLOATING ② 带上拉输入_IPU ③ 带下拉输入_IPD ④ ...
- 使用BSRR和BRR寄存器直接操作STM32的I/O端口
STM32的每个GPIO端口都有两个特别的寄存器,GPIOx_BSRR和GPIOx_BRR寄存器,通过这两个寄存器可以直接对对应的GPIOx端口置'1'或置'0'. GPIOx_BSRR的高16位中每 ...
- C# - openxml 操作excel - '“System.IO.Packaging.Package”在未被引用的程序集中定义'
在 CodeProject中,有位网友写的一篇基于OpenXML SDK 2.0对excel(大数据量)进行操作,其中,运行的时候,有如下错误: 类型“System.IO.Packaging.Pack ...
- STM32中IO口的8中工作模式
该文摘自:http://blog.csdn.net/kevinhg/article/details/17490273 一.推挽输出:可以输出高.低电平,连接数字器件:推挽结构一般是指两个三极管分别受两 ...
- 【C# IO 操作 】开篇 IO命名空间的解析
图片模板下载 System.IO命名空间类分为:文件.驱动 .目录.路径.流.比特率流的操作 驱动类:比较简单,所以就不区分静态和实例操作类,所有的操作合并在DriverInfo类中 路径类:比较简单 ...
- 关于STM32的IO口速率问题
输入模式可以不用配置速度,但是输出模式必须确定最大输出频率.当STM32的GPIO端口设置为输出模式时,有三种速度可以选择:2MHz.10MHz和50MHz,这个速度是指I/O口驱动电路的速度,是用来 ...
随机推荐
- 404、500、502等HTTP状态码介绍
基本涵盖了所有问题HTTP 400 – 请求无效HTTP 401.1 – 未授权:登录失败HTTP 401.2 – 未授权:服务器配置问题导致登录失败HTTP 401.3 – ACL 禁止访问资源HT ...
- div.2/C. They Are Everywhere<two pointer>
题意: 给出包含n (3<=n<=100000)个字符的字符串,计算出包含所有类型字符的最小区间长度. 题解: Two pointer.注意区间的处理. #include<cstdi ...
- Mysql主从备份、主主备份
简单介绍mysql双机,多机异地热备简单原理实战. 双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做 ...
- ViewHolder最简洁的写法
通用viewHolder工具类: public class ViewHolder { // I added a generic return type to reduce the casting no ...
- webapp之路--meta标签format-detection、apple-mobile-web-app-capable
1. format-detection翻译成中文的意思是“格式检测”,顾名思义,它是用来检测html里的一些格式的,那关于meta的format-detection属性主要是有以下几个设置: meta ...
- Photoshop学习之路
网易云课堂中有的提升课程:http://study.163.com/course/courseMain.htm?courseId=765016&6925ecaa9614a750=Individ ...
- mysql分页pagination
http://www.phpjabbers.com/php--mysql-select-data-and-split-on-pages-php25.html returns 20 records so ...
- What is “Mock You” :Raise,callback,verify [转载]
http://www.cnblogs.com/wJiang/archive/2010/02/21/1670637.html Raise 如果你说会用Setup,那么Raise就更简单了.这里注意下它是 ...
- zf-关于邵阳市打印模块个别单号打印之后不会跳转到收费模块的BUG的解决方法
原因是 办结的时候 有个收费管理,里面会生成收费项目的单号,但是有1个单号是有问题的,没有关联到数据库里面的其他的表,所以打印之后不能跳转.如果跳转到收费模块 那么数据库里面的一个flag字段会变成9 ...
- 关于jdk环境变量配置成了1.6.0_39 32位jdk 的路径 cmd中java -version却还是显示 64位或者其他jdk 路径的解决方法
其实是c盘或者其他盘的 jdk 安装的太多了,把其他的都卸载掉就行了