你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM8 使用 24MHz 外部晶振无法正常运行

[复制链接]
STMCU小助手 发布时间:2022-2-26 16:38
前言
7 ~  u! _% J0 B, ^: u8 K9 z0 i目前很多用户在使用 STM8 的时候使用了 16MHz 的内部振荡或者外部晶体来作为时钟源。事实上,STM8 家族中有些系列是支持最高 24MHz 主频的,比如 STM8S207、STM8AF52,等等。那么,需要更快的运行速度时,是否只需要使用更高的主频就可以直接运行了呢?% n4 z- y4 U0 ?5 G

  n7 D+ R) T% A8 `' D: P问题
. b( U3 O; \) V" i8 E某客户在其产品的设计中,使用了 STM8AF52A9。客户工程师称其一段以前已经验证过的代码,使用 STVP 下载后无法正常运行。但是他试过在 IAR for STM8 中是可以正常调试的,不知道为何使用 STVP 后就无法正常工作了呢?
8 y1 K3 M) W" ]( m4 N5 O% q+ {6 T7 K
1 a0 n& t8 U3 M
& u* ?" v* Q1 H" J% u1 ^调研  S, X, Q- b/ t. T/ \) _
1.了解问题

* f9 a& v" I! Q$ G使用编译好的.s19 文件使用 STVP 烧写到 STM8AF52A9,发现上电后是无法正常工作的。观察用户代码,在 IAR 中进入调试状态,可以断点调试,单步调试,都可以。不过,最后发现在线调试时,一旦运行到以下代码时,程序就死掉了。
/ D. W% ^" a. g
  1. status = CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE,$ C  s  F* B# [' D
  2. CLK_CURRENTCLOCKSTATE_DISABLE);
复制代码

  x) u# K& R! p% F" L' d& m4 P2.分析问题
6 p1 A. C$ d( O4 {STM8 上电后默认的主时钟源为内部 HSI RC 时钟的 8 分频,即 fHSI/8。原因是 HSI 时钟的稳定时间短,而 8 分频可保证系统在较差的 VDD条件下安全启动。等主时钟源稳定后,用户可以自行将主时钟切换到其他时钟源上。5 f! n8 T5 |' J2 o

9 e( O& V+ U4 A0 Y- x. Y
& W1 z: _4 e: a. z先来看一下刚才这个函数的原型:2 y9 D& k) G9 }8 h
  1. ErrorStatus CLK_ClockSwitchConfig(CLK_SwitchMode_TypeDef CLK_SwitchMode,8 O+ g2 t' H" n( y6 }+ F' G
  2. CLK_Source_TypeDef CLK_NewClock, FunctionalState ITState, CLK_CurrentClockState_TypeDef; t% \4 P' ~4 u! J0 d
  3. CLK_CurrentClockState)
复制代码

) U. ~+ @; f8 H! h8 b+ K4 a9 G它的作用在于切换时钟源。CLK_SwitchMode 代表使用的切换方式,有自动切换和手动切换;CLK_NewClock 代表新的时钟源;ITState 代表是否使能或禁用中断;CLK_CurrentClockState 代表切换后原时钟源的状态是否保持或关闭。所以,用户代码的意思就是:使用自动切换方式,切换主时钟到 HSE,不产生中断,切换后原主时钟源关闭。: e' m0 H$ `+ y' ~) l) w7 _  M7 M
2 `7 {" Q1 C9 W+ E1 R3 K
切换主时钟源后程序就出问题这种情况,看来问题很可能出在 HSE 上,必须对外部晶振进行检测。原本思考是否 HSE 外部晶体的振荡是否存在什么问题,但是在使用示波器进行检测后发现 HSE 已经是在正常的振荡当中了,而且波形很漂亮。但是,在示波器上看到频率是 24MHz。检查晶体上的标记,果然是 24MHz 的频率。所以,客户在使用 STM8AF52A9 时,为了提高性能,使用了最高主频 24MHz。. s3 c  E4 ], ~% W' e' n0 ^5 |$ j1 y
6 V# K. n4 l# S' P% d. I! A
客户所遇到的问题应该就出在 24MHz 的使用上了。客户以前使用都是 16MHz 的主频。STM8 要求,如果用户使用的主时钟频率超过了 16MHz,那么 Flash 以及 EEPROM 的访问需要配置 1 个等待周期。
- w9 J7 ~( x3 I- o! P. j! H
, A1 t, ]! h+ ?5 _$ y7 aSTM8AF52A9 数据手册可见如下:5 b% W' f0 m0 i& A# ~" k9 X4 ^5 F
: x7 B& I# K. \: g- s2 j% m
S3R[MMLPE4G~(PQGMKS`K30.png
: v8 T! ?" z( N+ N+ G
* M+ K! q: q. ?, \+ e参考手册 RM0016 在 HSE 的描述中,也提到了:
! t9 _9 g5 K4 `. @- C0 C# n; v
) d" a7 y' _/ o $QEF9@9VV]C@IPA5CZSZ@JN.png
$ r. r. w; K! V7 ]  k/ I2 v& F  W& \. r/ x7 P' T5 E( T) }
对于选择 0 等待周期还是 1 等待周期,必须在选项字节中选择。检查芯片的选项字节,发现选择的是 0 等待周期,所以问题就是就出在这了。6 [0 b% ^8 m8 K; Y

0 @. a  k! G  H3 f6 e" c3.问题解决; C# B2 i2 d; _! X' I
使用 STVP,在 OPTION BYTE 页面修改选项字节,将等待周期设置为 1 个等待周期,如下:& k7 F8 l6 T3 f# S

0 w2 o' z6 Z" N R(FA%]Y4H6UT[GQH4U_M5PW.png " T  c; J( e; ]' B
3 n. w0 E" ?+ @
下载更新芯片的选项字节,使用之前的.hex 文件,可以正常工作了。
1 _% w. R2 w9 j8 _  x
0 @& o2 ^8 y7 \" c结论8 b! |! M+ @% p) E# H7 l  Y" m
由于使用的 24MHz 主频已经超出 16MHz,而在选项字节中并没有修改等待周期为 1 等待周期,导致在 Flash 访问上存在问题,无法正常运行程序。
( T0 L: x+ N* ]# y( c! n( h6 y& c& _1 m; K

# \. B7 F  g& K6 W( x处理
& R$ ]" z* _8 Y: {需要修改选项字节,将等待周期修改为 1 等待周期。
5 O; C( c# m# |. H
% N3 Y8 L, r4 V7 ^# i$ n7 \* U
赞 收藏 评论0 发布时间:2022-2-26 16:38

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版