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

stm32循环读取8个io口状态

[复制链接]
qrskf 提问时间:2020-10-3 10:00 /
救助:stm32的8个GPIO端口连接一个8位拨码开关,作为组网从机地址选择,怎么读取拨码开关状态,8个IO口不在一个GPIO组里面,在GPIOA GPIOB两个组里面,有参考案例代码,谢谢!
收藏 评论4 发布时间:2020-10-3 10:00

举报

4个回答
hujjj 回答时间:2020-10-3 10:20:36
逐个读取引脚的电平高低,然后组成您需要的数据。
stm1024 回答时间:2020-10-4 22:10:23
那就把GA,GB都读出来,然后提取对应bit位啊,基本的位操作
小歆-2051663 回答时间:2020-10-9 12:26:30
我一般会定义一个联合体+结构体的变量,例如:
  1. union {
  2.   uint8 Byte;
  3.   struct {
  4.     uint8_t   bit0  :1;
  5.     uint8_t   bit1  :1;
  6.     uint8_t   bit2  :1;
  7.     uint8_t   bit3  :1;
  8.     uint8_t   bit4  :1;
  9.     uint8_t   bit5  :1;
  10.     uint8_t   bit6  :1;
  11.     uint8_t   bit7  :1;
  12.   } Bits;
  13.     } Address;
复制代码


读取IO并赋值变量这样写:
  1. Address.Bits.bit0 = HAL_GPIO_ReadPin(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);
  2.     Address.Bits.bit1 = HAL_GPIO_ReadPin(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);
  3.     Address.Bits.bit2 = HAL_GPIO_ReadPin(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);
  4.     Address.Bits.bit3 = HAL_GPIO_ReadPin(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);
  5.     Address.Bits.bit4 = HAL_GPIO_ReadPin(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);
  6.     Address.Bits.bit5 = HAL_GPIO_ReadPin(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);
  7.     Address.Bits.bit6 = HAL_GPIO_ReadPin(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);
  8.     Address.Bits.bit7 = HAL_GPIO_ReadPin(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);
复制代码


最后使用的时候这样写:
  1. uint8_t tmp = Address.Byte;
复制代码



butterflyspring 回答时间:2020-10-10 11:35:10
读拨码开关一般不追求速度,用什么方法都能读出来。用库函数读就行。大家说的方法都可以实现的

所属标签

相似问题

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