打印
[STM32L1]

STM32L151C8的ADC模拟看门狗只能在初始化时可以正常检测

[复制链接]
2351|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LOVE_ELEC|  楼主 | 2014-10-17 01:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 LOVE_ELEC 于 2014-10-17 15:30 编辑

先贴下代码:
/* GPIO 初始化部分 */
        GPIO_InitTypeDef GPIO_InitStructure;
        /* MAC Pin */
        GPIO_InitStructure.GPIO_Pin =  MAC_GPIO_PIN;             /* PA0 */
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AN;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
        GPIO_Init(MAC_GPIO_PORT, &GPIO_InitStructure);
/* ADC 模拟看门狗初始化部分 */
       ADC_InitTypeDef ADC_InitStructure;
        /* Enable the HSI */
        RCC_HSICmd(ENABLE);
        /* Wait until HSI oscillator is ready */
        while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
        /* Enable ADC1 clock */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
        /* ADC1 Configuration -----------------------------------------------------*/
        ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
        ADC_InitStructure.ADC_ScanConvMode = DISABLE;
        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
        ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
        ADC_InitStructure.ADC_NbrOfConversion = 1;
        ADC_Init(ADC1, &ADC_InitStructure);
        ADC_ClearITPendingBit(ADC1, ADC_IT_AWD);
        /* ADC1 regular channel0 configuration */
        ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_4Cycles);
    /* Configure channel0 as the single analog watchdog guarded channel */
        ADC_AnalogWatchdogSingleChannelConfig(ADC1, ADC_Channel_0);
        /* Configure high and low analog watchdog thresholds */
        ADC_AnalogWatchdogThresholdsConfig(ADC1, MAC_HIGHER_THRESHOLD, MAC_LOWER_THRESHOLD);//0x16E
        /* Enable analog watchdog on one regular channel: channel0 */
        ADC_AnalogWatchdogCmd(ADC1, ADC_AnalogWatchdog_SingleRegEnable);
        /* Enable AWD interrupt */
        ADC_ITConfig(ADC1, ADC_IT_AWD, ENABLE);


        /* Enable ADC1 */
        ADC_Cmd(ADC1, ENABLE);


        /* Wait until the ADC1 is ready */
        while(ADC_GetFlagStatus(ADC1, ADC_FLAG_ADONS) == RESET)
        {
        }
        /* Start ADC1 Software Conversion */
        ADC_SoftwareStartConv(ADC1);
问题:1> ADC模拟看门狗只能在调用初始化时,能够正常的转换电压(接的是3.3V,DR值为0xFFF),也能够正常的产生看门狗中断;但是初始化完成后当我将对应的管腿接到GND上后,发现DR的值还是0xFFF。再重新将对应的管腿接到3.3V上,DR当然还是0xFFF,但是却再也不会产生看门狗中断。
           2> 若我在初始化时将管腿直接接到GND上,也能够正常的转换当然也不会产生中断;但是当我把对应的管腿接到3.3V时,DR值依旧是0,也不会产生中断?
       劳烦各位帮忙看看是什么问题?
沙发
LOVE_ELEC|  楼主 | 2014-10-17 10:14 | 只看该作者
问题依旧!还请香主快快出手!:)

使用特权

评论回复
板凳
LOVE_ELEC|  楼主 | 2014-10-17 10:30 | 只看该作者
也请路过的各位大侠,帮忙看看!或者帮忙看看问题表述的是否清楚?

使用特权

评论回复
地板
LOVE_ELEC|  楼主 | 2014-10-17 15:24 | 只看该作者
在线等解答!请各位留下宝贵的意见!

使用特权

评论回复
5
LOVE_ELEC|  楼主 | 2014-10-17 23:48 | 只看该作者
自己先把帖子顶起!

使用特权

评论回复
6
saviourxx| | 2014-10-18 12:01 | 只看该作者
楼主试一下换个中断标志看看,是不是中断标志的问题

ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
void ADC1_IRQHandler(void)
{       
  if(ADC_GetITStatus(ADC1, ADC_IT_EOC) != RESET)
  {                 
    ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);

我之前也试过初始化的时候读到一次,中断没反映的,后来调试发现跟我配置的采样时间,检测的adc中断标志都有关系的。

使用特权

评论回复
7
LOVE_ELEC|  楼主 | 2014-10-18 14:28 | 只看该作者
saviourxx 发表于 2014-10-18 12:01
楼主试一下换个中断标志看看,是不是中断标志的问题

ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);

谢谢您的建议!昨天已经解决这个问题,不是中断标志位的原因;是因为我用的时钟源就是内部的RC,所以最快速度只有16M,而我用的ADC的分频系数是1,也是16M。后来把分频系数改大就好用了!再次感谢您的关注!

使用特权

评论回复
8
搞IT的| | 2014-10-19 10:25 | 只看该作者
LOVE_ELEC 发表于 2014-10-17 10:30
也请路过的各位大侠,帮忙看看!或者帮忙看看问题表述的是否清楚?

我不是大侠,路过~~~~

使用特权

评论回复
9
xenosimon| | 2016-8-30 21:16 | 只看该作者
AD中断设置成模拟看门狗模式,中断服务程序里可以对gpio口进行清零和置位的操作吗(相当于AD到了阀值,可以实现保护)?

使用特权

评论回复
10
xenosimon| | 2016-8-30 21:21 | 只看该作者
其他系列的stm32也有这种设置吗?我用的是stm32f103cb

使用特权

评论回复
11
LOVE_ELEC|  楼主 | 2016-8-31 10:02 | 只看该作者
xenosimon 发表于 2016-8-30 21:21
其他系列的stm32也有这种设置吗?我用的是stm32f103cb

这个没有测试过,理论上都应该是一样的,因为ADC采样和你的系统时钟一样的话会造成响应不及时!具体可以测试一下!

使用特权

评论回复
12
xenosimon| | 2016-8-31 12:28 | 只看该作者
LOVE_ELEC 发表于 2016-8-31 10:02
这个没有测试过,理论上都应该是一样的,因为ADC采样和你的系统时钟一样的话会造成响应不及时!具体可以 ...

AD中断设置成模拟看门狗模式,中断服务程序里可以对gpio口进行清零和置位的操作吗(相当于AD到了阀值,可以实现保护)?

使用特权

评论回复
13
LOVE_ELEC|  楼主 | 2016-8-31 15:08 | 只看该作者
xenosimon 发表于 2016-8-31 12:28
AD中断设置成模拟看门狗模式,中断服务程序里可以对gpio口进行清零和置位的操作吗(相当于AD到了阀值,可 ...

可以!

使用特权

评论回复
14
xenosimon| | 2016-8-31 16:52 | 只看该作者

太好了,看了好多地方,还是你的这个帖子帮到了我。谢谢

使用特权

评论回复
15
LOVE_ELEC|  楼主 | 2016-9-1 13:45 | 只看该作者
xenosimon 发表于 2016-8-31 16:52
太好了,看了好多地方,还是你的这个帖子帮到了我。谢谢

不用客气!解决问题就好!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:生命不息,奋斗不止!

21

主题

205

帖子

5

粉丝