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

关于STM32 GPIO_Pin_x的理解

daf02865d75b6b6e 2020-08-25 浏览量:967
GPIOA -> ODR ^= GPIO_Pin_1 |  GPIO_Pin_2 |  GPIO_Pin_3  |  GPIO_Pin_4;
这是教学视频里写的  
ODR与四个管脚状态进行异或。GPIO_Pin_x不就是代表哪一个管脚吗,还能表示管脚的高低状态?怎么理解这个。
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • GPIO_Pin_x是一个引脚的,但只是表求的寄存器中的一位的值,所以,可以进行运算的


    • 发布于 2020-08-28
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:9
  • GPIO_Pin_x定义的是掩蔽位,你写的语句是将相应的管脚电平取反。

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

  • 这里的异或就是将 ODR 寄存器对应的位取反,也就是将对应管脚的电平状态取反。

    望采纳

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

  • 这条语句是把gpioa1到4管脚取反,也就是反转电平,先读取原来的电平状态然后在电平
    • 发布于2020-08-25
    • 举报
    • 评论 0
    • 0
    • 0

  • GPIOA -> ODR ^= GPIO_Pin_1 |  GPIO_Pin_2 |  GPIO_Pin_3  |  GPIO_Pin_4;

    展开为

    GPIOA -> ODR =GPIOA -> ODR^( GPIO_Pin_1 |  GPIO_Pin_2 |  GPIO_Pin_3  |  GPIO_Pin_4);

    因为GPIOA -> ODR一次控制16位输出,所以这里,除了设置的4个管脚,其余12个管脚对应位不会发生变化(按位异或特性),而设置的4个发生偏转。

    注意这里GPIO_Pin_1GPIO_Pin_2...分别代表对应位置1,而不是对应位状态。

    • 发布于2020-08-26
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个是配置寄存器,而这个寄存器是可以按位进行配置的,所以,这里有了或的运算
    • 发布于2020-08-26
    • 举报
    • 评论 0
    • 0
    • 0

  • 这是异或,你可以看下C语言关于位操作的章节
    • 发布于2020-08-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个位操作是由于GPIO的每个引脚的配置都是掩弊位的,这样写可以方便的配置每个引脚
    • 发布于2020-08-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个ODR寄存器是控制一组GPIO的,这里的GPIOA的ODR控制的就是整组GPIOA的电平
    • 发布于2020-08-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 寄存器并不是一个代表一个引脚的,而是一位代表一个引脚状态
    • 发布于2020-09-29
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

关于STM32 GPIO_Pin_x的理解