0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32开发何使用STVP后就无法正常工作了

MCU开发加油站 来源:互联网 作者:佚名 2018-04-24 08:47 次阅读

前言

目前很多用户在使用 STM8 的时候使用了 16MHz 的内部振荡或者外部晶体来作为时钟源。事实上,STM8 家族中有些系列是支持最高 24MHz 主频的,比如 STM8S207、STM8AF52,等等。那么,需要更快的运行速度时,是否只需要使用更高的主频就可以直接运行了呢?

问题

某客户在其产品的设计中,使用了 STM8AF52A9。客户工程师称其一段以前已经验证过的代码,使用 STVP 下载后无法正常运行。但是他试过在 IAR for STM8 中是可以正常调试的,不知道为何使用 STVP 后就无法正常工作了呢?

调研

1.了解问题

使用编译好的.s19 文件使用 STVP 烧写到 STM8AF52A9,发现上电后是无法正常工作的。观察用户代码,在 IAR 中进入调试状态,可以断点调试,单步调试,都可以。不过,最后发现在线调试时,一旦运行到以下代码时,程序就死掉了。

status = CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE,CLK_CURRENTCLOCKSTATE_DISABLE);

2.分析问题

STM8 上电后默认的主时钟源为内部 HSI RC 时钟的 8 分频,即 fHSI/8。原因是 HSI 时钟的稳定时间短,而 8 分频可保证系统在较差的 VDD条件下安全启动。等主时钟源稳定后,用户可以自行将主时钟切换到其他时钟源上。

先来看一下刚才这个函数的原型:

ErrorStatus CLK_ClockSwitchConfig(CLK_SwitchMode_TypeDef CLK_SwitchMode,CLK_Source_TypeDef CLK_NewClock, FunctionalState ITState, CLK_CurrentClockState_TypeDefCLK_CurrentClockState)

它的作用在于切换时钟源。CLK_SwitchMode 代表使用的切换方式,有自动切换和手动切换;CLK_NewClock 代表新的时钟源;ITState 代表是否使能或禁用中断;CLK_CurrentClockState 代表切换后原时钟源的状态是否保持或关闭。所以,用户代码的意思就是:使用自动切换方式,切换主时钟到 HSE,不产生中断,切换后原主时钟源关闭。

切换主时钟源后程序就出问题这种情况,看来问题很可能出在 HSE 上,必须对外部晶振进行检测。原本思考是否 HSE 外部晶体的振荡是否存在什么问题,但是在使用示波器进行检测后发现 HSE 已经是在正常的振荡当中了,而且波形很漂亮。但是,在示波器上看到频率是 24MHz。检查晶体上的标记,果然是 24MHz 的频率。所以,客户在使用 STM8AF52A9 时,为了提高性能,使用了最高主频 24MHz。

客户所遇到的问题应该就出在 24MHz 的使用上了。客户以前使用都是 16MHz 的主频。STM8 要求,如果用户使用的主时钟频率超过了 16MHz,那么 Flash 以及 EEPROM 的访问需要配置 1 个等待周期。

STM8AF52A9 数据手册可见如下:

参考手册 RM0016 在 HSE 的描述中,也提到了:

对于选择 0 等待周期还是 1 等待周期,必须在选项字节中选择。检查芯片的选项字节,发现选择的是 0 等待周期,所以问题就是就出在这了。

3.问题解决

使用 STVP,在 OPTION BYTE 页面修改选项字节,将等待周期设置为 1 个等待周期,如下:

下载更新芯片的选项字节,使用之前的.hex 文件,可以正常工作了。

结论

由于使用的 24MHz 主频已经超出 16MHz,而在选项字节中并没有修改等待周期为 1 等待周期,导致在 Flash 访问上存在问题,无法正常运行程序。

处理

需要修改选项字节,将等待周期修改为 1 等待周期。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2266

    文章

    10871

    浏览量

    354806
  • 时钟源
    +关注

    关注

    0

    文章

    93

    浏览量

    15934

原文标题:STM8使用24MHz外部晶振无法正常运行

文章出处:【微信号:mcugeek,微信公众号:MCU开发加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    请问上电如何判断ADP2291正常工作了呢?

    输入是4.9V,给4.2V锂电池充电充不进去。请问我上电如何判断ADP2291正常工作了呢?我如果不接锂电池,测量第3个管脚BAT的电压是0V;接上锂电池测量3个管脚BAT的电压是
    发表于 01-08 09:36

    STM32程序运行偶发不工作,只能重新烧录程序才能正常的原因?

    STM32F051程序运行偶发不工作,表现无法通讯,也无法控制,重新上电也无法恢复,只能重新烧
    发表于 04-07 06:09

    LM358替换圣邦威SGM358后为什么无法正常工作了

    现在用LM358替换出现很大的问题:在3.3V供电情况下无法正常通信,将电压提高到3.6V可以通信。手册中单电源供电的范围是3V~32V,3.3V是在此范围内的,为什么
    发表于 08-30 08:01

    STVP的作用是什么

    文章目录一、前述二、STVD的使用三、STVP的使用1、STVP的作用:2、STVP的使用四、串口烧录程序一、前述STVD是意法半导体推出的,可以支持STM8和STM32而IAR不尽如
    发表于 07-15 09:01

    MCU休眠唤醒ST25R3914工作正常问题

    ,此时偶尔出现3914无法正常工作,目前测试两个之间SPI通讯有,3914的RF口也有信号输出,但是天线端没有信号。这种情况只要出现只要不断供电不管多少次唤醒都不能
    发表于 05-09 15:03

    造成AD623无法正常工作的原因是什么?

    接入10nF的电容,它无法正常工作,其输出电压等于偏置电压,但是,去掉输入串联的电容,它又可以正常工作
    发表于 11-15 06:27

    为什么手按住晶振单片机就能工作了

    晶振为单片机提供时钟频率,有了时钟频率单片机才能正常工作。上电,如果晶振不起振导致单片机无法正常工作
    的头像 发表于 10-13 16:26 5868次阅读
    为什么手按住晶振<b class='flag-5'>后</b>单片机就能<b class='flag-5'>工作了</b>?

    STM32F4系列芯片无法正常工作的现象及原因分析集锦

    最近一年多开始使用STM32F4系列芯片,在使用开发板、评估板的时候一切正常,但当自己做板子的时候事故频发,最典型的就是无法启动、无法刷机,
    发表于 01-22 09:59 21次下载
    <b class='flag-5'>STM32</b>F4系列芯片<b class='flag-5'>无法</b><b class='flag-5'>正常</b><b class='flag-5'>工作</b>的现象及原因分析集锦

    1、STVD和STVP的使用及串口烧写程序教程

    文章目录一、前述二、STVD的使用三、STVP的使用1、STVP的作用:2、STVP的使用四、串口烧录程序一、前述STVD是意法半导体推出的,可以支持STM8和STM32而IAR不尽如
    发表于 11-21 18:51 17次下载
    1、STVD和<b class='flag-5'>STVP</b>的使用及串口烧写程序教程

    STM32每次下载正常运行,但是断电或复位程序运行就无法正常运行的解决办法

    STM32每次下载程序正常运行,但是断电或复位程序运行就无法正常运行,大概解决办法如下1、
    发表于 12-08 11:51 28次下载
    <b class='flag-5'>STM32</b>每次下载<b class='flag-5'>后</b><b class='flag-5'>正常</b>运行,但是断电或复位<b class='flag-5'>后</b>程序运行就<b class='flag-5'>无法</b><b class='flag-5'>正常</b>运行的解决办法

    STM32的SPI1,按下复位键无法通信或者用仿真器提供的电源时无法正常通信、只有当重新连接电源才正常通信

    最近利用STM32调试NRF24L01模块进行无线收发通信,在实际调试过程中遇到以下问题:1.STM32板子在仿真器提供电源下,NRF24L01无法正常通信,当其它外部电源替换
    发表于 01-12 12:15 2次下载
    <b class='flag-5'>STM32</b>的SPI1,按下复位键<b class='flag-5'>无法</b>通信或者用仿真器提供的电源时<b class='flag-5'>无法</b><b class='flag-5'>正常</b>通信、只有当重新连接电源才<b class='flag-5'>正常</b>通信

    STM32G0复位死机

    有客户反映,STM32G071RBT6 在使用 STM32CubeProgrammer 烧录完程序只能运行一次,复位,程序无法运行,如果
    的头像 发表于 03-17 10:56 7129次阅读

    服务器在升级RAID卡固件版本无法正常启动

    使用Unikits工具升级RAID卡固件版本,服务器无法正常启动,系统进入救援模式。
    的头像 发表于 06-26 11:12 953次阅读
    服务器在升级RAID卡固件版本<b class='flag-5'>后</b><b class='flag-5'>无法</b><b class='flag-5'>正常</b>启动

    STM32无法正常输出PWM信号的原因及解决方法

    无法正常输出PWM信号的问题。本文将探讨STM32无法正常输出PWM信号的原因,并提供解决方法。 一、引脚配置错误
    的头像 发表于 01-02 17:38 9173次阅读

    为什么我的PoE设备无法正常工作

    Hi福专家,为什么我的PoE设备无法正常工作
    的头像 发表于 01-25 11:13 791次阅读
    为什么我的PoE设备<b class='flag-5'>无法</b><b class='flag-5'>正常</b><b class='flag-5'>工作</b>?