STM32F030C8 端口异常记录

    这几天在对一款老产品做功能升级。新功能为用串口和wifi模块通讯。因为两个串口已经用于其它模块。所以只能用模拟串口。

在调试串口的过程还是比较顺利的。

    接下来把整个功能移植进工程。新功能调试完成后做全面测试。这时发现PC13这个端口的上拉功能丢失。通过外接上拉100K电阻,产品功能得以恢复。以为是在增加新功能的时候软件动到了这个端口。于是把软件改回修之前的量产版本。发现问题依旧,于是得出结论:芯片坏了。接下来就是换芯片,换完一个坏一个。而且都是在执行新功能之后出现的异常。

   把wifi模块拆掉,芯片不会出现问题。难道是模块有问题?因为接入的指令不多,于是用QT写了一个模拟程序替代wifi模块和产品通讯。测试后发现还是有问题。什么奇怪问题啊,百思不 得其解。

   想到我的GPIO操作同时用HAL库和LL库。上网查了一下,hall和LL库不可以同时操作一种外设。问题可能在这里。改!花了一个小时对GPIO的hal库操作进行追杀。改完之后,一测,问题依旧.......我去...!  时间不早了先回家休息。

   第二天上班过来拿了一个板子通电测试了一下。发现上拉功能恢复了,操作了几下新功能后问题又来了。看来硬件没有损坏。继续查软件吧。同时得出一个结论,放电完全芯片可以复元。想到PC13和RTC相关,并且系统断电的时候RTC电源还有电容续电。于是让问题重现,切断系统电源,并用镊子把RTC电源处的电容放电。神奇啊,芯片恢复了。所以后面就不用换芯片了。

   因为拆掉wifi模块不会有问题,那一定是哪个指令处理出了问题。于是对模拟软件做修改。一个个指令做屏蔽处理。到屏蔽时间同步的时候异常没有出现了(早该想到是这地方了)。唯有这里有硬件操作的地方。在产品的软件里把RTC写操作屏蔽,问题解决了。

  RTC这里是怎么操作的呢?x结果怎么这么骚气呢?收下是RTC修改时间的操作。

    RTC_DateStruct.Year = time.year - BEGYEAR;
    RTC_DateStruct.Month = time.month + 1;
    RTC_DateStruct.Day  = time.day + 1;

    RTC_TimeStruct.Hours = time.hour;
    RTC_TimeStruct.Minutes = time.minutes;
    RTC_TimeStruct.Seconds = time.seconds;
    

    sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
    sTime.StoreOperation = RTC_STOREOPERATION_RESET;
    if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK)
    {
      Error_Handler();
    }
    sDate.WeekDay = RTC_WEEKDAY_MONDAY;

    if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK)
    {
      Error_Handler();
    }

程序是抄初始化的应该没有问题才是呀。因为近期调试过LL库版本的配置,于是果断把RTC改为LL库。问题就解决了。

我相信Hal库没有问题,只是我的应用有问题,但是问题在哪里呢?没有深究,因为我已经决定以后只用LL库了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值