Есть 3 проблемы с вашим кодом:
- Вы не инициализируете
collect_bits
- Ваш цикл читает только 31 бит
- Вы используете битовый кодИ (иначе &) где вы должны использовать побитовое ИЛИ (иначе |)
Таким образом, предполагая, что HAL_GPIO_ReadPin
возвращает либо 0
, либо 1
, вы можете сделать:
unsigned int collect_bits = 0;
for (int i = 0; i < 32; i++)
{
unsigned int current_bit = HAL_GPIO_ReadPin (GPIOC,GPIO_PIN_9);
collect_bits |= current_bit << i; // Shift current_bit to position i and
// put it into collect_bits using bit wise OR
}
Теперь первый бит, считанный с контакта, находится в битовой позиции 0, равной collect_bits
, второй бит, считанный с контакта, находится в битовой позиции 1, равной collect_bits
и т. Д.
Кстати:Вы должны убедиться, что unsigned int
- это 32 бита в вашей системе