标题:
关于STC8H8K64U单片机复位标志寄存器RSTFLAG
[打印本页]
作者:
nachoneko
时间:
2024-4-18 19:51
标题:
关于STC8H8K64U单片机复位标志寄存器RSTFLAG
关于STC8H8K64U复位标志寄存器RSTFLAG,我想区分上电复位和软件写SWRST复位,但不管是上电复位还是软件写复位,得到的RSTFLAG寄存器值一直都是0x14,只有在我使用引脚RST复位的时候会去读到0x15,然后我再软件写复位,就会一直读取到0x15.
请问这是什么原因呢?以下是我测试的单片机代码:void main()
{
Uart1_Init(); //系统日志打印 波特率:9600
delay_s(5);
Uart1_Send(RSTFLAG); //STC_ResetReason()
RSTFLAG = 0xFF;
delay_s(5);
STC_SoftReset();
while(1);
}
作者:
cocolala
时间:
2024-4-19 09:33
1、你的主循环里面没有添加任何语句啊,你的程序是初始化是读了一下,之后软件复位,之后进主循环,主循环应该继续读寄存器值。
2、当然要确保你的硬件和供电都没问题哦,,硬件是自己做的板子吗?
作者:
Graves
时间:
2024-4-19 09:47
STC_SoftReset()这是复位吧?程序一到STC_SoftReset()就复位了都跑不到while(1);然后一直重启、软件复位。可能就检测不到上电复位了
作者:
STC庄伟
时间:
2024-4-19 11:13
通过读取RSTFLAG标志来判断也是可以的。
不过需要注意RSTFLAG是扩展寄存器,访问前需要开启扩展寄存器访问使能。
if(RSTFLAG & 0x10) //LVDRSTF
{
RSTFLAG |= 0x10; //写1清除标志位
printf("LVD reset.temp=%u\r\n",temp);
}
if(RSTFLAG & 0x08) //WDTRSTF
{
RSTFLAG |= 0x08; //写1清除标志位
printf("Watchdog reset.temp=%u\r\n",temp);
}
if(RSTFLAG & 0x04) //SWRSTF
{
RSTFLAG |= 0x04; //写1清除标志位
printf("Software reset.temp=%u\r\n",temp);
}
if(RSTFLAG & 0x02) //ROMOVF
{
RSTFLAG |= 0x02; //写1清除标志位
printf("ROM Overflow reset.temp=%u\r\n",temp);
}
if(RSTFLAG & 0x01) //EXRSTF
{
RSTFLAG |= 0x01; //写1清除标志位
printf("External reset.temp=%u\r\n",temp);
}
串口验证复位来源.zip
(7.46 KB, 下载次数: 1)
2024-4-19 11:13 上传
点击文件名下载附件
作者:
188610329
时间:
2024-4-19 18:26
你是不是应该 重起前 让串口再发一次 标志位,来确定是否清除成功呢?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1