RodionPI 0 28 ноября, 2021 Опубликовано 28 ноября, 2021 · Жалоба Добрый вечер, такое дело. Учусь программировать контроллеры с помощью ARM keil и STM32 Cube.У меня подключен таймер для мигания светодиода. После нажатия на кнопку он должен начать мигать в 2 раза чаще во время задержки, а потом выключится. Не понимаю каким образом мне поменять частоту таймера в функции int main() while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ button_state=HAL_GPIO_ReadPin(Button_1_GPIO_Port,Button_1_Pin); if (button_state==1) { HAL_GPIO_WritePin(Led2_GPIO_Port,Led2_Pin,GPIO_PIN_RESET); } if (button_state==0) { while(1) { HAL_GPIO_TogglePin(Led2_GPIO_Port,Led2_Pin); HAL_Delay(300); button_state=HAL_GPIO_ReadPin(Button_1_GPIO_Port,Button_1_Pin); if (button_state==0) { HAL_GPIO_TogglePin(Led2_GPIO_Port,Led2_Pin); HAL_Delay(2000); break; } } } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 29 ноября, 2021 Опубликовано 29 ноября, 2021 · Жалоба Не очень понятно что такое Цитата ...он должен начать мигать в 2 раза чаще во время задержки... За 0.34 секунды гугл дал мне понять, что HAL_Delay() опирается на SysTick, а тот является вообще сердцем всего HAL. Не надо его перенастраивать. В том виде, в котором сейчас написан Ваш исходник, будут пропуски нажатия кнопок. Подумайте, почему и в каких случаях. Постарайтесь написать цикл в так называемом автоматном стиле - в этом случае процессор будет очень быстро проходить его от начала до конца (и так по кругу), не блокируясь на HAL_Delay() (ведь он таки мешат в том числе быстрому опросу кнопки). А еще: любая кнопка - это 2 металлических пластинки. В момент нажатия они быстро соударяются, и в конечное положение "замкнуто" приходят не сразу. Там будет дребезг контактов, и ПО должно это учитывать, дабы избежать ложных срабатываний. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться