像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口驱动电路的速度,是用来 ...
随机推荐
- Temporary exceptions can be configured via your app's Info.plist file.
报错: App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure ...
- phpmyadmin配置方式
简单的说,phpmyadmin就是一种mysql的管理工具,安装该工具后,即可以通过web形式直接管理mysql数据,而不需要通过执行系统命令来管理,非常适合对数据库操作命令不熟悉的数据库管理者,下面 ...
- 观光公交noip<贪心>
题目链接:https://www.oj.swust.edu.cn/problem/show/1190 思路: 每在一段路上使用一次加速器,就会对某些人或者说某些路段上的人产生影响,目的是使产生的影响最 ...
- Android简单逐帧动画Frame的实现(三)
android之动画(三)通过AnimationDrawable控制逐帧动画 android与逐帧动画: 效果图: 当我们点击按钮时,该图片会不停的旋转,当再次点击按钮时,会停止在当前的状态. ...
- 【转载】GDI 映像方式 之 SetViewportExtEx 与 SetWindowExtEx 解析
所谓视口代表设备,比如屏幕. 窗口代表我们的思维. 我们对windows说在(5,6)处画个点(调用GDI函数).windows认为是在我们的思维的(5,6)处画了个点.(也就是说5,6是逻辑坐标,G ...
- A SPI class of type org.apache.lucene.codecs.PostingsFormat with name 'Lucene40' does not exist.
简单的建立索引和查询索引并不难,关键在于他的二次开发,让他适合你自己的需求 既然要二次开发就必须查看源码 首先看看索引过程中的核心类吧: IndexWriter 这个是核心组件, 建立和打开索引,以及 ...
- java 实例变量和类变量的区别
Example4_10.java public class Example4_10 { public static void main(String args[]) { Lader.下底=100; / ...
- 如何在Eclipse中添加Servlet-api.jar的方法
方法一: 点击窗口->首选项->java->构建路径->类路径变量->新建:将你的tomcat目录下的common/lib/servlet.jar加进来.如果你建立了一个 ...
- 学习笔记——单例模式Singleton
单例模式,很容易理解,就它一个. 比如网络请求服务类WebReq.它自己生成请求线程,并管理请求数据的返回,所以我们使用它进行网络请求时,不用每次都new一个,只需要使用一个实例就行了.WebReq实 ...
- VirtualBox中CentOS通过Host-Only方式实现虚拟机主机互相访问、共享上网
VirtualBox常用的网络配置如下: 连接方式 主机访问虚拟机 虚拟机访问主机 虚拟机访问虚拟机 虚拟机访问外网 说明 网络地址转换(NAT) 不支持 支持 不支持 支持 默认连接方式,虚拟IP, ...