野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 25278|回复: 3

求问各位大佬

[复制链接]
发表于 2020-11-23 15:06:55 | 显示全部楼层 |阅读模式
如果想要像51一样,对某一位进行赋值,像这样写为啥不行啊,(想方便取反)
#define led1 GPIOB->ODR+GPIO_ODR_ODR0   

  led1=0;


回复

使用道具 举报

发表于 2020-11-23 21:14:32 | 显示全部楼层
本帖最后由 eolasia 于 2020-11-23 21:29 编辑

GPIOB->ODR+GPIO_ODR_ODR0   
这个语句是有问题的吧?初学stm32 如有说错 请指正
想要操作GPIOB->ODR寄存器,需要用个操作符(=,|=, &=, ^=)对其进行赋值。
首先取出ODR中的二进制数据 然后将其跟 赋值符号后面寄存器里的二进制数据进行 与/或/异或等操作 再将其置放入语句前面的GPIOB->ODR寄存器中,
ODR(output data register) 控制输出0 1状态。
在火哥的教材中也有这样的用法
GPIOB->ODR ^= GPIO_Pin_0
执行这一语句可以实现Pin_0的高低电平翻转
-----------------------------------------
GPIOB->ODR+GPIO_ODR_ODR0   
-----------------------------------------
首先 这个加号无法操作寄存器
需要用到上述的赋值位运算符

其次 GPIO_ODR_ODR0这个是什么鬼,我没见过这种语句
我猜想你是想取GPIO->ODR中的 第0位的数据出来进行处理,火哥后面有一章位带操作,貌似就是可以处理单个bit位的,
因为我也才玩stm32一个星期,还没有二刷,所以这一章没认真看,就2倍速过了一次。关于位带操作我也不好给什么意见...但是可以
           GPIOB->ODR &= 1<<0;  //GPIOB_Pin_0输出高电平 1  
           GPIOB->ODR |= 0<<0;  //GPIOB_Pin_0输出低电平  0
这样操作  其实这个语句与GPIO_ResetBit 和 setBit 高度类似 不同的是 resetBit和SetBit操作的是BSRR 和 BRR 寄存器 而不是ODR寄存器



还有 #define 宏定义 也就是说 led1 在预处理的时候 把所有led1 替换成GPIOB->ODR+GPIO_ODR_ODR0
语句就会变成
            GPIOB->ODR+GPIO_ODR_ODR0  = 1
这个就更读不通了

想要实现你那样的功能 也是可以的  火哥后面的教材中也有
还是用宏定义
#define ON         1
#define OFF       0

#define LED_R(PARAMETER) if(PARAMETER) GPIO_ResetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);\
                                                                else GPIO_SetBits(LED_R_GPIO_PORT, LED_R_GPIO_PIN);

大概是这样的

然后在main函数中直接 LED_R(ON)即可点亮LED_R



回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-24 12:40:06 | 显示全部楼层
eolasia 发表于 2020-11-23 21:14
GPIOB->ODR+GPIO_ODR_ODR0   
这个语句是有问题的吧?初学stm32 如有说错 请指正
想要操作GPIOB->ODR寄存 ...

谢谢大佬,辛苦啦,你说的我也大致理解了

(首先 这个加号无法操作寄存器
需要用到上述的赋值位运算符)这一句话之前没有接触过,所以就犯了语句的错误

我就是想像51操作位一样去操作ODR的某一位,想看看有什么类似的方便的办法(比方说可以直接用取反符号~进行某一位的反转)
回复 支持 反对

使用道具 举报

发表于 2020-11-24 20:15:07 | 显示全部楼层
可以去参考一下某点原子的例程,他的sys.h里面有写。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-25 03:38 , Processed in 0.041292 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表