
使用的是STM32L0系列,准备使用延时函数使PWM波形移相,现在延时函数不起作用 delay.c函数如下: //us void delay_us(uint32_t nus) { uint32_t temp; SysTick->LOAD = 30*nus; SysTick->VAL=0X00; SysTick->CTRL=0X01; do { temp=SysTick->CTRL; }while((temp&0x01)&&(!(temp&(1<<16)))); SysTick->CTRL=0x00; SysTick->VAL =0X00; } main函数使用delay如下: HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4); delay_us(20); HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2); 但是定时器2的2通道输出PWM波并没有发生延时变化,这是为什么? |
FlyMcu下载写入出错问题
型号STM32L010RB可以用来做两路BUCK移相小电源?
下载程序后必须重新上电后运行才能正常
NFC天线设计工具
STM32L071 配置RTC为24小时制,13点的时候会变为1点
STM32L071CBT6低温环境下无法正常工作
nucleo-l053r8 BOARD NAME修改
各位好,我遇到了一个问题,一直没有解决,关于STM32L071 bank问题
STM32L073RZT6 PA2不能置1
STM32L07系列低功耗串口应用
其次,你现在觉得不起作用,是基于2个TIMER输出通道没有产生带相移的
输出而得出的结论,只能说这个方式不可行,不能说这个延时函数本身没作用。
其实,目前你这个方式只能影响到起始输出那一刻,但没法影响到2个输出通道的相位。
打个比方,就像有人喊踏步踏的口令,开始可能有人动作慢点,别人踏步几个回合后才动起来。但当他踏步起来后还是严格按照口
令来的,最后你是看不到有谁踏步跟别人不同步的情况的,顶多发现刚开始有人动作慢点,后面的踏步都若严格按口令来的话是看不到
谁踏步跟别人有何异样。
你这个问题好像昨天咨询过,给过你一些参考回复。
可以基于一个定时器的2个通道,一个通道使用PWM输出模式,一个使用OC toggle输出模式结合DMA来实现。
或者使用2个定时器建立主从模式,各选1个通道来实现,通过设置不同的计数器初始值来产生输出相移。
第2种方式即2个定时器建立主从模可能比较简单点,我看了stm32L0的手册,TIM2和TIM21是可以进行主从连接的。
一个使用OC toggle输出模式结合DMA来实现.
请教一下,为什么要结合DMA来实现?在匹配中断中修改CCR的值来完成第二个边沿可以吗?
使用OC toggle输出模式结合DMA来实现比较方便,因为要不停动态修改CCR的值。
当然 你使用中断方式也可以。
当然 你使用中断方式也可以。
使用中断方式修改比较值固然可以。不过,基于中断方式修改CCR的话,对CPU的占用我们要考虑,有些应用场景可能没法接受。这点要注意。