最近调试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都没出现这个问题,怪哉! |
你好 现在找到原因了吗 |
STMS005K6T6 如何采集内部参考电压。
stm8s003 adc中断和通道切换的问题
adc施密特触发器stm8
stm8l051f3 TSSOP20 封装,待机模式下,2天后,电流突然增加到140UA
STM8S用STVP烧录怎么加密?
如何使用ST官网例程_LIN总线通讯_STM8AF
STM8 LIN
IAR代码编辑太费劲了,想问一下有没有好的方法,试了VScode但是头文件老是报错,调了很久也没调好,想换个方法了。
想问一下各位大佬,IAR下载调试代码时出现 warning: is an illegal data sample expression IAR是什么意思啊?
STM8S标准库TIM1编码器功能不计数,请大师帮我看看