Просьба не кидать тапками.
Экспериментирую с discovery f4. Суть эксперимента передать данные с компа на отладочную плату по uart массив из 5 символов, где с 1 по 4 символы указывают какой светодиод должен зажечься, а 5 символ указывает задержку в секундах. Используется DMA.
Например, посылается команда в uart в виде "10001" это означает что зажечь Led1 и с интервалом в 1 сек от Led1 переключать светодиоды по кругу в основном цикле. Команда "00015" - зажечь Led4 и с интервалом в 5 сек от этого переключать светодиоды с этим интервалом в основном цикле.
Задержку использую HAL_DELAY.
Основная проблема в том, что в HAL_Delay(0x3E8*(rxBuf[4]-0x30)) в самой первой проверке у меня, в основном цикле, не получается сформировать задержку, т.е. подаю например "10001" в итоге горит только LED1 и дальше переключение не происходит.
0x3E8 - это 1000 в hex, rxBuf[4] - char из uart, 0x30 смещение в ASCII
Чтобы не загаживать тему прикрепил main
while (1)
{
if (rxBuf[0]=='1')
{
HAL_Delay(0x3E8*(rxBuf[4]-0x30));
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_13);
HAL_Delay(0x3E8*(rxBuf[4]-0x30));
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_14);
HAL_Delay(0x3E8*(rxBuf[4]-0x30));
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_15);
HAL_Delay(0x3E8*(rxBuf[4]-0x30));
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12);
}
//////////
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(huart);
/* NOTE: This function should not be modified, when the callback is needed,
the HAL_UART_RxCpltCallback could be implemented in the user file
*/
if(rxBuf[0] =='1')
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET);
chn = 12;
printf("LED_12 ON\r\n");
}
else
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_RESET);
chn = 120;
printf("LED_12 OFF\r\n");
}
if(rxBuf[1] =='1')
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_SET);
chn = 13;
printf("LED_13 ON\r\n");
}
else
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_RESET);
chn = 130;
printf("LED_13 OFF\r\n");
}
if(rxBuf[2] =='1')
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET);
chn = 14;
printf("LED_14 ON\r\n");
}
else
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_RESET);
chn = 140;
printf("LED_14 OFF\r\n");
}
if(rxBuf[3] =='1')
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_SET);
chn = 15;
printf("LED_15 ON\r\n");
}
else
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_RESET);
chn = 150;
printf("LED_15 OFF\r\n");
}
if(rxBuf[4] >'0')
{
printf("Time %d \r\n", (rxBuf[4]-0x30)*1000);
}
HAL_UART_Receive_DMA(&huart2, (uint8_t *)rxBuf, sizeof(rxBuf));
}
main.c