Используя CubeIDE и плату STM32F4, я пытаюсь запустить преобразование AD C и заставить один из двух светодиодов мигать в зависимости от значения AD C - если значение меньше определенного предела, то один светодиод должен мигать, а другой остается выключенным, но если значение AD C больше установленного мной предела, то другой светодиод должен мигать. Это должно произойти, когда я нажимаю кнопку sh и мигание должно продолжаться, пока кнопка не будет нажата.
Итак, у меня есть 4 контакта - два (G2 и D8) выхода GPIO для мигающих светодиодов, один (A0) вывод аналогового входа и один вывод (F2) входа GPIO для кнопки. Он настроен как подтягивающий и подключен к GND с помощью кнопки.
Соответствующий код:
/* USER CODE BEGIN 0 */
uint32_t adcVal;
/* USER CODE END 0 */
/* USER CODE BEGIN 2 */
//HAL_ADC_Start(&hadc1);
HAL_ADC_Start_IT (&hadc1);
/* USER CODE END 2 */
/* USER CODE BEGIN 4 */
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
adcVal = HAL_ADC_GetValue(&hadc1);
if (!HAL_GPIO_ReadPin(GPIOF, GPIO_PIN_2)) {
HAL_ADC_Start_IT (&hadc1);
adcVal = HAL_ADC_GetValue(&hadc1);
if (adcVal > 2000) {HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_8); HAL_GPIO_WritePin(GPIOG, GPIO_PIN_2, GPIO_PIN_RESET);}
else {HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_2); HAL_GPIO_WritePin(GPIOD, GPIO_PIN_8, GPIO_PIN_RESET);}
HAL_Delay(500);
//HAL_ADC_Start_IT (&hadc1);
}
else {HAL_GPIO_WritePin(GPIOG, GPIO_PIN_2, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOD, GPIO_PIN_8, GPIO_PIN_RESET);}
}
/* USER CODE END 4 */
Я ничего не положил в то время (1) l oop.
При компиляции , Я не получаю ошибок или предупреждений, когда я запускаю код, тогда вывод F2 установлен в ВЫСОКОЕ значение (3 В, когда я измеряю его с помощью тестера, и обнуляется при нажатии кнопки), но светодиоды не реагируют вообще , хотя напряжение подается на A0. Я подозреваю, что неправильно использую AD C. Я хочу, чтобы AD C оставался свободным, считывал и преобразовывал значение, когда вывод, подключенный к кнопке, становится низким.
Когда я помещаю строки, связанные с GPIO, в while (1) l oop it тоже не работал Возможно, это где-то простая ошибка, но кто-нибудь может сказать мне, где это?
Я нашел такие строки из автоматически сгенерированного кода
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_8, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_2, GPIO_PIN_RESET);
, но когда я их закомментировал, это не помогло. Я также добавляю настройки AD C, возможно, проблема в этом:
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.ScanConvMode = DISABLE;
hadc1.Init.ContinuousConvMode = DISABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 1;
hadc1.Init.DMAContinuousRequests = DISABLE;
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;