你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM8L152R8T6复位卡死问题

[复制链接]
lishaoyong 提问时间:2016-4-1 15:29 /
最近调试STM8L152R8T6的一个产品,测试中发现跑了一晚上后,单片机卡死,外部复位没用,必须重新上电才有用。花了一天的时间来测试找问题,结果发现了问题,不知是不是芯片有bug。测试主函数如下:
    CLK_Configuration();
//    WWDG_Config();  
//    param_config_flag=read_param();   
      GPIO_Run_Config();
//    USART_Config();
//    DrvUART_Write(USER_COM,"RESET\r\n",7);
//    get_rht();
    LCD_GLASS_Init();
    Disp_RHT();   
    Get_Bat();
     while(1)
    {
        WWDG_SetCounter(0xfe) ;
    }

烧入程序不停按复位键,正常情况液晶正常显示。大概60多次,液晶不显示,再按复位键也不起作用,芯片卡死。NRST脚一直低电平。

void Get_Bat(void)
{
    uint32_t temp;
    CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);
    ADC_Init(ADC1, ADC_ConversionMode_Single, ADC_Resolution_12Bit, ADC_Prescaler_2);
    ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_384Cycles);
    ADC_Cmd(ADC1, ENABLE);
   ADC_SchmittTriggerConfig(ADC1, ADC_Channel_17, DISABLE);
    ADC_ChannelCmd(ADC1, ADC_Channel_17, ENABLE);   
    ADC_SoftwareStartConv(ADC1);
    WWDG_SetCounter(0xfe) ;
    while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == 0);
   temp = ADC_GetConversionValue(ADC1);  

    ADC_SoftwareStartConv(ADC1);
    WWDG_SetCounter(0xfe) ;
    while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == 0);
   temp = temp+ADC_GetConversionValue(ADC1);  

    ADC_SoftwareStartConv(ADC1);
    WWDG_SetCounter(0xfe) ;
    while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == 0);
    temp = temp+ADC_GetConversionValue(ADC1);

   ADC_SoftwareStartConv(ADC1);
    WWDG_SetCounter(0xfe) ;
    while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == 0);
    temp = temp+ADC_GetConversionValue(ADC1);

    temp= (temp*300)>>13;
    g_Bat_V=temp;   
}

而只要注销掉红色的代码后,再怎么按复位键都不会出现卡死现象。ADC转换触发会引发复位卡死呢? 大家有无遇到过这样的问题。原来的产品用的是STM8L152C8T6都没出现这个问题,怪哉!
收藏 评论2 发布时间:2016-4-1 15:29

举报

2个回答
zcl201207 回答时间:2016-4-1 21:36:17
程序员 回答时间:2019-11-28 10:25:45
你好 现在找到原因了吗
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版