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:部分脉冲的图形不是很好,高电平有很多毛刺。可能多次进入中断
//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:部分还是存在毛刺 ,监控发现修改寄存器错误,检查传输位数 .(举例不一定是下面这个寄存器)
//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