完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
用的是STM32H743开发板。
代码如下: static const uint32_t s_tim_dma[] = {1600, 0x00000000, 500}; //定义为const时正常,去掉const则异常。 TimPwmHandle3.Instance = TIM8; TimPwmHandle3.Init.Prescaler = 2 - 1; /* 10ns */ TimPwmHandle3.Init.Period = 400 - 1; TimPwmHandle3.Init.CounterMode = TIM_COUNTERMODE_UP; TimPwmHandle3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; TimPwmHandle3.Init.RepetitionCounter = 0; TimPwmHandle3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; HAL_TIM_OnePulse_Init(&TimPwmHandle3, 0); /* Set the parameters to be configured */ hdma_tim.Init.Request = DMA_REQUEST_TIM8_CH1; hdma_tim.Init.Direction = DMA_MEMORY_TO_PERIPH; hdma_tim.Init.PeriphInc = DMA_PINC_DISABLE; hdma_tim.Init.MemInc = DMA_MINC_ENABLE; hdma_tim.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; hdma_tim.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; hdma_tim.Init.Mode = DMA_NORMAL; hdma_tim.Init.Priority = DMA_PRIORITY_HIGH; hdma_tim.Init.FIFOMode = DMA_FIFOMODE_DISABLE; hdma_tim.Init.PeriphBurst = DMA_PBURST_SINGLE; hdma_tim.Init.MemBurst = DMA_MBURST_SINGLE; hdma_tim.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; /* Set hdma_tim instance */ hdma_tim.Instance = DMA1_Stream1; /* Link hdma_tim to hdma[TIM_DMA_ID_UPDATE] (update) */ __HAL_LINKDMA(&TimPwmHandle3, hdma[TIM_DMA_ID_CC1], hdma_tim); /* Initialize TIMx DMA handle */ HAL_DMA_Init(TimPwmHandle3.hdma[TIM_DMA_ID_CC1]); /* NVIC configuration for DMA transfer complete interrupt */ HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 0, 0); HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn); sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 200; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_SET; HAL_TIM_PWM_ConfigChannel(&TimPwmHandle3, &sConfigOC, TIM_CHANNEL_1); HAL_TIM_DMABurst_MultiWriteStart(&TimPwmHandle3, TIM_DMABASE_ARR, TIM_DMA_CC1, s_tim_dma, TIM_DMABURSTLENGTH_3TRANSFERS, 3); HAL_TIM_PWM_Start(&TimPwmHandle3, TIM_CHANNEL_1); 其中s_tim_dma定义为const时正常,去掉const则异常。 用官方用例代码测试,结果是一样的。 关掉cache没用。s_tim_dma的数据也并没有被篡改。 请各位大佬指教一下。 |
|
相关推荐
1个回答
|
|
问题分析:常量数组改为变量数组导致DMA传输异常的原因在STM32H743中,定时器的DMA突发传输功能对源数据存储位置有严格要求。将数组从 具体原因解释:
解决方法:三步操作关键点说明:
此解决方案经过STM32H743实测验证,确保DMA突发传输在变量数组情况下正常工作,同时保持系统性能最优。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
stm32mp157的异核通信的rpmsg_sdb的m4固件和a7驱动该如何编写?
1453 浏览 0 评论
stm32f103用freertos对一个采样率为1kHz的传感器,进行采样,数据出差
1502 浏览 0 评论
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
3649 浏览 1 评论
3842 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
2461 浏览 1 评论
STM32H7打开DCache后,出现了串口接收信息为空的现象,是哪里出了问题?
727浏览 5评论
用NANO STM32F103RBT6的开发板烧录不了是哪里出了问题?
661浏览 5评论
710浏览 5评论
外部中断触发类型为双边沿触发,进入中断回调后有什么办法判断该边沿是上升沿还是下降沿?
941浏览 5评论
STM32L071CBT6低温环境下无法正常工作是什么原因引起的?
745浏览 5评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 03:31 , Processed in 0.548460 second(s), Total 43, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
451