糊涂了
我们可以把断点设在ADC_Init(ADC1, &ADC_InitStructure)开始处。
这时看看寄存器: EXTTRIG应该=? 是不是=1?
是谁干了的?
LZ的意思是代码没有设置,EXTTRIG自动变成1了?谁干的?
我也来贴个图
进行完ADC结构初始化后,ADC_Init(ADC1, &ADC_InitStructure);
并没有什么哪位不该置1的被置1了!
是不是被你PS咯哟?
哈哈,lut1lut 也用我的表述方式!
===〉
netjob,我的跟踪你看了没有?晕!
顶楼上个位! 元凶找到了!
我的问题是: 之前 转换好不成功,没有启动开始。必须要把 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.
哈哈,大家都有粗心的时候!
提出问题是好事儿,大家共同学习的机会!
最怕人云亦云,得过且过!
兄弟的钻研精神值得学习!
以后的CPU越来越复杂!
而且,不同的项目,用的CPU也不相同,如果每个项目,你都是直接自己操作的寄存器,太累了,而且,最好代码中软硬件分离,主程序中,不直接操作硬件!
库是潮流,
好啊
解决了就好。
出现该现象的主要原因是: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);
。。。。。。