你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G070CB TIMER DMA 中断问题

[复制链接]
xiaoyan 提问时间:2023-2-23 14:21 / 未解决

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);

收藏 评论1 发布时间:2023-2-23 14:21

举报

1个回答
xmshao 回答时间:2023-2-23 17:03:21
看了下你的代码,没有看出啥问题。


我使用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 */
}
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版