硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2649|回复: 1
收起左侧

[HAL] 函数HAL_GPIO_Init对引脚的初始化是把同组16个引脚for循环检测了一遍,效率稍低

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2018-7-20 11:10:38 | 显示全部楼层 |阅读模式
以前不怎么看库函数,所有特地学习学习,涨涨见识。

由于是同组的所有引脚循环检测一遍,不推荐下面这种初始化:
  1. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;                  
  2. GPIO_InitStruct.Pull = GPIO_NOPULL;              
  3. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;  

  4. GPIO_InitStruct.Pin = GPIO_PIN_0;
  5. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);   //这里会执行16次for查询

  6. GPIO_InitStruct.Pin = GPIO_PIN_1;
  7. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);   //这里会执行16次for查询
  8.         
  9. GPIO_InitStruct.Pin = GPIO_PIN_2;
  10. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);  //这里会执行16次for查询
复制代码

所以采用下面的方式合理些,其实也什么,就是初始化的时候稍稍占用点时间。如果是程序运行期间的引脚状态切换,最好采用下面的方式。
  1. GPIO_InitStruct.Pin = GPIO_PIN_0 |GPIO_PIN_1 | GPIO_PIN_2 ;
  2. GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;                  
  3. GPIO_InitStruct.Pull = GPIO_NOPULL;              
  4. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;  

  5. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);  //这里会执行16次for查询
复制代码


QQ截图20180720110943.png



回复

使用道具 举报

2

主题

569

回帖

575

积分

金牌会员

积分
575
发表于 2018-7-21 06:12:01 | 显示全部楼层
用case 也比for好啊
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-18 08:16 , Processed in 0.215089 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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