这是我的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)之前,示波器上看不到波形,哪位大佬可以帮忙看看 |
如何利用timer对一个频率变化范围比较广的中低频脉冲信号进行精确脉冲长度/周期/频率测定
为什么我的stm32cubemx里高级定时器只能配置输出比较的互补输出,而不能直接配置PWM互补输出?
STM32F407输出方波最高频率
定时器回调函数只能执行一次
修改stm32f407 tim14的ccr1,但是占空比不变?
修改stm32f407 tim14的ccr1,但是占空比不变
STM32F723ZET6 定时器输入捕获通道的GPIO不能上拉
stm32f10x_tim.h文件编译错误?
PWM输出
stm32用tim输出pwm似乎先使能一次cen再设置cnt才有用?
[md]一个问题不要重复开贴,乱的很!
我后来验证了下,基于你当前配置,你将那个DMA启动函数里的 length 14改为28即可。
至于原因,在STM32参考手册里有讲,你可以抽时间比较性地看看。
使用CubeMx进行配置的话,建议使用最新版本的。
我看你在DMA完成中断的回调函数里把DMA停掉了,后面你什么时候开启的?
当然,你不开启也可以。 不过,为了查看效果,建议回调函数里先不做STOP处理,让DMA循环跑起来,看看有无波形。
有时只输出一串波形用示波器查看时可能未必捕捉到了,何况 我看你设置的时间参数貌似也挺短的。
uint16_t test[8]={0xFF,0,0xFF,0,0xFF,0,0xFF,0,};//这是写入的数据,就写八个
这是注释掉STOP的波形
上图是打开STOP的波形
我把开启DMA传输放在了while(1)里。这应该是没传输完数据就触发了中断,给停止了吧?找不到解决的方法
上面的波形是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配置问题,有大佬可以看看我问题出在哪里嘛
[md]抱歉抱歉