0

我使用 cube mx 创建了一个项目,并希望使用 uart4 tx 和 rx 在中断模式下发送和接收字节。

我有 :

uint8_t buffer[] = "test\r\n";

if(HAL_UART_Transmit_IT(&huart4, (uint8_t*)buffer, strlen(buffer))!= HAL_OK)
{

}

UART初始化是

static void MX_UART4_Init(void)
{
    huart4.Instance = UART4;
    huart4.Init.BaudRate = 9600;
    huart4.Init.WordLength = UART_WORDLENGTH_8B;
    huart4.Init.StopBits = UART_STOPBITS_1;
    huart4.Init.Parity = UART_PARITY_NONE;
    huart4.Init.Mode = UART_MODE_TX_RX;
    huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
    huart4.Init.OverSampling = UART_OVERSAMPLING_16;
    huart4.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
    huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
    if (HAL_UART_Init(&huart4) != HAL_OK)
    {
        _Error_Handler(__FILE__, __LINE__);
    }
}

对 Transmit 的调用永远不会返回,只是坐在那里。

在我的 msp 文件中

HAL_NVIC_SetPriority(UART4_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(UART4_IRQn);

并在 it 文件中

void UART4_IRQHandler(void)
{
    /* USER CODE BEGIN UART4_IRQn 0 */

    /* USER CODE END UART4_IRQn 0 */
    HAL_UART_IRQHandler(&huart4);
    /* USER CODE BEGIN UART4_IRQn 1 */

    /* USER CODE END UART4_IRQn 1 */
}

我错过了什么?

4

2 回答 2

1

问题与 uint8_t buffer[] = "test\r\n"; 右边是char,左边是uint8。因此,您必须执行以下操作

char buffer[] = "test\r\n";
if(HAL_UART_Transmit_IT(&huart4, (char*)buffer, strlen(buffer))!= HAL_OK)
{

}

或者您可以这样做(将 sizeof 用于 int8_t 而不是 strlen)

unit8_t buffer[] = "test\r\n";
if(HAL_UART_Transmit_IT(&huart4, (uint8_t*)buffer, sizeof(buffer))!= HAL_OK)
{

}

请在代码的第一行添加“string.h”

于 2021-04-18T21:20:24.143 回答
0

添加延迟也允许发送数据解决了这个问题。HAL_延迟(100)

于 2017-11-08T18:16:31.943 回答