你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f429 uart dma空闲中断接收不正常

[复制链接]
312011 提问时间:2018-6-15 09:05 /
本帖最后由 312011 于 2018-6-15 09:23 编辑

/*
* uart1 dma rx idle intrrupt process
*/
void Addedto_USART1_IRQHandler(void)
{
        if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)!=RESET) //uart1 dma rx idle intrrupt
        {
                static  uint32_t rxdatanum,temp;
        
                __HAL_UART_CLEAR_IDLEFLAG(&huart1);        //clear uart1 dma rx idle intrrupt flag
                temp =huart1.Instance->SR;
                temp =huart1.Instance->DR;
                temp=huart1.hdmarx->Instance->NDTR;
//                CLEAR_BIT(huart1.Instance->CR3, USART_CR3_DMAR);
//                HAL_DMA_Abort(huart1.hdmarx);
                __HAL_DMA_DISABLE(huart1.hdmarx);
                rxdatanum=UART_DMA_RX_SIZE-(__HAL_DMA_GET_COUNTER(huart1.hdmarx));
               
                /* Enable the DMA transfer for the receiver request by setting the DMAR bit
    in the UART CR3 register */
    SET_BIT(huart1.Instance->CR3, USART_CR3_DMAR);
                /* Enable the Peripheral */
    __HAL_DMA_ENABLE(huart1.hdmarx);
               
                osMessagePut(Queue_EventUart,(rxdatanum +((uint32_t )EVENT_UART1_RX<<16)),0);//send rx event
        }        
        
}

/**
* @brief This function handles USART1 global interrupt.
*/
void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */
        
  /* USER CODE END USART1_IRQn 0 */
  HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */
        Addedto_USART1_IRQHandler();
  /* USER CODE END USART1_IRQn 1 */
}
为什么这样第一次无法正确接收,需要发两次甚至更多次才能收到上一次的数据?中断停在这个空闲中断处理函数里的sMessagePut函数,发现rxdatanum和temp值不正确,什么原因?

收藏 评论2 发布时间:2018-6-15 09:05

举报

2个回答
电子星辰 回答时间:2018-6-15 13:28:55
HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)的Size大了?

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

feixiang20 回答时间:2018-6-16 02:57:57
看是否有缩短延时,检查数组越界和堆栈溢出,设置断点再检查

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版