equal love

STM32H7调试笔记2(发送脉冲OK完成,解决脉冲毛刺)

调试笔记2+++++++++++++++++++++++++++++++++++++++

1、不同的寄存器的位数不一样调整

//

(uint32_t*)aSRC_Buffer, TIM_DMABURSTLENGTH_1TRANSFER);

//HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc,uint32_t* BurstBuffer, uint32_t BurstLength,uint16_t Bursttimes);

 

HAL_TIM_DMABurst_WriteStart(&htim5,TIM_DMABASE_PSC,TIM_DMA_UPDATE,(u32*)aADCxConvertedData[0],TIM_DMABURSTLENGTH_1TRANSFER,3);

BurstLength

 2、发送脉冲个数和完成后正确,占空比正确

  修改1:部分脉冲的图形不是很好,高电平有很多毛刺。可能多次进入中断 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//FUN:dma标志清除
//PRO:
//BAK:
//NOT:
void My_ClearDmaItFlag(DMA_TypeDef * DMAx,uint8_t Streamx)
{
    switch(Streamx)
    {
        case 0 : DMAx->LIFCR |= ((0x3d)<<0);break;
        case 1 : DMAx->LIFCR |= ((0x3d)<<6);break;
        case 2 : DMAx->LIFCR |= ((0x3d)<<16);break;
        case 3 : DMAx->LIFCR |= ((0x3d)<<(16+6));break;
        case 4 : DMAx->HIFCR |= ((0x3d)<<0);break;
        case 5 : DMAx->HIFCR |= ((0x3d)<<6);break;
        case 6 : DMAx->HIFCR |= ((0x3d)<<16);break;
        case 7 : DMAx->HIFCR |= ((0x3d)<<(16+6));break;
        default:break;
    }
}

 

  修改:2:部分还是存在毛刺 ,监控发现修改寄存器错误,检查传输位数 .(举例不一定是下面这个寄存器)

1
2
3
4
5
6
7
//hdma_tim1_up.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
//hdma_tim1_up.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
 
//其实实际只有16位,修改为
 
hdma_tim1_up.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
hdma_tim1_up.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;

  修改4:检测修改的定时器的DMA中断部分没有修改正确部分没有,TIM2没有修改成TIM4

 
posted @   珵诩媛  阅读(140)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示