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

STM32L4R5的DMAMUX异常

[复制链接]
fuyunliushuizjf 提问时间: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个回答
mikecai 回答时间:2019-6-3 10:04:08
你要传送的 adTxBuffer 跟 dmamux_ReqGenParams 不是一致的吧。
换言之,你的adTxBuffer  是否被其他的程序更该?
再者,你用的是SPI的 DMA 传送。检查 SPI 设置。

评分

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

查看全部评分

所属标签

相似问题

官网相关资源

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