
TIM1使用DMA 方式来产生PWM不同duty 的波形,想监控一下DMA 是否完成,但是无法进入中断。以下初始化的配置:(PWM 的波形是正确的,但是DMA完成的TC中断一直都没有监控到) LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMA1); / DMA interrupt init / / DMA1_Ch4_7_DMAMUX1_OVR_IRQn interrupt configuration / NVIC_SetPriority(DMA1_Ch4_7_DMAMUX1_OVR_IRQn, 0); NVIC_EnableIRQ(DMA1_Ch4_7_DMAMUX1_OVR_IRQn); / TIM1_UP Init / LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_5, LL_DMAMUX_REQ_TIM1_UP); LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_5, LL_DMA_DIRECTION_MEMORY_TO_PERIPH); LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_5, LL_DMA_PRIORITY_HIGH); LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_5, LL_DMA_MODE_CIRCULAR); LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_5, LL_DMA_PERIPH_NOINCREMENT); LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_5, LL_DMA_MEMORY_INCREMENT); LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_5, LL_DMA_PDATAALIGN_HALFWORD); LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_5, LL_DMA_PDATAALIGN_HALFWORD); LL_DMA_ConfigAddresses(DMA1, LL_DMA_CHANNEL_5, (uint32_t)&u16DMA_Buffer_Lower[0], (uint32_t)&TIM1->CCR1, LL_DMA_GetDataTransferDirection(DMA1, LL_DMA_CHANNEL_5)); LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_5, 230); LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_5); LL_DMA_EnableIT_TE(DMA1, LL_DMA_CHANNEL_5); LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_5); LL_TIM_ClearFlag_UPDATE(TIM1); LL_TIM_EnableIT_UPDATE(TIM1); LL_TIM_CC_EnableChannel(TIM1, LL_TIM_CHANNEL_CH1); LL_TIM_CC_EnableChannel(TIM1, LL_TIM_CHANNEL_CH1N); / Enable TIM1 outputs / LL_TIM_EnableAllOutputs(TIM1); / Enable counter / LL_TIM_EnableCounter(TIM1); LL_TIM_EnableDMAReq_UPDATE(TIM1); |
定时器使用DMA突发传输功能时,传入指针从常量数组改为变量数组后,传输功能异常。测试官方用例一样,是何原因?
STM32U3 IIC通信后,SPI+GPDMA 进入循环发送,DMA无法使能 寄存器USEF=1
分享一个PWM+DMA的BUG
STM32的TIM触发SPI的DMA发送使用NSS时MSSI的问题
PWM+DMA求助
STM32H743使用EXIT0触发SPI的DMA发送数据
STM32F373 SDAC1+DMA,数据只能更新一次?
STM32G473 定时器事件触发DMAburst传输错位?
STM32H743VIT6 HAL 串口DMA发送掉帧
32bit SPI使用DMA 初次不触发SPI中断 第二次发送不触发DMA中断
我使用G0芯片对TIM1 -CH1的pwm输出做了配置,基于更新事件做CCR的修改,没有啥问题,进入完成中断正常。
我的测试代码跟你的几乎一模一样,当然我这边输出也正常。我这里使用的是DMA1 channel 1.
uint16_t DMA_Buffer]={100,200,300,400,500,600,700,800,900,1000,0};
LL_DMA_ConfigAddresses(DMA1, LL_DMA_CHANNEL_1, (uint32_t)&DMA_Buffer0],\ (uint32_t)&TIM1->CCR1, LL_DMA_DIRECTION_MEMORY_TO_PERIPH);
LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, 10);
LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_1);
//LL_DMA_EnableIT_TE(DMA1, LL_DMA_CHANNEL_1);
LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
******************************************
void DMA1_Channel1_IRQHandler(void){
/* USER CODE BEGIN DMA1_Channel1_IRQn 0 */
LL_DMA_ClearFlag_TC1( DMA1);
__NOP();
__NOP();
__NOP();
/* USER CODE END DMA1_Channel1_IRQn 0 */
/* USER CODE BEGIN DMA1_Channel1_IRQn 1 */
/* USER CODE END DMA1_Channel1_IRQn 1 */
}