用union记录硬件地址位

板子上留有拨码开关,用来级联不同板子,判断是哪块板子发送的数据。

头文件中声明

#define Address1_IN 			HAL_GPIO_ReadPin(Address1_GPIO_Port,Address1_Pin)
#define Address2_IN 			HAL_GPIO_ReadPin(Address2_GPIO_Port,Address2_Pin)
#define Address3_IN 			HAL_GPIO_ReadPin(Address3_GPIO_Port,Address3_Pin)

struct _Versionbit
{
  uint8_t Address1 : 1;   // bit 0
  uint8_t Address2 : 1; 	// bit 1
  uint8_t Address3 : 1;   // bit 2
};

union _Version
{
	struct _Versionbit bit;
	uint8_t byte;
};

union _Version Version;

void read_addr()
{
	 Version.bit.Address1= Address1_IN;
	 Version.bit.Address2= Address2_IN;
	 Version.bit.Address3= Address3_IN;
}

这样做会省去每个位的处理和判断


版权声明:本文为zy19981110原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。