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

STM32U575的DMA+PWM输出,求指教

[复制链接]
韩dongsheng 提问时间:2023-9-22 14:08 / 已解决

image.png

image.png

这是我的CubeMX配置。调用的是HAL_TIM_PWM_Start_DMA(&htim4,TIM_CHANNEL_1,(uint32_t )pulse,(176));库函数,// DMA 传输完成回调函数 void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef htim) { // __HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_1,0); HAL_TIM_PWM_Stop_DMA(&htim4,TIM_CHANNEL_1); } //DMA 需要传输的数据 uint16_t pulse[176] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 59,59,59,59,59,59,59,59, 29,29,29,29,29,29,29,29, 59,59,59,59,59,59,59,59,

29,29,29,29,29,29,29,29, 59,59,59,59,59,59,59,59, 29,29,29,29,29,29,29,29,

29,29,29,29,29,29,29,29, 29,29,29,29,29,29,29,29, 59,59,59,59,59,59,59,59,

29,29,29,29,29,29,29,29, 29,29,29,29,29,29,29,29, 29,29,29,29,29,29,29,29,};

把HAL_TIM_PWM_Start_DMA()函数放在while(1)之前,示波器上看不到波形,哪位大佬可以帮忙看看

image.png
收藏 评论5 发布时间:2023-9-22 14:08

举报

5个回答
xmshao 最优答案 回答时间:2023-9-26 21:42:59

韩dongsheng 发表于 2023-9-23 09:45
![9ae4df60b168e8e7f7cfe520e6c4dad.png](data/attachment/forum/202309/23/094206lxewjpw1ovsv1kqq.pn ...

[md]一个问题不要重复开贴,乱的很!

我后来验证了下,基于你当前配置,你将那个DMA启动函数里的 length 14改为28即可。

至于原因,在STM32参考手册里有讲,你可以抽时间比较性地看看。

xmshao 回答时间:2023-9-22 15:36:38
看了下你的配置和部分代码,说实话,没看出明显问题来。


使用CubeMx进行配置的话,建议使用最新版本的。


我看你在DMA完成中断的回调函数里把DMA停掉了,后面你什么时候开启的?


当然,你不开启也可以。 不过,为了查看效果,建议回调函数里先不做STOP处理,让DMA循环跑起来,看看有无波形。


有时只输出一串波形用示波器查看时可能未必捕捉到了,何况 我看你设置的时间参数貌似也挺短的。
韩dongsheng 回答时间:2023-9-22 17:07:55

xmshao 发表于 2023-9-22 15:36
看了下你的配置和部分代码,说实话,没看出明显问题来。</p>
<p>

uint16_t test[8]={0xFF,0,0xFF,0,0xFF,0,0xFF,0,};//这是写入的数据,就写八个

84b29ac796b5bc3c549604b0290a9ea.jpg

这是注释掉STOP的波形

1fd2b85ce7516793f9bb4a60233e700.jpg

上图是打开STOP的波形

我把开启DMA传输放在了while(1)里。这应该是没传输完数据就触发了中断,给停止了吧?找不到解决的方法

84b29ac796b5bc3c549604b0290a9ea.jpg
韩dongsheng 回答时间:2023-9-23 09:45:48

9ae4df60b168e8e7f7cfe520e6c4dad.png

上面的波形是F103PWM+DMA输出的波形,下面那个是U575输出的波形,上面的波形我经过G070进行验证了,没有任何问题,PWM的频率和周期都是一样的,uint16_t test[14]={8,8,8,8,8,8,8,8,8,8,8,8,8,8};,这是发送的数据,使用HAL_TIM_PWM_Start_DMA(&htim4,TIM_CHANNEL_1,(uint32_t *)test,14);这个函数放在了While(1)里。

在回调函数里面关闭DMA传输。 void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) { HAL_TIM_PWM_Stop_DMA(&htim4,TIM_CHANNEL_1); }

我感觉还是DMA配置问题,有大佬可以看看我问题出在哪里嘛

9ae4df60b168e8e7f7cfe520e6c4dad.png
9ae4df60b168e8e7f7cfe520e6c4dad.png
韩dongsheng 回答时间:2023-9-27 09:05:28

xmshao 发表于 2023-9-26 21:42
一个问题不要重复开贴,乱的很!</p>
<p>我后来验证了下,基于你当前配置,你将那个DMA启动函数里的 length ...

[md]抱歉抱歉

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版