Что не так с моим C кодом?
Сразу говорю, я в Си и контроллерах особо не смыслю и Вас, как специалиста, не оцениваю. Все нижесказанное лишь мои предположения, ничего личного.
Возможно за мусор в коде и отсутствие именованных констант:puTX.bytes[0]=(!IN_1<<0)+
												(!IN_2<<1)+
												(!IN_3<<2)+
												(!IN_4<<3)+
												(!IN_5<<4)+
												(!IN_6<<5)+
												(!IN_7<<6)+
												(!IN_8<<7);
Сравните, например, с куском кода от STM из вашего же примера:InitGPIO(GPIOB,GPIO_PIN_7,GPIO_MODE_INPUT); //1
	InitGPIO(GPIOB,GPIO_PIN_6,GPIO_MODE_INPUT);
	InitGPIO(GPIOB,GPIO_PIN_5,GPIO_MODE_INPUT);
	InitGPIO(GPIOB,GPIO_PIN_4,GPIO_MODE_INPUT);
Ну или такое:if (reset >= 2)
					{
						reset = 0;
						timeout = MAX_TIMEOUT;
						//PCKG_SwitchOffAllLeds(); // выключить все лампы
					}
					else
					{
						reset++;
					}
это код джуниора, никак не тимлида, который должен код ревью делать за джунами...
Комментарии в коде на русском .
Представьте что они на китайском и всё станет понятно.
Остальное несущественно если код рабочий.