STM32 HAL_UART_Transmit_IT永远不会返回

时间:2017-11-06 16:51:27

标签: interrupt stm32 uart st

我使用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__);
    }
}

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

在msp文件中我有

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

并拥有文件

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 */
}

我错过了什么?

2 个答案:

答案 0 :(得分: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)
{

}

或者你可以这样做(对 int8_t 使用 sizeof 而不是 strlen)

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

}

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

答案 1 :(得分:0)

添加延迟也允许发送数据解决此问题。 HAL_Delay(100)