Я тестирую очень простую передачу с 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 */
}