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

STM8 使用 24MHz 外部晶振无法正常运行

[复制链接]
STMCU小助手 发布时间:2022-8-2 21:25
前言 . E1 O7 ^+ H* I+ b" j6 Z  c
目前很多用户在使用 STM8 的时候使用了 16MHz 的内部振荡或者外部晶体来作为时钟源。事实上,STM8 家族中有些系列是支持最高 24MHz 主频的,比如 STM8S207、STM8AF52,等等。那么,需要更快的运行速度时,是否只需要使用更高的主 频就可以直接运行了呢?
- i  S; @" w1 }0 x8 L  K6 E8 _
" @5 ]7 F7 p, }( q3 B
问题 6 d1 X! [0 x* J# Z0 |2 r8 U
某客户在其产品的设计中,使用了 STM8AF52A9。客户工程师称其一段以前已经验证过的代码,使用 STVP 下载后无法正常运行。但是他试过在 IAR for STM8 中是可以正常调试的,不知道为何使用 STVP 后就无法正常工作了呢?- F, ^9 q# }% L4 g5 ^- ~3 d( n$ F

7 N* M: n3 q6 B* c+ M2 K$ ?调研
+ F, |8 ~3 ]! a- T1 b, |! o1.了解问题
2 v9 A: ?% J  K' ~使用编译好的.s19 文件使用 STVP 烧写到 STM8AF52A9,发现上电后是无法正常工作的。观察用户代码,在 IAR 中进入调试状态,可以断点调试,单步调试,都可以。不过,最后发现在线调试时,一旦运行到以下代码时,程序就死掉了。
  1. status = CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE,
    ' u7 @2 i. A, j3 C. Y' ?
  2. CLK_CURRENTCLOCKSTATE_DISABLE);
复制代码
! L, t. y# L, E' Q1 W& u
/ I( N0 }2 M! {7 i" |6 T/ B
2.分析问题
7 j" \  M/ g# w4 t9 ^' w  ~& K/ Q$ JSTM8 上电后默认的主时钟源为内部 HSI RC 时钟的 8 分频,即 fHSI/8。原因是 HSI 时钟的稳定时间短,而 8 分频可保证系统在较差的 VDD条件下安全启动。等主时钟源稳定后,用户可以自行将主时钟切换到其他时钟源上。
1 L# L0 A# x7 v; z4 c先来看一下刚才这个函数的原型:! W( U& J% s2 B1 v- ?
  1. ErrorStatus CLK_ClockSwitchConfig(CLK_SwitchMode_TypeDef CLK_SwitchMode, ' v5 r! o8 K" g- K
  2. CLK_Source_TypeDef CLK_NewClock, FunctionalState ITState, CLK_CurrentClockState_TypeDef 3 Q9 u" P% p0 X- g4 M% e
  3. CLK_CurrentClockState)
复制代码
9 }/ a9 ^4 j, l
4 g0 \1 H4 N  @9 L$ t
它的作用在于切换时钟源。CLK_SwitchMode 代表使用的切换方式,有自动切换和手动切换;CLK_NewClock 代表新的时钟源;ITState 代表是否使能或禁用中断;CLK_CurrentClockState 代表切换后原时钟源的状态是否保持或关闭。所以,用户代码的意思就是:使用自动切换方式,切换主时钟到 HSE,不产生中断,切换后原主时钟源关闭。$ s3 u$ l( k% s
切换主时钟源后程序就出问题这种情况,看来问题很可能出在 HSE 上,必须对外部晶振进行检测。原本思考是否 HSE 外部晶体的振荡是否存在什么问题,但是在使用示波器进行检测后发现 HSE 已经是在正常的振荡当中了,而且波形很漂亮。但是, 在示波器上看到频率是 24MHz。检查晶体上的标记,果然是 24MHz 的频率。所以,客户在使用 STM8AF52A9 时,为了提高性能,使用了最高主频 24MHz。
5 ?) r! |  m- z& Z客户所遇到的问题应该就出在 24MHz 的使用上了。客户以前使用都是 16MHz 的主频。STM8 要求,如果用户使用的主时钟频率超过了 16MHz,那么 Flash 以及 EEPROM 的访问需要配置 1 个等待周期。
: L: f- b1 ]! n6 f# U+ D* Z0 q. xSTM8AF52A9 数据手册可见如下:# _% u7 U7 A" z3 [" M
( r, ^; v  t, W0 @& V

! I; N4 r/ @0 Y, d %9L~P3{1`C@5HBKL5UFP`}0.png
4 T1 D9 y/ `7 K$ g4 t& T8 i5 e( A# ^8 }6 _) _8 C
参考手册 RM0016 在 HSE 的描述中,也提到了:8 r% _( X- P9 s1 B. W2 w0 @7 c

4 W: d0 ]( ~0 i$ N) J  `

3 K. j4 y/ \! m' H7 O8 D (VKB$FWAG}FN{[~WV2FV0%D.png ( l) d0 ^2 O  q) |" {+ H

8 e9 P2 Z  h- y) x1 t
对于选择 0 等待周期还是 1 等待周期,必须在选项字节中选择。检查芯片的选项字节,发现选择的是 0 等待周期,所以问题就是就出在这了。 , [) X6 X- F( C; u# g# T

1 e$ p1 D- U3 S8 b+ q  G
3.问题解决 * ?3 P) i6 Y( V2 _+ r; z' t
使用 STVP,在 OPTION BYTE 页面修改选项字节,将等待周期设置为 1 个等待周期,如下:下载更新芯片的选项字节,使用之前的.hex 文件,可以正常工作了。, |% z7 L0 Z* b, H# a! n; h

' N2 I6 m2 l$ @' }, ~- g3 e0 a8 r
结论 . r; I3 ~( x8 I* S% O% M
由于使用的 24MHz 主频已经超出 16MHz,而在选项字节中并没有修改等待周期为 1 等待周期,导致在 Flash 访问上存在问题,无法正常运行程序。
6 Y2 v0 Y! c7 x5 D
4 f+ k% \8 [" r. S% T  u
处理 - Y+ O4 o. ~. U
需要修改选项字节,将等待周期修改为 1 等待周期。
: e% n2 N0 q- u! d; y$ U/ Y; b' a
完整版请查看:附件6 `; m1 t( X) U! [9 {

$ |8 t' M8 h' \5 M8 z  l; `- y
/ ?1 i$ f+ A% M! a$ Q2 G6 {
JRVPB2EJ8I`8J1QY]`H0LYH.png

STM8使用24MHz外部晶振无法正常运行_V1.pdf

下载

194.18 KB, 下载次数: 1

赞 收藏 评论0 发布时间:2022-8-2 21:25

举报

0个回答

所属标签

相似技术帖

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