你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

MCU实战经验+关于mcu的IO操作问题.

[复制链接]
harvardx 提问时间:2014-4-1 17:05 /
阅读主题, 点击返回1楼
收藏 评论11 发布时间:2014-4-1 17:05
11个回答
lkl0305 回答时间:2015-1-25 18:03:39
讲的不错,顶一个
harvardx 回答时间:2020-3-2 13:50:56

  1. ///////////////////////////////////////////////////////////////
  2. //位带操作,实现51类似的GPIO控制功能
  3. //具体实现思想,参考<<CM3权威指南>>第五章(87页~92页).
  4. //IO口操作宏定义
  5. #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
  6. #define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))
  7. #define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum))
  8. //IO口地址映射
  9. #define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C
  10. #define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C
  11. #define GPIOC_ODR_Addr    (GPIOC_BASE+12) //0x4001100C
  12. #define GPIOD_ODR_Addr    (GPIOD_BASE+12) //0x4001140C
  13. #define GPIOE_ODR_Addr    (GPIOE_BASE+12) //0x4001180C
  14. #define GPIOF_ODR_Addr    (GPIOF_BASE+12) //0x40011A0C   
  15. #define GPIOG_ODR_Addr    (GPIOG_BASE+12) //0x40011E0C   

  16. #define GPIOA_IDR_Addr    (GPIOA_BASE+8) //0x40010808
  17. #define GPIOB_IDR_Addr    (GPIOB_BASE+8) //0x40010C08
  18. #define GPIOC_IDR_Addr    (GPIOC_BASE+8) //0x40011008
  19. #define GPIOD_IDR_Addr    (GPIOD_BASE+8) //0x40011408
  20. #define GPIOE_IDR_Addr    (GPIOE_BASE+8) //0x40011808
  21. #define GPIOF_IDR_Addr    (GPIOF_BASE+8) //0x40011A08
  22. #define GPIOG_IDR_Addr    (GPIOG_BASE+8) //0x40011E08
  23. ;
  24. /* shine 改进版本 */
  25. #define PIN(m,n) BIT_ADDR(GPIO##m##_BASE+8,n)        
  26. #define PORT(m,n) BIT_ADDR(GPIO##m##_BASE+12,n)        
  27. //IO口操作,只对单一的IO口!
  28. //确保n的值小于16!

  29. #define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  //输出
  30. #define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n)  //输入

  31. #define PBout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)  //输出
  32. #define PBin(n)    BIT_ADDR(GPIOB_IDR_Addr,n)  //输入

  33. #define PCout(n)   BIT_ADDR(GPIOC_ODR_Addr,n)  //输出
  34. #define PCin(n)    BIT_ADDR(GPIOC_IDR_Addr,n)  //输入

  35. #define PDout(n)   BIT_ADDR(GPIOD_ODR_Addr,n)  //输出
  36. #define PDin(n)    BIT_ADDR(GPIOD_IDR_Addr,n)  //输入

  37. #define PEout(n)   BIT_ADDR(GPIOE_ODR_Addr,n)  //输出
  38. #define PEin(n)    BIT_ADDR(GPIOE_IDR_Addr,n)  //输入

  39. #define PFout(n)   BIT_ADDR(GPIOF_ODR_Addr,n)  //输出
  40. #define PFin(n)    BIT_ADDR(GPIOF_IDR_Addr,n)  //输入

  41. #define PGout(n)   BIT_ADDR(GPIOG_ODR_Addr,n)  //输出
  42. #define PGin(n)    BIT_ADDR(GPIOG_IDR_Addr,n)  //输入
复制代码

  1. // ********举例说明**********
  2. //
  3. //定义输入按键:

  4. #define KEY1 PIN(C,3)
  5. #define KEY2 PIN(A,0)
  6. #define KEY3 PIN(A,1)
  7. #define KEY4 PIN(A,2)
  8. #define KEY5 PIN(A,3)

  9. //定义输出功能;
  10.         #define SDI_5460       PORT(C,2)
  11.         #define SDO_5460       PIN(A,6)
  12.         #define SCLK_5460      PORT(A,5)
  13.         #define RST_5460       PORT(C,4)
  14.         #define CS_5460        PORT(A,4)
  15.         #define CS_U1                   CS_5460
复制代码


12

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版