• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

STM32的IO控制怎么用位带操作实现

路出发的 2020-03-19 浏览量:844
STM32的IO控制怎么用位带操作实现
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 可以直接通过下面的代码实现,以GPIOA为例


    #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 PAout(n) BIT_ADDR(GPIOA_ODR_Addrn) //输出
     
    #define PAin(n) BIT_ADDR(GPIOA_IDR_Addrn) //输入





    • 发布于 2020-03-25
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:6
  • 其实也是通过寄存器实现的,底层通过宏定义直接操作寄存器地址里面的数据来控制管脚和读取管脚数据的,具体例程网上还挺多的
    • 发布于2020-03-19
    • 举报
    • 评论 0
    • 0
    • 0

  • STM32的IO有对应寄存器控制的,直接对某个寄存器进行位带操作即可
    • 发布于2020-03-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 通过寄存器可以控制IO,寄存器是32位的,可以通过与 或的运算来修改寄存器的值,从而控制IO
    • 发布于2020-03-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个是通过操作寄存器操作的。 要看数据手册对着操作。 可以更深刻的理解内核运行原理 。
    • 发布于2020-03-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 一般是直接通过操作寄存器,通过修改寄存器的数据实现位带的操作,从而控制IO的
    • 发布于2020-03-27
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

STM32的IO控制怎么用位带操作实现