打印
[STM32F4]

STM32F407VE替换STM32F429VI出现UART1空闲中断异常问题

[复制链接]
827|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yuchl|  楼主 | 2022-6-29 17:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F429VI价格太高,用STM32F407VE替换,没有修改程序测试UART,SPI,CAN都正常。使用一段时间后发现UART1空闲中断只能接收一个字节,而UART2,3相同设置能正常接收;
           初始如下:
         if(uartHandle->Instance==USART1)
  {
  /* USER CODE BEGIN USART1_MspInit 0 */

  /* USER CODE END USART1_MspInit 0 */
    /* USART1 clock enable */
    __HAL_RCC_USART1_CLK_ENABLE();

    __HAL_RCC_GPIOA_CLK_ENABLE();
    /**USART1 GPIO Configuration
    PA9     ------> USART1_TX
    PA10     ------> USART1_RX
    */
    GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    /* USART1 DMA Init */
    /* USART1_RX Init */
    hdma_usart1_rx.Instance = DMA2_Stream2;
    hdma_usart1_rx.Init.Channel = DMA_CHANNEL_4;
    hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
    hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE;
    hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
    hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
    hdma_usart1_rx.Init.Mode = DMA_NORMAL;
    hdma_usart1_rx.Init.Priority = DMA_PRIORITY_LOW;
    hdma_usart1_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
    if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK)
    {
      Error_Handler();
    }

    __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart1_rx);

    /* USART1_TX Init */
    hdma_usart1_tx.Instance = DMA2_Stream7;
    hdma_usart1_tx.Init.Channel = DMA_CHANNEL_4;
    hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
    hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_usart1_tx.Init.MemInc = DMA_MINC_ENABLE;
    hdma_usart1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
    hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
    hdma_usart1_tx.Init.Mode = DMA_NORMAL;
    hdma_usart1_tx.Init.Priority = DMA_PRIORITY_LOW;
    hdma_usart1_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
    if (HAL_DMA_Init(&hdma_usart1_tx) != HAL_OK)
    {
      Error_Handler();
    }

    __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart1_tx);

    /* USART1 interrupt Init */
    HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);
    HAL_NVIC_EnableIRQ(USART1_IRQn);
  /* USER CODE BEGIN USART1_MspInit 1 */

  /* USER CODE END USART1_MspInit 1 */
  }

           接收处理如下:

            __HAL_UART_CLEAR_IDLEFLAG(&huart1);
            HAL_UART_DMAStop(&huart1);
            temp = huart1.hdmarx->Instance->NDTR;
            Usart1Type1.rx_len =  UART_RECEIVE_LEN - temp;
            Usart1Type1.receive_flag = 1;
            HAL_UART_Receive_DMA(&huart1, Usart1Type1.usartDMA_rxBuf, UART_RECEIVE_LEN);
            __HAL_DMA_SET_COUNTER(huart->hdmarx, UART_RECEIVE_LEN);
            __HAL_DMA_ENABLE(huart->hdmarx);

实在好奇怪!


使用特权

评论回复
沙发
yuchl|  楼主 | 2022-6-29 17:21 | 只看该作者
用STM32CubeMX生产V1.1软件,MCU选择STM32F407VE,生成代码测试UART1 IDEL+DMA接收, UART1接收问题依旧;更改keil到V5.29测试 -> USART1接收数据情况依旧;

使用特权

评论回复
板凳
Uriah| | 2022-10-5 10:14 | 只看该作者

具存储功能的存储器芯片也能加密

使用特权

评论回复
地板
Bblythe| | 2022-10-5 13:13 | 只看该作者

大部分能够读取或者识别Flash上的数据就能够获得Firmware文件

使用特权

评论回复
5
Pulitzer| | 2022-10-5 16:12 | 只看该作者

如果在编程时加密锁定位被使能/锁定,就无法用普通编程器直接读取单片机内的程序

使用特权

评论回复
6
Clyde011| | 2023-4-1 07:15 | 只看该作者

从定时器为TIM2,从模式选择为门控模式,触发源选择ITR0,开启定时器2中断。

使用特权

评论回复
7
万图| | 2023-4-1 09:11 | 只看该作者

输出了5个频率为10KHz的PWM脉冲

使用特权

评论回复
8
Uriah| | 2023-4-1 10:14 | 只看该作者

使能主从模式,触发事件选择为更新事件,不需要开启中断。

使用特权

评论回复
9
帛灿灿| | 2023-4-1 12:10 | 只看该作者

根据实际需求选择用哪种方式

使用特权

评论回复
10
Bblythe| | 2023-4-1 13:13 | 只看该作者

主定时器为TIM1,通道2配置为PWM输出

使用特权

评论回复
11
周半梅| | 2023-4-1 15:09 | 只看该作者

主从定时的方式占用CPU资源少

使用特权

评论回复
12
Pulitzer| | 2023-4-1 16:12 | 只看该作者

主从定时器门控的方式

使用特权

评论回复
13
周半梅| | 2023-4-1 17:15 | 只看该作者

都可以产生指定个数的PWM脉冲

使用特权

评论回复
14
童雨竹| | 2023-4-1 18:08 | 只看该作者

中断计数的方式实现简

使用特权

评论回复
15
Wordsworth| | 2023-4-1 19:11 | 只看该作者

当PWM频率较高时,频繁的中断将影响程序运行的效率

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

165

主题

722

帖子

2

粉丝