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:部分脉冲的图形不是很好,高电平有很多毛刺。可能多次进入中断 

 

//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

posted @ 2019-01-11 10:50  珵诩媛  阅读(131)  评论(0编辑  收藏  举报