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

STM32L4R5的DMAMUX异常

[复制链接]
浮云流水zjf 提问时间:2019-5-29 17:50 /
        __HAL_RCC_DMA1_CLK_ENABLE();
        __HAL_RCC_DMAMUX1_CLK_ENABLE();
    /*##-3- Configure the DMA ##################################################*/
    /* Configure the DMA handler for Transmission process (DMA的发送通道)*/
    hdma_tx.Instance                 = DMA1_Channel5;                        //DMA1_Channel3
    hdma_tx.Init.Request             = DMA_REQUEST_GENERATOR0;        // DMA_REQUEST_SPI2_TX
    hdma_tx.Init.Direction           = DMA_MEMORY_TO_PERIPH;        //内存到外设
    hdma_tx.Init.PeriphInc           = DMA_PINC_DISABLE;
    hdma_tx.Init.MemInc              = DMA_MINC_ENABLE;                //DMA_MINC_ENABLE  DMA_MINC_DISABLE
    hdma_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;                //DMA_PDATAALIGN_WORD  DMA_PDATAALIGN_BYTE
    hdma_tx.Init.MemDataAlignment    = DMA_MDATAALIGN_BYTE;                // DMA_MDATAALIGN_BYTE  DMA_MDATAALIGN_WORD
    hdma_tx.Init.Mode                = DMA_CIRCULAR;                        //由 DMA_NORMAL 改为循环发送 DMA_CIRCULAR
    hdma_tx.Init.Priority            = DMA_PRIORITY_HIGH;
       
    HAL_DMA_Init(&hdma_tx);
    /* Associate the initialized DMA handle to the the SPI handle */
    __HAL_LINKDMA(&ads1298_hspi, hdmatx, hdma_tx);
        /* Register Error Callback */
        HAL_DMA_RegisterCallback(&hdma_tx, HAL_DMA_XFER_ERROR_CB_ID, &HAL_TransferError);
       
        /* NVIC configuration for DMA transfer complete interrupt*/
        HAL_NVIC_SetPriority(DMA1_Channel5_IRQn, 3, 0);
        HAL_NVIC_EnableIRQ(DMA1_Channel5_IRQn);

        /*##-3- Configure and enable the DMAMUX Request generator  ####################(配置和使能DMAMUX请求生成器)*/
        dmamux_ReqGenParams.SignalID  = HAL_DMAMUX1_REQUEST_GEN_EXTI8;    /* External request signal is EXTI0 signal        HAL_DMAMUX1_REQ_GEN_EXTI8*/

        dmamux_ReqGenParams.Polarity  = HAL_DMAMUX_REQUEST_GEN_FALLING;    /* External request signal edge is Rising  */
        dmamux_ReqGenParams.RequestNumber = 27;                                  /* 1 requests on each edge of the external request signal  27*/

        HAL_DMAEx_ConfigMuxRequestGenerator(ads1298_hspi.hdmatx, &dmamux_ReqGenParams);

        /* NVIC configuration for DMAMUX request generator overrun errors*/
        HAL_NVIC_SetPriority(DMAMUX1_OVR_IRQn, 4, 0);
        HAL_NVIC_EnableIRQ(DMAMUX1_OVR_IRQn);
       
        HAL_DMAEx_EnableMuxRequestGenerator (ads1298_hspi.hdmatx);
        HAL_SPI_Transmit_DMA(&ads1298_hspi, adTxBuffer, 27);

      代码如上,要配置的功能是DMAMUX检测到PF8的下降沿,就通过通过DMA1的DMA1_Channel5向SPI2->DR发送27个0xAA,实测发现:
     dmamux_ReqGenParams.RequestNumber在的 值[1,5]范围内时,每次中断触发时,DMA1_Channel5能够发送[1,5]个数,但在[6,32]范围内时,发送的个数就不够了,严重丢数。查了下库的寄存器配置,没有问题。现在不知道是自己调用的不对,还是其他问题?各位大神路过的帮看看!谢谢

收藏 评论1 发布时间:2019-5-29 17:50

举报

1个回答
慎微 回答时间:2019-6-3 10:04:08
你要传送的 adTxBuffer 跟 dmamux_ReqGenParams 不是一致的吧。
换言之,你的adTxBuffer  是否被其他的程序更该?
再者,你用的是SPI的 DMA 传送。检查 SPI 设置。

评分

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

查看全部评分

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版