OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7619|回复: 4

GPIO_WriteBit与GPIO_SetBits

[复制链接]

9

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2015-10-6
在线时间
25 小时
发表于 2016-8-17 20:42:56 | 显示全部楼层 |阅读模式
1金钱
GPIO_WriteBit与GPIO_SetBits,前面个是对一个io口进行写操作可以是写0或者写1,而后面一个可以对多个io口同时进行置位1


那么GPIO_WriteBit一点好处都没有了吗?这个函数


好有他是怎么配置的怎么用的
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);


第三个参数是什么,这个#define IS_GPIO_BIT_ACTION(ACTION) (((ACTION) == Bit_RESET) || ((ACTION) == Bit_SET))是他的有效性,
到底怎么设置void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);这个函数呢第三个参数怎么设置


这样吗
///GPIO_WriteBits(GPIOx, GPIO_Pin_i,1);  ——对一个端口进行写1(也可以写0,把括号内的1改为0即可)操作  
///GPIO_Write(GPIOA, 0x1101);——向指定GPIO数据端口写入数据





void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
  assert_param(IS_GPIO_BIT_ACTION(BitVal));
  ////下面这句话是什么意思
  if (BitVal != Bit_RESET)
  {
    GPIOx->BSRR = GPIO_Pin;
  }
  else
  {
    GPIOx->BRR = GPIO_Pin;
  }
}


最佳答案

查看完整内容[请看2#楼]

GPIO_WriteBit: 向单个引脚写0或1,举例: GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_SET); //将PA3置为1 GPIO_WriteBit(GPIOB, GPIO_Pin_2, Bit_RESET); //将PB2置为0 第三个参数是一个枚举: [mw_shl_code=c,true]typedef enum { Bit_RESET = 0, Bit_SET }BitAction;[/mw_shl_code] GPIO_SetBits: 将某同组引脚一个或多个同时置为1,举例 GPIO_SetBits(GPIOB, GPIO_Pin_2); //将PB2置为1 GPIO_SetBits(GPIOA, ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-8-17 20:42:57 | 显示全部楼层
GPIO_WriteBit: 向单个引脚写0或1,举例:
GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_SET);   //将PA3置为1
GPIO_WriteBit(GPIOB, GPIO_Pin_2, Bit_RESET);   //将PB2置为0

第三个参数是一个枚举:
[mw_shl_code=c,true]typedef enum
{ Bit_RESET = 0,
  Bit_SET
}BitAction;[/mw_shl_code]

GPIO_SetBits: 将某同组引脚一个或多个同时置为1,举例
GPIO_SetBits(GPIOB, GPIO_Pin_2);   //将PB2置为1
GPIO_SetBits(GPIOA, GPIO_Pin_3|GPIO_Pin_9);   //将PA2和PA9同时置为1
GPIO_SetBits(GPIOD, GPIO_Pin_All);   //将PD0-PD15所有16个引脚同时置为1

存在即是合理,你用不到不代表别人用不到,库函数不是给你一个人写的,


  ////下面这句话是什么意思
  if (BitVal != Bit_RESET)
  {
    GPIOx->BSRR = GPIO_Pin;
  }
  else
  {
    GPIOx->BRR = GPIO_Pin;
  }

你要是用库函数,这些注释提供的信息足够你用了:
[mw_shl_code=c,true]/**
  * @brief  Sets or clears the selected data port bit.
  * @param  GPIOx: where x can be (A..G) to select the GPIO peripheral.
  * @param  GPIO_Pin: specifies the port bit to be written.
  *   This parameter can be one of GPIO_Pin_x where x can be (0..15).
  * @param  BitVal: specifies the value to be written to the selected bit.
  *   This parameter can be one of the BitAction enum values:
  *     @arg Bit_RESET: to clear the port pin
  *     @arg Bit_SET: to set the port pin
  * @retval None
  */[/mw_shl_code]

但非要知道库函数的每一个语句为什么那么写,那么寄存器欢迎你:

1.jpg


2.jpg

坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2016-8-17 20:56:12 | 显示全部楼层
请右键查看定义,然后对照手册的寄存器介绍。
小小蜗牛
回复

使用道具 举报

9

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2015-10-6
在线时间
25 小时
 楼主| 发表于 2016-8-19 08:38:59 | 显示全部楼层
好的                                                
回复

使用道具 举报

9

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
165
金钱
165
注册时间
2015-10-6
在线时间
25 小时
 楼主| 发表于 2016-8-19 08:39:10 | 显示全部楼层
xkwy 发表于 2016-8-17 20:42
GPIO_WriteBit: 向单个引脚写0或1,举例:
GPIO_WriteBit(GPIOA, GPIO_Pin_3, Bit_SET);   //将PA3置为1
...

好的                        
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-6 19:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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