你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

求助个HAL库函数问题--关于IO口写函数

[复制链接]
队长shiwo 提问时间:2017-3-14 17:25 /
标准库就有这个可以写一列IO口值的函数:void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

HAL库的是没有的吗?

HAL库只找到这个位写函数:void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

可不可以把这个参数赋值为 GPIO_PIN_All的?

要自己用寄存器写一个?一个一个IO的赋值?这样效率很低下的吧

谢谢!


收藏 1 评论18 发布时间:2017-3-14 17:25

举报

18个回答
奏奏奏 回答时间:2017-3-15 09:44:42
本帖最后由 奏奏奏 于 2017-3-15 09:46 编辑
  1.   /* USER CODE BEGIN 2 */

  2.   /* USER CODE END 2 */

  3.   /* Infinite loop */
  4.   /* USER CODE BEGIN WHILE */
  5.   while (1)
  6.   {
  7.   /* USER CODE END WHILE */

  8.   /* USER CODE BEGIN 3 */
  9.                 HAL_Delay(2000);
  10.                 HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_All);
  11.                
  12.   }
  13.   /* USER CODE END 3 */
复制代码
zhao.zhao 回答时间:2017-3-15 10:16:18
队长shiwo 发表于 2017-3-15 08:45
#define IO_Data_Set(x)        HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,(x&0x00f0))
这样子行不行的 ...

你的意思是给GPIOC端口赋值0X00F0, 这样赋值不行的,0X00F0 !=0 所以作为 “1”来处理,
这样你GPIOC端口所有的输出都是"1";如果你要按你的意愿来做,只有直接写寄存器。自己做个函数吧。网上例子挺多的。
队长shiwo 回答时间:2017-3-15 10:19:58
zhao.zhao 发表于 2017-3-15 10:16
你的意思是给GPIOC端口赋值0X00F0, 这样赋值不行的,0X00F0 !=0 所以作为 “1”来处理,
这样你GPIOC端 ...

void IO_Write_DataBit(uchar data)
{
  
  GPIOC->ODR |= 0xff;  
  GPIOC->ODR &= data;
   
}
我也是这样想的,直接操作寄存器算了,上面那个函数应该可以实现了吧
creep 回答时间:2017-3-14 18:04:29
可以all:
GPIO_PIN_All
也可以或:
GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_6
奏奏奏 回答时间:2017-3-14 18:44:53
感谢版主的解说,我现在才知道可以写GPIO_PIN_All
队长shiwo 回答时间:2017-3-14 18:51:42
creep 发表于 2017-3-14 18:04
可以all:
GPIO_PIN_All
也可以或:

这样子用HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,x)会有下面的警告的,说参数类型不匹配,参数好像只能是0/1的吧
warning:  #188-D: enumerated type mixed with another type
队长shiwo 回答时间:2017-3-14 18:52:55
奏奏奏 发表于 2017-3-14 18:44
感谢版主的解说,我现在才知道可以写GPIO_PIN_All

刚用HAL库,发现没有了Write_GPIO();所以就找到了GPIO_PIN_All
队长shiwo 回答时间:2017-3-14 18:56:27
creep 发表于 2017-3-14 18:04
可以all:
GPIO_PIN_All
也可以或:

假如我要把数据0x68写到PC0-PC7,0x68=0110 1000B,这样就是PC0=0,PC1=1.....,该用哪个库函数一次性搞定呢
creep 回答时间:2017-3-14 19:12:27
队长shiwo 发表于 2017-3-14 18:51
这样子用HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,x)会有下面的警告的,说参数类型不匹配,参数好像只能是0 ...

发代码看下
zhao.zhao 回答时间:2017-3-15 08:26:03
既然写引脚的时候可以用"|"来连接,那么也可以用“GPIO_PIN_All”,所以应该可以的,前提是前面引脚都要初始化为输出。
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_SET);
队长shiwo 回答时间:2017-3-15 08:42:24

#define IO_Data_Set(x)        HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,(x&0x00f0))
队长shiwo 回答时间:2017-3-15 08:45:32
zhao.zhao 发表于 2017-3-15 08:26
既然写引脚的时候可以用"|"来连接,那么也可以用“GPIO_PIN_All”,所以应该可以的,前提是前面引脚都要初 ...

#define IO_Data_Set(x)        HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,(x&0x00f0))
这样子行不行的
队长shiwo 回答时间:2017-3-15 10:04:12

这个是全部反转GPIOB的值吧
MrJiu 回答时间:2017-3-15 10:13:22
直接右键,看一下代码实现,不就很清楚了嘛!!!!开源,啥叫开源,就是用来看滴!!!
队长shiwo 回答时间:2017-3-15 10:17:49
MrJiu 发表于 2017-3-15 10:13
直接右键,看一下代码实现,不就很清楚了嘛!!!!开源,啥叫开源,就是用来看滴!!! ...

看的懂那个库函数的,就是找不到GPIO_Write()功能的函数而已,
12下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版