MX_GPIO_Init();
/* USER CODE BEGIN 2 */
uint8_t led_state = 0x02;
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_WritePin(GPIOE, 0xFF00, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOE, led_state << 8, GPIO_PIN_SET);
HAL_Delay(5000);
led_state = led_state >> 1 | led_state << 7;
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
Здравствуйте, объясните пожалуйста простецкий год из учебного пособия. В наличии STM32F303VC Discovery. На плате светодиоды с PE8-PE15.
Данный код зажигает светодиод в последовательности PE9,PE8,PE15 и тд.
Вопрос следующий:
1) uint8_t led_state = 0x03; Данной командой мы завели переменную, которая равна 3, что под этим подразумевается? Если изменить это число, то изменяется шаг включение светодиода и одновременно включается PE9 и PE8. Не очень понимаю
2)HAL_GPIO_WritePin(GPIOE, led_state << 8, GPIO_PIN_SET); Это я так понимаю мы сначала устанавливаем самый первый светодиод, т.е. 8, но на практике ни так.
3) led_state = led_state >> 1 | led_state << 7; Эту строку совсем не понимаю. Мы сначала сдвигает светодиод вправо, т.е. до 9 и тут же влево на 7. И эта команда зажигает одновременно два светодиода. Вот она меня особенно вводит в ступор. А в совокупности с uint8_t led_state = 0x02; становится совсем не понятно.
Данный код можно само собой интерпретировать значительно проще через последовательность и без uint8_t led_state = 0x03;, но хочется разобраться именно в нем.