OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7437|回复: 9

stm32下载程序之后运行正常断电上电就不正常了

[复制链接]

13

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
198
金钱
198
注册时间
2016-3-31
在线时间
36 小时
发表于 2016-5-30 20:56:39 | 显示全部楼层 |阅读模式
3金钱
如题
stm32读写时钟DS1302  主程序先写固定时间 在读出来       SWD下载之后 不断电程序运行正常   
断电再上电  读出的数据不正确 会出现69月69日     不知道是什么原因 求各路大神分析下

1.断电上电后 DS1302读取不正常  TFT正常显示  复位之后 情况不变
2.每次上电都会对DS1302进行固定时间的写入  但是断电上电之后读取的和写入的不一致


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

184

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1050
金钱
1050
注册时间
2016-5-13
在线时间
111 小时
发表于 2016-5-30 21:22:02 | 显示全部楼层
回复

使用道具 举报

13

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
198
金钱
198
注册时间
2016-3-31
在线时间
36 小时
 楼主| 发表于 2016-5-31 07:56:40 | 显示全部楼层
zhuifeng8911 发表于 2016-5-30 21:22
你的DS1302 也断电了吗?

DS1302也断电了 但是接了电池  而且每次上电都会重新写入
回复

使用道具 举报

5

主题

184

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1050
金钱
1050
注册时间
2016-5-13
在线时间
111 小时
发表于 2016-5-31 08:49:42 | 显示全部楼层
贴上代码,好找错误在哪?
回复

使用道具 举报

83

主题

400

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2295
金钱
2295
注册时间
2013-8-26
在线时间
229 小时
发表于 2016-5-31 08:54:07 | 显示全部楼层
杜甫能动 发表于 2016-5-31 07:56
DS1302也断电了 但是接了电池  而且每次上电都会重新写入

我记得1302写入一次就可以了。写完之后把写入的屏蔽掉,或者需要的时候再写入。
回复

使用道具 举报

13

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
198
金钱
198
注册时间
2016-3-31
在线时间
36 小时
 楼主| 发表于 2016-5-31 09:04:19 | 显示全部楼层
zhuifeng8911 发表于 2016-5-31 08:49
贴上代码,好找错误在哪?

int main(void)
{
  sys_init();       
       
        Delay(200000);
       
        System_LED(STATE_LED_GREEN);
       
        DS1302_Write_Time(Write_Month,5);
        DS1302_Write_Time(Write_Day,30);
        DS1302_Write_Time(Write_Hour,13);
        DS1302_Write_Time(Write_Minute,23);
        DS1302_Write_Time(Write_Second,0);
       
        LCD_Draw_Rectangle(165,47,315,77,color_red);
        LCD_Write_Inside_Chinese(168,50,FONT24X24,0,color_black,color_cyan,PENE,"系统运行正常");       
        while (1)
        {               
                battery_charge_led(ON);
               
                Delay(20000);       
                Show_Time();                       
                battery_charge_led(OFF);
                Delay(20000);
        }
}



void Show_Time(void)
{                       
        aaa=DS1302_Read_Time(Read_Month);
        aa=aaa/10;               
        LCD_Write_Inside_Num(208,130,0,color_black,color_cyan,PENE,aa);
        aa=aaa%10;
        LCD_Write_Inside_Num(216,130,0,color_black,color_cyan,PENE,aa);                       
        LCD_Write_Inside_Chinese(224,130,Font16X16,0,color_black,color_cyan,PENE,"月");
       
        aaa=DS1302_Read_Time(Read_Day);
        aa=aaa/10;               
        LCD_Write_Inside_Num(240,130,0,color_black,color_cyan,PENE,aa);
        aa=aaa%10;
        LCD_Write_Inside_Num(248,130,0,color_black,color_cyan,PENE,aa);                       
        LCD_Write_Inside_Chinese(256,130,Font16X16,0,color_black,color_cyan,PENE,"日");
       
        LCD_Draw_Line(206,150,274,150,color_purple);
        LCD_Draw_Line(206,151,274,151,color_purple);
        //
        aaa=DS1302_Read_Time(Read_Hour);
        aa=aaa/10;               
        LCD_Write_Inside_Num(192,180,0,color_black,color_cyan,PENE,aa);
        aa=aaa%10;
        LCD_Write_Inside_Num(200,180,0,color_black,color_cyan,PENE,aa);               
        LCD_Write_Inside_Chinese(208,180,Font16X16,0,color_black,color_cyan,PENE,"时");
       
        aaa=DS1302_Read_Time(Read_Minute);
        aa=aaa/10;               
        LCD_Write_Inside_Num(224,180,0,color_black,color_cyan,PENE,aa);
        aa=aaa%10;
        LCD_Write_Inside_Num(232,180,0,color_black,color_cyan,PENE,aa);       
        LCD_Write_Inside_Chinese(240,180,Font16X16,0,color_black,color_cyan,PENE,"分");

        aaa=DS1302_Read_Time(Read_Second);
        aa=aaa/10;               
        LCD_Write_Inside_Num(256,180,0,color_black,color_cyan,PENE,aa);
        aa=aaa%10;
        LCD_Write_Inside_Num(264,180,0,color_black,color_cyan,PENE,aa);       
        LCD_Write_Inside_Chinese(272,180,Font16X16,0,color_black,color_cyan,PENE,"秒");
       
        LCD_Draw_Line(190,198,290,198,color_purple);
        LCD_Draw_Line(190,199,290,199,color_purple);       
               
        Delay(200000);       
               
        LCD_Clear_PartScreen(190,130,290,200,color_white);               
}
回复

使用道具 举报

13

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
198
金钱
198
注册时间
2016-3-31
在线时间
36 小时
 楼主| 发表于 2016-5-31 09:06:15 | 显示全部楼层
ws_zdyz 发表于 2016-5-31 08:54
我记得1302写入一次就可以了。写完之后把写入的屏蔽掉,或者需要的时候再写入。

但是我写入之后 读出来的就不对了   大神方便加下 QQ吗 交流 方便些  2381996031
回复

使用道具 举报

5

主题

184

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1050
金钱
1050
注册时间
2016-5-13
在线时间
111 小时
发表于 2016-5-31 09:58:23 | 显示全部楼层
对的,上电判断是否断电了,断电了就写入一次初值。
[mw_shl_code=c,true]// --------------------------------------------------------- //
// 函数名称:DS1302Init
// 函数说明: DS1302所用I/O口初始化
// 输入参数: 无
// 输出参数: 无
// 返回值:   无
// 历史记录:     
//     <作者>    <时间>      <修改记录>
//     
// --------------------------------------------------------- //
void DS1302Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    //IO时钟使能   
    RCC_APB2PeriphClockCmd(DS1302_IORCC|RCC_APB2Periph_AFIO, ENABLE);
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);      /*使能SWD 禁用JTAG*/

    //IO??
    GPIO_InitStructure.GPIO_Pin = DS1302_SCK_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;  
    GPIO_Init(DS1302_PORT, &GPIO_InitStructure);
   
    GPIO_InitStructure.GPIO_Pin = DS1302_SDA_PIN;
    GPIO_Init(DS1302_PORT, &GPIO_InitStructure);
   
    GPIO_InitStructure.GPIO_Pin = DS1302_CE_PIN;
    GPIO_Init(DS1302_PORT, &GPIO_InitStructure);
   
    DS1302WriteReg(WrControl,0x00);  //关闭写保护,可以写入数据
    __nop();  
    __nop();
   
    if(DS1302ReadReg(RdRamfirst) != 0xA6)   //通过读静态RAM的第一个值,来判断是否断电
    {
        __nop();  
        __nop();
        DS1302WriteReg(WrRamfirst,0xA6);
        DS1302InitTime();                           //断电了就初始化时间
    }
   
    __nop();  
    __nop();  
    DS1302WriteReg(WrControl,0x80);  //开启写保护,禁止写入数据
     
}[/mw_shl_code]
回复

使用道具 举报

13

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
198
金钱
198
注册时间
2016-3-31
在线时间
36 小时
 楼主| 发表于 2016-5-31 10:03:18 | 显示全部楼层
zhuifeng8911 发表于 2016-5-31 09:58
对的,上电判断是否断电了,断电了就写入一次初值。
[mw_shl_code=c,true]// --------------------------- ...

但是我觉得我跟这个没有关系 我每次上电都写入的是 固定的值  但是断电在上电读出来和写入的不一致
回复

使用道具 举报

83

主题

400

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2295
金钱
2295
注册时间
2013-8-26
在线时间
229 小时
发表于 2016-5-31 14:05:29 | 显示全部楼层
杜甫能动 发表于 2016-5-31 09:06
但是我写入之后 读出来的就不对了   大神方便加下 QQ吗 交流 方便些  2381996031

还有我遇到过假货。到晚上十点之后就是0点了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 00:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表