STM32 не удалось получить данные с помощью HAL_UART_Recceive_IT - PullRequest
0 голосов
/ 10 мая 2019

Я новичок в STM32, у меня есть проект, и мне нужно получать данные с другого устройства, такого как arduino, и теперь я пытаюсь передать данные из UART 3, и я получаю данные с помощью UART 1., но я не могу получить какие-либо данные,Я подключаю TX UART 3 к RX UART 1 и TX UART 1 к RX UART 3.

/* USER CODE BEGIN PV */
int i = 0;
char bufferReceive[6], bufferTransmit[10];

/* USER CODE END PV */

/* USER CODE BEGIN 0 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if (huart->Instance == USART1)  //current UART
        {
        HAL_UART_Receive_IT(&huart1, (uint8_t*)bufferReceive, 1);   //activate UART receive interrupt every time
        }
}

/* USER CODE END 0 */

int main(void)
{
 HAL_UART_Receive_IT(&huart1, (uint8_t*)bufferReceive, 1);
 while (1)
  {
    /* USER CODE END WHILE */`enter code here`


     sprintf(bufferTransmit,"%d\n",i);
      HAL_UART_Transmit(&huart3, (uint8_t*)bufferTransmit, sizeof(bufferTransmit), 1000);
                    HAL_Delay(500);

                    i++;

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

Вы ничего не инициализируете.Периферийные устройства, контакты, часы и т. Д. Должны быть установлены, прежде чем они смогут работать.

0 голосов
/ 27 июня 2019

Во-первых, ваш код запутан и труден для чтения.

Во-вторых, вам не хватает всей области инициализации до while(1), поэтому ваша система не должна ничего делать.

/* USER CODE BEGIN PV */
int i = 0;
char bufferReceive[6], bufferTransmit[10];
/* USER CODE END PV */

/* USER CODE BEGIN 0 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if (huart->Instance == USART1)
    {
        HAL_UART_Receive_IT(&huart1, (uint8_t*)bufferReceive, 1);
    }
}
/* USER CODE END 0 */

int main(void)
{
    /* USER CODE BEGIN 1 */

    /* 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_USART3_UART_Init();
    MX_USART1_UART_Init();
    /* USER CODE BEGIN 2 */
    HAL_UART_Receive_IT(&huart1, (uint8_t*)bufferReceive, 1);
    /* USER CODE END 2 */

    /* Infinite loop */
    /* USER CODE BEGIN WHILE */
    while (1)
    {
        sprintf(bufferTransmit,"%d\n",i);
        HAL_UART_Transmit(&huart3, (uint8_t*)bufferTransmit, sizeof(bufferTransmit), 1000);
        HAL_Delay(500);
        i++;
        /* USER CODE END WHILE */
        /* USER CODE BEGIN 3 */
    }
    /* USER CODE END 3 */
}

Вы получаете один байт в HAL_UART_Receive_IT(&huart1, (uint8_t*)bufferReceive, 1);.

, который не ждет, он просто движется вперед.

Затем вы передаете bufferTransmit, который затем заставляет UART1 получить один байт и продолжаетчтобы получать все байты один за другим в одной и той же ячейке памяти.

Кажется, вы не используете i правильно, поскольку вы, вероятно, хотите что-то вроде HAL_UART_Receive_IT(&huart1, (uint8_t*)&bufferReceive[i], 1);

...