网站大量收购独家精品文档,联系QQ:2885784924

STM32 IO口的位操作实现.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
STM32 IO口的位操作实现

STM32 IO口的位操作实现该部分代码实现对STM32各个IO口的位操作,包括读入和输出。当然在这些函数调用之前,必须先进行IO口时钟的使能和IO口功能定义。此部分仅仅对IO口进行输入输出读取和控制。代码如下:??#define?BITBAND(addr,?bitnum)?((addr??0xF0000000)+0x2000000+((addr?0xFFFFF)5)+(bitnum2))??#define?MEM_ADDR(addr)?*((volatile?unsigned?long?*)(addr))??#define?BIT_ADDR(addr,?bitnum)?MEM_ADDR(BITBAND(addr,?bitnum))??//IO口地址映射?#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?GPIOF_ODR_Addr?(GPIOF_BASE+12)?//0x40011A0C??#define?GPIOG_ODR_Addr?(GPIOG_BASE+12)?//0x40011E0C??#define?GPIOA_IDR_Addr?(GPIOA_BASE+8)?//0?#define?GPIOB_IDR_Addr?(GPIOB_BASE+8)?//0x40010C08??#define?GPIOC_IDR_Addr?(GPIOC_BASE+8)?//0?#define?GPIOD_IDR_Addr?(GPIOD_BASE+8)?//0?#define?GPIOE_IDR_Addr?(GPIOE_BASE+8)?//0?#define?GPIOF_IDR_Addr?(GPIOF_BASE+8)?//0x40011A08?55??#define?GPIOG_IDR_Addr?(GPIOG_BASE+8)?//0x40011E08??//IO口操作,只对单一的IO口!??//确保n的值小于16!??#define?PAout(n)?BIT_ADDR(GPIOA_ODR_Addr,n)?//?#define?PAin(n)?BIT_ADDR(GPIOA_IDR_Addr,n)?//?#define?PBout(n)?BIT_ADDR(GPIOB_ODR_Addr,n)?//输出#define?PBin(n)?BIT_ADDR(GPIOB_IDR_Addr,n)?//输入#define?PCout(n)?BIT_ADDR(GPIOC_ODR_Addr,n)?//输出#define?PCin(n)?BIT_ADDR(GPIOC_IDR_Addr,n)?//输入#define?PDout(n)?BIT_ADDR(GPIOD_ODR_Addr,n)?//输出#define?PDin(n)?BIT_ADDR(GPIOD_IDR_Addr,n)?//输入#define?PEout(n)?BIT_ADDR(GPIOE_ODR_Addr,n)?//输出#define?PEin(n)?BIT_ADDR(GPIOE_IDR_Addr,n)//输入#define?PFout(n)?BIT_ADDR(GPIOF_ODR_Addr,n)//输出#define?PFin(n)?BIT_ADDR(GPIOF_IDR_Addr,n)?//输入#define?PGout(n)?BIT_ADDR(GPIOG_ODR_Addr,n)?//输出?#define?PGin(n)?BIT_ADDR(GPIOG_IDR_Addr,n)?//输入STM32?中?BIT_BAND(位段/位带)和别名区使用入门一、什么是位段和别名区??? 是这样的,记得MCS51吗? MCS51就是有位操作,以一位(BIT)为数据对象的操作,MCS51可以简单的将P1口的第2位独立操作: P1.2=0;P1.2=1 ;这样就把P1口的第三个脚(BIT2)置0置1。而现在STM32的位段、位带别名区就为了实现这样的功能。??? 它的对象可以是SRAM、I/O和外设空间。要实现对这些地方的某一位的操作。它是这样做的:在寻址空间(

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档