历史上的今天
今天是:2025年02月12日(星期三)
2020年02月12日 | STM32开发何使用STVP后就无法正常工作了
2020-02-12 来源:elecfans
前言
目前很多用户在使用 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 等待周期。
下一篇:FSMC如何读写CPLD
史海拾趣
|
手头有一块3.5寸的TFTlcd,想用来做示波器屏幕, 想用atmega16单片机来控制, 发现avr单片机控制的频率太低了,屏幕刷新太慢了,弄不好, 大家说说用什么来控制好呢?… 查看全部问答> |
|
请问用Source Insight怎么看bootloader里的代码流程 不知道大家分析代码用到什么工具,听说Source Insight好用,下了一个但是不太会用,哪位大侠用过的告诉在下一声,怎么看bootloader里的代码流程?… 查看全部问答> |
|
【DIY新作】LED点阵时钟.3种字体.4种动画.自动旋屏.GPS校时【附原理图】 半年来一直在 DIY 辉光管、荧光管的时钟,其实算来,我最早DIY的时钟是LED点阵的。 时隔3年,再次汇集这段时间以来的想法,重新DIY了一款简洁、实用、功能完备的LED电子时钟。 ...… 查看全部问答> |
|
我有两块“LatticeXP2 Brevia开发套件”闲置有需求者联系qsjit@163.com 我有两块“LatticeXP2 Brevia开发套件”闲置有需求者联系qsjit@163.com … 查看全部问答> |
|
因驱动光盘里附带的MLink驱动不支持在WIN764位系统下安装 为此我花了不下一整天的时间来解决MLINK驱动的问题 最后换了32位Windows Server 2008总算可以使用 可实在不甘心一个64位硬件跑个32位版本的系统在同事的帮助下我安装了微软自带的虚拟XP ...… 查看全部问答> |
|
本人转让一块郭天祥TX-1C单片机学习板,可以在淘宝交易,要的进来,学习视频都有 因为我现在暂时要出去,本人转让一块郭天祥TX-1C单片机学习板,完全兼容他的视频。我买来是花了198玩了没几天。。。可以在淘宝交易,要的进来,学习视频都有,要的去看看,很便宜http://item.taobao.com/item.htm?id=16276203504… 查看全部问答> |
|
我现在做手机蓝牙控制小车,现在车身已经安装好了 程序也是好的,通过电脑串口可以控制单片机来控制小车,我买的HC06蓝牙模块通过TTL也可以和电脑串口发送命令,但是我把蓝牙模块连接到51单片机上后手机蓝牙发送命令就是没法控制单片机,求求哪位大 ...… 查看全部问答> |




