野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15618|回复: 5

新人请教STM32 GPIO口设置中置位语法的问题。

[复制链接]
发表于 2018-7-3 10:21:10 | 显示全部楼层 |阅读模式
以前用过一段时间51单片机,语法很简单,最近在跟着视频学,视频中有这么一段
RCCAPB2ENR |=((1)<<3;),作用是使能PB口时钟,将时钟使能寄存器中的第3位置1,按照老师的说法是1左移3位,我的理解是将左边第三位置1.
GPIOBCRL |=((1)<<(4*0));作用是将P0口配置为推挽输出模式,根据手册应该是将GPIOB的端口配置低寄存器中的低四位设置为0001,这个我不理解,意思是低4位先全部设置为0,然后1左移0位?
GPIOBODR &=~(1<<0)  ;这句的作用应该是PB0输出设0,。
因为以前学51单片机,经常对某一个端口操作就是p0^1=1,这样,现在换成STM32完全不一样,我现在想请教的是这种|=,&=~,还有寄存器的置位操作的语法在哪儿可以学到?就像是((1)<<3)这种操作。
回复

使用道具 举报

发表于 2018-7-3 10:57:47 | 显示全部楼层
GPIOBCRL |=((1)<<(4*0));作用是将P0口配置为推挽输出模式,根据手册应该是将GPIOB的端口配置低寄存器中的低四位设置为0001,这个我不理解,意思是低4位先全部设置为0,然后1左移0位?

1<<0位表示第0个引脚,把语句改成GPIOBCRL |=((1)<<(4*1));就是配置第1个引脚,这样写是为了方便修改程序,

跟51的语法其实是一样的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-3 12:56:26 | 显示全部楼层

还是不太懂,GPIOBCRL |=((1)<<(4*1)),这个的意思是PB1配置为0001,怎么理解这个4*1呢,4是什么意思?是不是一个脚的配置位是4位,所以4*1就是左移4位?可不可以写成GPIOBCRL |=((1)<<4)呢?
如果是要设置P5口为0001,GPIOBCRL |=((1)<<(4*5)),但是如果要P5设置为1001和1110应该怎么写呢?
回复 支持 反对

使用道具 举报

发表于 2018-7-3 13:49:58 | 显示全部楼层
P5设置为1001和1110:
GPIOBCRL |=((0x09)<<(4*5))

GPIOBCRL |=((0xe)<<(4*5))
回复 支持 反对

使用道具 举报

发表于 2018-7-3 13:50:18 | 显示全部楼层
qiuyuqiang001 发表于 2018-7-3 12:56
还是不太懂,GPIOBCRL |=((1)

4是每个配置占4个寄存器位,你的理解是对的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-3 14:33:39 | 显示全部楼层
flyleaf 发表于 2018-7-3 13:50
4是每个配置占4个寄存器位,你的理解是对的

非常感谢!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-5 23:29 , Processed in 0.043474 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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