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

stm32循环读取8个io口状态

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

举报

9个回答
老牛洋车 回答时间:2020-10-3 10:20:36
逐个读取引脚的电平高低,然后组成您需要的数据。
qrskf 回答时间:2020-10-4 21:02:29
有没有案例代码,分享一个,谢谢了!
qrskf 回答时间:2020-10-4 21:06:12
有没有个案例代码,参考一下,谢谢了!
STM1024 回答时间:2020-10-4 22:10:23
那就把GA,GB都读出来,然后提取对应bit位啊,基本的位操作
qrskf 回答时间:2020-10-5 16:54:35
好的,谢谢大家
小歆-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
读拨码开关一般不追求速度,用什么方法都能读出来。用库函数读就行。大家说的方法都可以实现的
qrskf 回答时间:2020-10-11 17:46:33
我是这样写的: u8 addid[8];
   
        addid[0] = GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11);
        addid[1] = GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10);
        addid[2] = GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_2);
        addid[3] = GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1);
        addid[4] = GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0);
        addid[5] = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_7);
        addid[6] = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6);
        addid[7] = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5);
qrskf 回答时间:2020-10-11 17:47:10
谢谢大家!!!!!!

所属标签

相似问题

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