打印
[STM32F1]

库函数 宏定义

[复制链接]
1574|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aqing11111|  楼主 | 2017-3-1 11:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
(1)#define LED1(a)  if(a)\
             GPIO_SetBits(GPIOB,GPIO_Pin_0);\
              else \
             GPIO_ResetBits(GPIOB,GPIO_Pin_0);
// 上面意思是: LED1(a) 替换后面的if...else语句,并传递参数;但是这里if...else不理解了:如果a为真,就把B的0口设置为高电平,但是 这个 函数GPIO_SetBits怎么就是高电平了,函数原型也没有啊。
(2)  #define digitalHi(p,i)   {p->BSRR=i;}  // 怎么就是设置高电平了


求:熟悉stm32库函数的同行详细解答。
沙发
birdSTM32| | 2017-3-1 12:28 | 只看该作者
本帖最后由 birdSTM32 于 2017-3-1 12:33 编辑

GPIO_SetBits(GPIOB,GPIO_Pin_0)就是一个宏,展开变成GPIOB->BSRR = GPIO_Pin_0;GPIO_Pin_0的定义是0x0001,GPIO_Pin_1是0x0002,GPIO_Pin_2是0x0004,看它们的二进制表示你就知道什么意思了;
BSRR是一个32位寄存器,每一位对应IO口的16个引脚中的一个,引脚对应位置1输出高电平,引脚对应位置0则为低电平。为什么1对应高电平0对应低电平你就要去问ST了
第二个问题不用回答了吧?

使用特权

评论回复
板凳
lxyppc| | 2017-3-1 12:29 | 只看该作者
你需要了解一下BSRR寄存器的含义

使用特权

评论回复
地板
lxyppc| | 2017-3-1 12:29 | 只看该作者
birdSTM32 发表于 2017-3-1 12:28
GPIO_SetBits(GPIOB,GPIO_Pin_0)就是一个宏,展开变成GPIOB->BSRR = GPIO_Pin_0;GPIO_Pin_0的定义是0x0001 ...

BSRR是32位的

使用特权

评论回复
5
birdSTM32| | 2017-3-1 12:33 | 只看该作者
本帖最后由 birdSTM32 于 2017-3-1 12:36 编辑

好吧,我错了。。。一直以为BSRR和BRR都16位。那为什么有了BSRR之后还要搞个BRR呢?

使用特权

评论回复
6
zjglizhen| | 2017-3-1 12:55 | 只看该作者
路过

使用特权

评论回复
7
aqing11111|  楼主 | 2017-3-1 14:01 | 只看该作者
birdSTM32 发表于 2017-3-1 12:28
GPIO_SetBits(GPIOB,GPIO_Pin_0)就是一个宏,展开变成GPIOB->BSRR = GPIO_Pin_0;GPIO_Pin_0的定义是0x0001 ...

O(∩_∩)O谢谢,我再看看原函数和寄存器。

使用特权

评论回复
8
aqing11111|  楼主 | 2017-3-1 17:47 | 只看该作者
lxyppc 发表于 2017-3-1 12:29
你需要了解一下BSRR寄存器的含义

已经定义下面这个结构体:
typedef struct
{
unit16_t GPIO_Pin;

GPIOSpeed_TypeDef GPIO_Speed;

GPIOMode_TypeDef GPIO_Mode;

}GPIO_InitTypeDef;

而这个函数
void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;  //这里GPIO_InitStructure 指的是什么,指针或变量,实在不明白

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
}

使用特权

评论回复
9
hudi008| | 2017-3-1 22:26 | 只看该作者
这个是函数库里面的函数

使用特权

评论回复
10
hudi008| | 2017-3-1 22:32 | 只看该作者
p->BSRR 这里的P就是定时的IO寄存器

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

11

帖子

0

粉丝