stm32循环读取8个io口状态
救助:stm32的8个GPIO端口连接一个8位拨码开关,作为组网从机地址选择,怎么读取拨码开关状态,8个IO口不在一个GPIO组里面,在GPIOA GPIOB两个组里面,有参考案例代码,谢谢!逐个读取引脚的电平高低,然后组成您需要的数据。 那就把GA,GB都读出来,然后提取对应bit位啊,基本的位操作 我一般会定义一个联合体+结构体的变量,例如:
union {
uint8 Byte;
struct {
uint8_t bit0:1;
uint8_t bit1:1;
uint8_t bit2:1;
uint8_t bit3:1;
uint8_t bit4:1;
uint8_t bit5:1;
uint8_t bit6:1;
uint8_t bit7:1;
} Bits;
} Address;
读取IO并赋值变量这样写:
Address.Bits.bit0 = HAL_GPIO_ReadPin(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);
Address.Bits.bit1 = HAL_GPIO_ReadPin(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);
Address.Bits.bit2 = HAL_GPIO_ReadPin(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);
Address.Bits.bit3 = HAL_GPIO_ReadPin(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);
Address.Bits.bit4 = HAL_GPIO_ReadPin(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);
Address.Bits.bit5 = HAL_GPIO_ReadPin(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);
Address.Bits.bit6 = HAL_GPIO_ReadPin(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);
Address.Bits.bit7 = HAL_GPIO_ReadPin(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);
最后使用的时候这样写:
uint8_t tmp = Address.Byte;
读拨码开关一般不追求速度,用什么方法都能读出来。用库函数读就行。大家说的方法都可以实现的:)
页:
[1]