糊涂了

我们可以把断点设在ADC_Init(ADC1, &ADC_InitStructure)开始处。
这时看看寄存器: EXTTRIG应该=? 是不是=1?
是谁干了的?


LZ的意思是代码没有设置,EXTTRIG自动变成1了?谁干的?
点赞  2008-9-12 10:57

我也来贴个图

进行完ADC结构初始化后,ADC_Init(ADC1, &ADC_InitStructure);
并没有什么哪位不该置1的被置1了!

是不是被你PS咯哟?
点赞  2008-9-12 10:59

哈哈,lut1lut 也用我的表述方式!

===〉
netjob,我的跟踪你看了没有?晕!
点赞  2008-9-12 10:59

顶楼上个位! 元凶找到了!

我的问题是: 之前 转换好不成功,没有启动开始。必须要把 EXTTIR=1;

~~~, 上面的问题是我得FLASH代码设置的。我用RAM调试,所以!!
见笑了。。

现在我得代码这样
      STM32_Adc1_Regs->cr2.bit.ADON=1;   //1:开启ADC并启动转换 当第一次设置ADON 位时,它将ADC 从断电状态下唤醒        
      /* Start ADC1 Software Conversion */
      //ADC_SoftwareStartConvCmd(ADC1, ENABLE);
    STM32_Adc1_Regs->cr2.bit.SWSTART=1;// 开始转换规则通道


元凶就是这一句体现了:
//1:开启ADC并启动转换 当第一次设置ADON 位时,它将ADC 从断电状态下唤醒


再加一句:ADCON. 就 OK.








点赞  2008-9-12 11:16

哈哈,大家都有粗心的时候!

提出问题是好事儿,大家共同学习的机会!
最怕人云亦云,得过且过!
兄弟的钻研精神值得学习!
点赞  2008-9-12 11:23

以后的CPU越来越复杂!

而且,不同的项目,用的CPU也不相同,如果每个项目,你都是直接自己操作的寄存器,太累了,而且,最好代码中软硬件分离,主程序中,不直接操作硬件!
库是潮流,
点赞  2008-9-12 11:29

好啊

解决了就好。
出现该现象的主要原因是:STM32在复位后所有的寄存器默认为0,所以FWLIB里并没有将不使用的位做清0操作。如果你跳线选的是RAM启动就没有问题了,如果想确保STM32的寄存器默认为0,如果时间允许,在每个外设的Init前加个DeInit。
我的是这样:
void ADC_Config(void)
{     
  ADC_DeInit(ADC1);
  ADC_DeInit(ADC2);
  ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult;
  ADC_InitStructure.ADC_ScanConvMode = ENABLE;
  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_NbrOfChannel = 3;
  
  ADC_Init(ADC1, &ADC_InitStructure);
  ADC_Init(ADC2, &ADC_InitStructure);
。。。。。。
点赞  2008-9-12 19:23
12
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复