使用HAL_UART_Transmit 函数可以发送数据,但是使用HAL_UART_Transmit_IT 函数发送失败,求可能的原因。

已邀请:

lpxv - 90后电子神技研究生

赞同来自: admin 黎昕 netube

之前我也遇到这样问题HAL_UART_Transmit_IT 是采用中断发送,
在中断里面发送一个数据,发送完又进中断,继续发送,直到发送完所有数据就不再进中断
你没有开启中断,配置中断,当然不可以使用了,
我给你看我写的几个代码,
配置
  huart1.Instance = USART1;
  huart1.Init.BaudRate = 115200;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;//8
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  HAL_UART_Init(&huart1);
  //这两行是自己加的,
  HAL_NVIC_SetPriority(USART1_IRQn, 3 ,0);
  HAL_NVIC_EnableIRQ(USART1_IRQn); 
//stm32f4xx_it.c里面这样写
void USART1_IRQHandler(void)
{
    HAL_UART_IRQHandler(&huart1);
}
有问题可以再问我哦,我也是刚刚搞明白

southeast8000

赞同来自:

多谢楼上分享。
中断时开启的,中断接收是OK的,就是中断发送不知道那个地方设置有问题,要多次执行中断发送函数(HAL_UART_Transmit_IT),才能有一次发送成功(电脑端的串口中断软件显示接收的数据),发送成功的数据其字符串也是正常的。
1、 
    HAL_NVIC_SetPriority(USART1_IRQn, 0, 1);
    HAL_NVIC_EnableIRQ(USART1_IRQn);

2、   
     if(HAL_UART_Transmit_IT(&huart1, (uint8_t*)TxBuffer1, TX_BUFFER_SIZE1)!= HAL_OK)
        {
            Error_Handler();
        }
  
  
        while (UartReady != SET)
        {
        }

        UartReady = RESET;

southeast8000

赞同来自: lpxv

呵呵,可以了,竟然是USB 转232串口有问题。
直接用台式机串口就OK了。

要回复问题请先登录注册