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

关于DMA搬运的启停。当第一次搬运的时候多个通道是可以同时起步的,但是停止之后再初始化,通道的DMA搬运就不同步了,并且这个搬运的数组,会被吃掉一个值,这是什么

[复制链接]
yzw-A 提问时间:2023-9-4 19:35 / 未解决

//溢出中断

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {

if(htim ->Instance == TIM1) {

    if(A ==0)
    {
            HAL_TIM_Base_Stop(&htim2);
                    __HAL_TIM_SET_COUNTER(&htim2,0);
                    HAL_DMA_Abort(&hdma_tim2_ch1); // hdma为DMA句柄
                    HAL_DMA_Abort(&hdma_tim2_ch2_ch4); // hdma为DMA句柄
                    HAL_DMA_Abort(&hdma_tim2_ch3); // hdma为DMA句柄


                    HAL_DMA_DeInit(&hdma_tim2_ch1);
                    HAL_DMA_DeInit(&hdma_tim2_ch2_ch4);
                    HAL_DMA_DeInit(&hdma_tim2_ch3);

            __HAL_TIM_DISABLE_DMA(&htim2, TIM_DMA_UPDATE); // htim为PWM定时器句柄,TIM_DMA_UPDATE为DMA请求源

// HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_1); // 停止PWM输出

         HAL_TIM_PWM_Stop(&htim2,TIM_CHANNEL_1);
         HAL_TIM_PWM_Stop(&htim2,TIM_CHANNEL_2);
         HAL_TIM_PWM_Stop(&htim2,TIM_CHANNEL_3);





            flag+=1;
            if (flag == 1  ||flag == 5)
            {
                HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET);//PA7的波形
            }
            if(flag == 1 || flag ==3 || flag == 5)
            {
                    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
                                                HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
                                                HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);
            }
            if (flag == 3  ||flag == 5)
            {
                HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET);//PA6的波形
            }



            HAL_TIM_OC_Start_IT(&htim1, TIM_CHANNEL_1); // 启动比较中断


    }

}

}

//比较中断 void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim) {
if (htim->Instance == TIM1) {

                if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) {

                    HAL_DMA_Abort(&hdma_tim2_ch1); // hdma为DMA句柄
                    HAL_DMA_Abort(&hdma_tim2_ch2_ch4); // hdma为DMA句柄
                    HAL_DMA_Abort(&hdma_tim2_ch3); // hdma为DMA句柄
                    HAL_TIM_Base_DeInit(&htim2);
                    MX_MY_TIM2_Init(16,423,0);                  
                    HAL_DMA_DeInit(&hdma_tim2_ch1);
                    HAL_DMA_DeInit(&hdma_tim2_ch2_ch4);
                    HAL_DMA_DeInit(&hdma_tim2_ch3);



                    HAL_TIM_Base_MspInit(&htim2);




                            __HAL_TIM_SET_COUNTER(&htim2,0);
                    HAL_TIM_PWM_Start_DMA(&htim2,TIM_CHANNEL_1,(uint32_t *)pulse1,(7));
                    HAL_TIM_PWM_Start_DMA(&htim2,TIM_CHANNEL_2,(uint32_t *)pulse2,(8));
                    HAL_TIM_PWM_Start_DMA(&htim2,TIM_CHANNEL_3,(uint32_t *)pulse3,(4));

                }

                    if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) {

                                flag+=1;
                                if (flag == 4 ||flag == 6)
                                {
                                    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET);
                                }
                                if (flag == 4 ||flag == 2 || flag == 6)
                                {
                                    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);

                                }
                                if (flag == 4 ||flag == 2)
                                {
                                    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET);
                                }
                                if (flag == 6)
                                {
                                        flag = 0;
                                }

            }

} }

收藏 评论0 发布时间:2023-9-4 19:35

举报

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