1. #ifndef __SYS_H
  2. #define __SYS_H
  3. #include "stm32f10x.h"
  4.  
  5. //位带操作
  6. //把“位带地址+位序号”转换别名地址宏
  7. #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
  8. //把该地址转换成一个指针
  9. #define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
  10. #define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
  11.  
  12. //GPIO输出输入地址映射
  13. #define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C
  14. #define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C
  15. #define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C
  16. #define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C
  17. #define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C
  18. #define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C
  19. #define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C
  20.  
  21. #define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808
  22. #define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08
  23. #define GPIOC_IDR_Addr (GPIOC_BASE+8) //0x40011008
  24. #define GPIOD_IDR_Addr (GPIOD_BASE+8) //0x40011408
  25. #define GPIOE_IDR_Addr (GPIOE_BASE+8) //0x40011808
  26. #define GPIOF_IDR_Addr (GPIOF_BASE+8) //0x40011A08
  27. #define GPIOG_IDR_Addr (GPIOG_BASE+8) //0x40011E08
  28.  
  29. //GPIO输入输出定义
  30. #define PAOut(n) BIT_ADDR(GPIOA_ODR_Addr,n) //GPIOA的输出
  31. #define PAIn(n) BIT_ADDR(GPIOA_IDR_Addr,n) //GPIOA的输入
  32.  
  33. #define PBOut(n) BIT_ADDR(GPIOB_ODR_Addr,n) //GPIOB的输出
  34. #define PBIn(n) BIT_ADDR(GPIOB_IDR_Addr,n) //GPIOB的输入
  35.  
  36. #define PCOut(n) BIT_ADDR(GPIOC_ODR_Addr,n) //GPIOC的输出
  37. #define PCIn(n) BIT_ADDR(GPIOC_IDR_Addr,n) //GPIOC的输入
  38.  
  39. #define PDOut(n) BIT_ADDR(GPIOD_ODR_Addr,n) //GPIOD的输出
  40. #define PDIn(n) BIT_ADDR(GPIOD_IDR_Addr,n) //GPIOD的输入
  41.  
  42. #define PEOut(n) BIT_ADDR(GPIOE_ODR_Addr,n) //GPIOE的输出
  43. #define PEIn(n) BIT_ADDR(GPIOE_IDR_Addr,n) //GPIOE的输入
  44.  
  45. #define PFOut(n) BIT_ADDR(GPIOF_ODR_Addr,n) //GPIOF的输出
  46. #define PFIn(n) BIT_ADDR(GPIOF_IDR_Addr,n) //GPIOF的输入
  47.  
  48. #define PGOut(n) BIT_ADDR(GPIOG_ODR_Addr,n) //GPIOG的输出
  49. #define PGIn(n) BIT_ADDR(GPIOG_IDR_Addr,n) //GPIOG的输入
  50.  
  51. /*
  52. 使用方法
  53. #define TM1637_CLK PCOut(7) ---设置GPIOC的7口向TM1637的CLK通讯进行输出
  54. #define TM1637_DIO PCOut(6) ---设置GPIOC的6口向TM1637的DIO通讯进行输出
  55. #define TM1637_READ_DIO PCIn(6) ---设置GPIOC的6口读取TM1637的DIO数据
  56. */

STM32之GPIO端口位带操作的更多相关文章

  1. STM32位带操作总结---浅显易懂

    正在准备做毕业设计,配置LED_Config()的时候,又看到了位带操作的宏定义,我又嘀咕了,什么是位带操作,一年前在使用位带操作的时候,就查阅过好多资料,Core-M3也看过,但是对于博主这种“低能 ...

  2. 【ARM】---STM32位带操作总结---浅显易懂

    正在准备做毕业设计,配置LED_Config()的时候,又看到了位带操作的宏定义,我又嘀咕了,什么是位带操作,一年前在使用位带操作的时候,就查阅过好多资料,Core-M3也看过,但是对于博主这种“低能 ...

  3. (stm32学习总结)—GPIO位带操作

    本章参考资料:<STM32F10X-中文参考手册>存储器和总线构架章节.GPIO 章节,<CM3 权威指南 CnR2>存储器系统章节. 位带简介 位操作就是可以单独的对一个比特 ...

  4. 玩转X-CTR100 | STM32F4 l GPIO位带操作

    更多塔克创新资讯欢迎登陆[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]       STM32F4位带概念,及位带的GPIO操作实践应用. 原理介 ...

  5. 关于STM32位带操作随笔

    以前在学习STM32时候关注过STM32的位带操作,那时候只是知道位带是啥,用来干嘛用,说句心里话,并没有深入去学习,知其然而不知其所以然.但一直在心中存在疑惑,故今日便仔细看了一下,写下心得供日后参 ...

  6. 第13章 GPIO—位带操作

    第13章     GPIO—位带操作 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...

  7. GPIO—位带操作

    GPIO—位带操作本章参考资料:< STM32F4xx 中文参考手册>存储器和总线构架章节. GPIO 章节,< Cortex®-M4 内核编程手册> 2.2.5 Bit-ba ...

  8. STM32位带操作

    STM32的位带操作是基于cortex内核自带的,而不是st公司独创.基本的思路就是用一个32位的地址空间访问一个bit,因为stm32只支持32位数据的读取,不像51单片机一样,是可以单独对一位操作 ...

  9. 位带操作—GPIO输出和输入

    GPIOC->ODR |=(0<<2);  // 总线操作,即操作整个寄存器. 在51单片机中 P0=0xFE;   //总线操作. sbit LED1=P0^0;  //位操作,即 ...

随机推荐

  1. 由《win32多线程程序设计》临界区的问题所想

    之前看侯捷翻译的<win32多线程程序设计>中关于线程同步中的临界区问题,其中举得例子是对链表的操作.死锁的问题是对一个Swaplist函数的问题,现列举代码如下: void SwapLi ...

  2. LinuxShell脚本攻略--第六章 B计划

    tar -A或--catenate:新增文件到以存在的备份文件: -B:设置区块大小: -c或--create:建立新的备份文件: -C <目录>:这个选项用在解压缩,若要在特定目录解压缩 ...

  3. form in drupal

    qin_form_ajax_example_form($form, &$form_state)类似函数的参数永远都是一样的,最多把$form前面也加上& 当没有实现页面跳转时,$for ...

  4. phonegap插件加载与使用

    有朋友问能不能在CanTK和AppBuilder开发的APP里发送UDP数据,HTML5里只能用HTTPS/HTTP/WebSocket几种通讯方式,要使用UDP需要通过phonegap打包成APK等 ...

  5. DI 之 3.3 更多DI的知识(陆)

    3.3.1  延迟初始化Bean 延迟初始化也叫做惰性初始化,指不提前初始化Bean,而是只有在真正使用时才创建及初始化Bean. 配置方式很简单只需在<bean>标签上指定 " ...

  6. Js作用域链及变量作用域

    要理解变量的作用域范围就得先理解作用域链 用var关键字声明一个变量时,就是为该变量所在的对象添加了一个属性. 作用域链:由于js的变量都是对象的属性,而该对象可能又是其它对象的属性,而所有的对象都是 ...

  7. 5.4.2 使用配置启动firefox

    1.使用firefox的本地配置加载浏览器 使用本地配置加载浏览器,代码如下. 这样运行后,可以看到firebug等插件都已启动. 练习:假设做性能测试时,需要获取某个状况下的页面网络运行参数.要求完 ...

  8. left join与on,where 结合一起用的异同

    I.数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. 在使用left join时,on和where条件的区别如下: 1. on条件是在生成临时表时使用 ...

  9. HTML5自学笔记[ 3 ]表单验证反馈

    表单控件对象的validity对象可以设置或返回相关的验证信息(在invalid事件处理中获取validity对象): 属性valid:为true所有验证通过,为False至少有一种验证失败. 属性v ...

  10. hdu-----2491Priest John's Busiest Day(2008 北京现场赛G)

    Priest John's Busiest Day Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav ...