历史上的今天
今天是:2025年01月14日(星期二)
2019年01月14日 | STM8关于IWDG看门狗和HSI高速时钟和复位的坑
2019-01-14 来源:eefocus
前言:我的第一篇博客,快被逼疯了。用的STM8S003F3,耗时5天,问题已解决,结局很坑!
但因为这一个问题,我似乎将stm8的时钟,复位,看门狗,iar的使用几乎全吃透了。
忠告:不要随随便便相信百度里头随便找来的资料!
现象:主频只在16MHz时,程序频繁复位不可控,其他现象异常离奇不阐述了,防止伤脑。
正文:前因后果是这样的:
1,我配置了16M的主频
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//内部高速时钟,不分频或者:CLK->CKDIVR = 0x00; //HSIDIV = 0 CPUDIV = 0 cpu时钟 = 16Mhz 发现它频繁自动复位,复位速度极快,找不到原因,问了老总,老总说复位和IWDG有关。
2,没学过也没设置过看门狗,那就配置吧

大体就是让我配置一下,网上各种配置方法,精简后,所有网上内容都统一为:
void IWDG_Init(void) //配置并启动看门狗
{
IWDG->KR = 0xCC; //启动独立看门狗
IWDG->KR = 0x55; //写入解锁
IWDG->PR = 0x06; //256分频
IWDG->RLR = 0xFF; //设置重载寄存器
IWDG->KR = 0xAA; //锁定并刷新
// IWDG_Enable(); //使能看门狗
// IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //写使能
// IWDG_SetPrescaler(IWDG_Prescaler_256); //预分频256,128KHZ/256
// IWDG_SetReload(0XFF); //设置每次喂狗的计数值。
// IWDG_ReloadCounter(); //喂狗
}
操作寄存器和库函数都有了,而且是不出错的
void WDT(void)//喂狗
{
IWDG->KR = 0xaa;
}
定期喂狗即可,LSI的256分频大概1秒左右喂一次狗,不喂就复位,看起来就很简单了
3我真心是为了解决问题把独立喂狗IWDG都快吃透了,保证看门狗配置绝对没问题了,复位问题还是没解决!正常情况,看门狗是可要可不要的,不是说开机就会自动初始化(老总的隐形误导)。如果我初始化看门狗了,看门狗也应该1秒复位一次,可我1秒复位n多次,那说明跟看门狗无关
4排查发现,又跟时钟有关 CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV2);//内部高速时钟,分频2;分频2,4,8,程序不再复位了,就是说16M会自动复位,8M以下就不复位了?可我就是要16M啊 手册说,看门狗用LSI,我主频用HSI,互相不影响吧?(互不影响)
5快疯了,要交差,半路出现问题搞不定 把代码全删了,只留了几句话
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//内部高速时钟,不分频
GPIO_Init(Laser_V1_Port, (GPIO_Pin_TypeDef)Laser_V1_Pin, GPIO_MODE_OUT_PP_LOW_SLOW); //灯亮
int i=1000;
GPIO_WriteHigh(Laser_V1_Port,Laser_V1_Pin);
while(i--);
GPIO_WriteLow(Laser_V1_Port,Laser_V1_Pin);
while(1) { }
按照逻辑,开机亮一下啊,可我现在一直会亮,(因为它复位了)找了个别人的demo试试,还是一样,但是用别的STM8开发板试了就没事!
6最终发现while(1){}去掉,则不再复位了,while(1){}不去掉,灯还是不停的闪 靠,这根本不是复位,而是灯闪的操作被莫名循环了,不是复位导致的!!!!靠,拍电影啊,这么弯弯绕!
7问题没发现,但是问题已解决,那就是:main()函数中,如果while(1)是空的,会执行while(1)意外的代码?不要让while(1)空着就行 这TM什么鬼,明明技术贴,搞得跟走近科学一样(中间过程忽略)
8最后一天,都快放弃了,最后猜想是不是硬件问题?!内心思路:跟硬件有毛关系啊!

最终:Vcap将它的电容从103改为105,复位问题奇迹般不再发生了(1uF)。
为什么我就选了103?!啊?因为我特么从网上百度随便找了个百度文库照抄的!坑啊!(NRST也没加电容!)
史海拾趣
|
无线网卡:wl-167g ARM板:S3C2410 内核版本:2.4.18 gcc版本:2.95.3 驱动版本RT73_Linux_STA_Drv1.0.4.0 编译驱动通过,并生成rt73.o,使用insmod rt73.o可以将模块加载到系统中,显示: rtusb init ====> usb.c: registered new driver rt73 但 ...… 查看全部问答> |
|
首次跑通Keil自带STM32的OS例程,发贴自贺并交作业(已修改) 由于俺用的是英培特的EMSTM32V1开发板,内带的例程没RTX的例程. 只好用keil自带的例程BLINKY.C,但是LED的管脚不太兼容. 刚好也学学GPIO~~~哈哈~~~OS和裸奔的BLINKY都算是跑通了~~~ 郁闷的是串口和ADC没跑通~~~不过串口座(公头)有些小,估计是新的 ...… 查看全部问答> |
|
南华大学黄智伟系列--好的系统设计方案是取得好的竞赛成绩的保证 本帖最后由 paulhyde 于 2014-9-15 09:43 编辑 1. 竞赛特点与赛题范围、要求和类型 在“全国大学生电子设计竞赛组委会官方网站”所公布的“全国大学生电子设计竞赛章程”、“关于组织2011年全国大学生电子设计竞赛的通知”和“2011年全国大学生电 ...… 查看全部问答> |
|
我接触DSP较8051系列和arm系列晚,原因无它,资源少(相对8051和arm铺天盖地的资料和例程来说),价格贵,一般应用也用不上。再加上DSP的一般应用项目都是高端的数字处理和数码设备,久而久之,在我脑海里DSP就好像微处理器里面的贵族一样,带着神 ...… 查看全部问答> |
|
前提:接收单片机放在开发板上,开发板与电脑相连,接收单片机同时连接一个蓝牙模块。发送单片机通过蓝牙模块向接收单片机发数据,控制LED灯亮灭。 问题:发送单片机发送的数据在电脑上通过串口助手可以看到,接收单片机能收到,但是LED灯无变化。 ...… 查看全部问答> |
|
2440Nand vs DMA速度提升4倍,估计还有提升空间 本帖最后由 lzwml 于 2014-12-18 08:20 编辑 平台:TQ2440开发板、Nand_2Gb_S34ML02G(每页大小2048Byte),不使用DMA传输速率3MB/S,使用DMA目前最大速率13.79MB/S 不使用DMA方式读取循环次数每次读取字节耗时(S)速率(MB/S)300005125.72.5730 ...… 查看全部问答> |
|
最近在设计制作一块高速AD/DA板,主要器件有250MSPS的AD以及1GSPS的DA,还有一块较低端的FPGA,原理图中势必有数字地和模拟地之分。在pcb中采用的sggssggs板层结构设计的八层板,第一层和第七层是GND层,这样问题就出现了,这两个地平面也就是两个G ...… 查看全部问答> |
|
电力电子软件的,一般这一行的代码不多,往往几行代码调几个月,比如并网算法、H桥控制。前段时间同事做通讯的时候,发现TMS320F280XX这款芯片有时会死机。他通讯的软件使用了TI给的库,自己做了通讯的协议层。虽然死机后有主芯片将这块通讯芯片复 ...… 查看全部问答> |




