野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14070|回复: 6

STM32开发板-按键实验

[复制链接]
发表于 2015-11-26 10:09:16 | 显示全部楼层 |阅读模式
各位高手,我想问一下#define        digitalHi(p,i)  {p->BSRR=i;}这一行代码是怎么实现设置高电平的?同理,在库函数Setbits(GPIOx,GPIO_Pin)中,也有类似的代码,比如GPIOx->BSRR = GPIO_Pin;这个是怎么实现设置高电平的?这两个问题的原理应该是一样的,但是一直想不明白...我的理解是把GPIOx中寄存器BSRR的值取出,然后把GPIO_Pin的值赋给BSRR,但是这样理解肯定是不正确的,因为根据参考手册,在控制IO输出高低电平时,应该是根据BSRR的值控制GPIO_Pin的,上述两行红色代码应该怎么理解呢?求高手赐教...
回复

使用道具 举报

 楼主| 发表于 2015-11-26 10:17:06 | 显示全部楼层
这个直接操作寄存器的问题还是很重要的,希望大家能够赐教...
回复 支持 反对

使用道具 举报

发表于 2015-11-26 12:37:33 | 显示全部楼层
这要打开bsrr寄存器的说明对照来看,一看就明白了。bsrr寄存器里0-15位分别是对应GPIO的0-15引脚,对应位写1的时候,该引脚就输出高电平。而GPIO_Pin0 - GPIO_Pin15的宏刚好对应是0-15位置1,所以赋值为GPIO_Pinx就相当于将对应寄存器位置1了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-26 15:22:11 | 显示全部楼层
flyleaf 发表于 2015-11-26 12:37
这要打开bsrr寄存器的说明对照来看,一看就明白了。bsrr寄存器里0-15位分别是对应GPIO的0-15引脚,对应位写 ...

嗯,谢谢,有点明白了,我给您说一下我的理解,您看对不对,以下图开发板所示PF端口为例进行说明:在开发板上电之后,PF7、PF8为高电平,其他引脚为低电平,然后将0xC0(低16位中7、8位写1)赋给BSRR寄存器,最后PF7、PF8输出高电平,LED灯灭。PS:如果我想对BSRR寄存器高16位中的某几位写1,应该怎么进行操作?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-26 15:23:57 | 显示全部楼层
flyleaf 发表于 2015-11-26 12:37
这要打开bsrr寄存器的说明对照来看,一看就明白了。bsrr寄存器里0-15位分别是对应GPIO的0-15引脚,对应位写 ...

LED灯实验
2015-11-26_152254.png
回复 支持 反对

使用道具 举报

发表于 2015-11-26 15:34:06 | 显示全部楼层
青春给了作业 发表于 2015-11-26 15:22
嗯,谢谢,有点明白了,我给您说一下我的理解,您看对不对,以下图开发板所示PF端口为例进行说明:在开发 ...

写高位p->BSRR=(i <<16)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-26 15:40:49 | 显示全部楼层

嗯,谢谢您...
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 14:00 , Processed in 0.064550 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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