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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?