stm32f030 DMA 被PWM给干掉了!!!
我把工程文件上传先。ADC_DMA.zip1.
2.首先 我是用DMA ADC 方式采样的
采样结果是:
3 然后 我需要一个口输出PWM 控制别的东西 于是我就加了PWM程序
采样结果 就乱了:4095都冒出来了
不过48K 的PWM能正常输出
你是VREF+ 和VDDA连在一起了吧?VDDA供电要在2.0V-3.6V,VDDA低于2V AD都不能正常工作,Vref要<=VDDA。如果Vref纹波太大,AD采样值也不会稳的, 本帖最后由 小贾-370388 于 2014-12-26 13:51 编辑
1、VDDA和VREF+的区别就是,VREF+只是提供电压基准参考的,从VREF+流入的电流基本可忽略不计,VREF+内部的电路对VREF+处的电压基本也没什么影响,VREF+的电压稳定度完全由电压基准的精度确定。
VDDA顾名思意,这是要给整个模拟部分供电的,从VDDA上流过的电流视内部模拟部分的电流消耗而定,VDDA内部的电路可能会对VDDA处的电压产生影响,但一般情况下,设计得当也基本可以忽略这个影响。
2、VDDA和VDD没有什么关系,当然,如果你想简化电源设计,把VDD和VDDA连在一起是可以的,此时相当于VDD给数字部分供电,模拟部分也使用VDD提供,如此而已,但VDD一般来说精度比较差,所以VDD和VDDA连在一起时还想着要多高的AD精度显然是你自己的问题3、在没有VREF+的时候,ST把VREF+内部引脚接到了VDDA上,那么此时保证AD精度的一个要求就是:VDDA必须稳定和准确,设计的基本原则就是选择一个比较好外部电压基准,并且这个电压基准应该有一定的带载能力,否则可能发生带载能力不足导致VDDA被拉低,从而导致VREF+也没拉低(没有外部引脚,但内部还是有VREF的,只是内部把VREF+接到了VDDA上),此时,AD的精度多数就保证不了拉,但这是你自己外围芯片选择不当4、在这里纠缠这个问题的人中,估计很多没有完全理解上面的1~3条5、VREF+连到VDDA根本和温漂没什么关系,精度完全取决于你外部电压基准输入到VDDA的电压精度。 另外加上 我的PWM输出图 本帖最后由 晓枫VS枯叶 于 2014-12-24 12:12 编辑
TIM_CtrlPWMOutputs(TIM14, ENABLE);//void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_TIM_LIST2_PERIPH(TIMx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Enable the TIM Main Output */
TIMx->BDTR |= TIM_BDTR_MOE;
}
else
{
/* Disable the TIM Main Output */
TIMx->BDTR &= (uint16_t)(~((uint16_t)TIM_BDTR_MOE));
}
}#define IS_TIM_LIST2_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
((PERIPH) == TIM15)|| \
((PERIPH) == TIM16)|| \
((PERIPH) == TIM17)) 高级定时器才有这个函数TIM_CtrlPWMOutputs,tim14是高级定时器么?
而且不是有一个设置脉宽的函数吗TIM_SetComparex,为什么你又写了一个函数!
晓枫VS枯叶 发表于 2014-12-24 12:07
高级定时器才有这个函数TIM_CtrlPWMOutputs,tim14是高级定时器么?
而且不是有一个设置脉宽的 ...
就是因为原先是TIM16出现这种情况我才换的TIM14的,结果也是一样。 那个设置脉冲宽度的函数我没调用,还要修改的。 彻底把我雷到了!!!!! 我把我拥有的TIM 都输出 48KPWM居然发现TIM1输出48K的时候 不会影响ADC DMA 其它的TIM全部会影响那STM32F030不至于这样吧???? 额 新发现 。。。可能是我调试方法有问题
新发现 TIM17 在VREF 参考电压1.90V(采样电压始终是1.25-1.35V)在PWM输出48K 时能稳定采样 ,其余通道除了TIM1 全失败 鸟性 ,结贴了VDDA 参考电压必须2.4V以上否则各种错误 楼主能力太强了。
不好意思,最近有些事情不能在论坛及时回复。
页:
[1]
2