STM32F103 задержка события кнопки UART медленная - PullRequest
0 голосов
/ 20 сентября 2018

Я тестирую очень простую передачу с UART1 на моем STM32F103C8T6, используя CUBE MX и Keil v5.

Я подготовил проект в CUBE MX, включающий UART, и перешел к Keil.

ВсеЧестно говоря, работает нормально, если я нажимаю кнопку на плате (PA0), передаваемая строка корректно меняется с stringa1 на stringa2, но остается на stringa2 в течение 3 или 4 циклов, даже если я нажимаю и отпускаю кнопку очень быстро.

Кажется, что проблема синхронизации или типа синхронизации в шортах, даже если кнопка была отпущена, HAL отправляет stringa2, как будто я все еще держу палец на кнопке PA0.

В чем может быть проблема?

int main(void)
{
  /* USER CODE BEGIN 1 */
    char *stringa1 = "ciao\r\n";
    char *stringa2 = "pressed\r\n";

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
      /*
        HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
        HAL_Delay(500);
        HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
        HAL_Delay(500);
      */

        if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0)){
            HAL_UART_Transmit(&huart1, (uint8_t*) stringa1, strlen(stringa1), 10);
        } else {
            HAL_UART_Transmit(&huart1, (uint8_t*) stringa2, strlen(stringa2), 10);          
        }

        HAL_Delay(500);

  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}
...