yinshaojie 发表于 2018-5-18 09:59:36

使用STM32F030K6 串口1无法接收

本帖最后由 yinshaojie 于 2018-5-18 10:01 编辑

/* USART1 init function */
static void MX_USART1_UART_Init(void)
{

huart1.Instance = USART1;
huart1.Init.BaudRate = 19200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
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;
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXOVERRUNDISABLE_INIT|UART_ADVFEATURE_DMADISABLEONERROR_INIT;
huart1.AdvancedInit.OverrunDisable = UART_ADVFEATURE_OVERRUN_DISABLE;
huart1.AdvancedInit.DMADisableonRxError = UART_ADVFEATURE_DMA_DISABLEONRXERROR;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
    _Error_Handler(__FILE__, __LINE__);
}

}
使用CUBE配置的,无法实现数据发送,可以接收数据,查询if ((USART1->ISR & UART_FLAG_TC)== 0)数据一直不成立

andeyqi 发表于 2018-5-18 11:19:48

本帖最后由 andeyqi 于 2018-5-18 11:24 编辑

是不是应该判断UART_FLAG_TC这位的逻辑判断的有问题,没有你的代码没法确定,正常逻辑应该等待是这位为1时(或者TXE为空时)发送数据。

wenyangzeng 发表于 2018-5-18 11:26:45

你应该不断执行:
HAL_UART_Receive(&huart1, (uint8_t *)RX_BUF,1);

安静ing 发表于 2018-5-18 11:29:06

    /* While the UART in reception process, user can transmit data through
   "aTxBuffer" buffer */
if(HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)aTxMessage, 1)!= HAL_OK)
{
      while(1) {};
}
/* Any data received will be stored "aRxBuffer" buffer : the number max of
   data received is 10 */
if(HAL_UART_Receive_IT(&UartHandle, (uint8_t *)aRxBuffer, 1) != HAL_OK)
{
      while(1) {};
}

HAL_UART_Transmit直接就能发送了

yinshaojie 发表于 2018-5-18 11:40:27

问题解决了,是管脚没有重映射
页: [1]
查看完整版本: 使用STM32F030K6 串口1无法接收