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

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

[复制链接]
STMCU小助手 发布时间:2022-8-2 21:25
前言 + L; V  S, W, ~, p6 S: x0 u
目前很多用户在使用 STM8 的时候使用了 16MHz 的内部振荡或者外部晶体来作为时钟源。事实上,STM8 家族中有些系列是支持最高 24MHz 主频的,比如 STM8S207STM8AF52,等等。那么,需要更快的运行速度时,是否只需要使用更高的主 频就可以直接运行了呢?
+ H$ l  f% x  B  b; C# p$ }  B& v% ^

5 l( C& }+ X; c$ L* _9 ]4 e问题 2 }: d6 K% y* _+ {3 v7 [# ~
某客户在其产品的设计中,使用了 STM8AF52A9。客户工程师称其一段以前已经验证过的代码,使用 STVP 下载后无法正常运行。但是他试过在 IAR for STM8 中是可以正常调试的,不知道为何使用 STVP 后就无法正常工作了呢?
7 f) H# y: Q5 z% G5 i
( H& Y$ P7 B3 z
调研
4 h8 C5 R) R$ Y9 R1.了解问题
; n: l( T! V; H. D! [8 b0 P4 l# k/ U使用编译好的.s19 文件使用 STVP 烧写到 STM8AF52A9,发现上电后是无法正常工作的。观察用户代码,在 IAR 中进入调试状态,可以断点调试,单步调试,都可以。不过,最后发现在线调试时,一旦运行到以下代码时,程序就死掉了。
  1. status = CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE,
    ( u/ K7 M$ }; r" y+ v
  2. CLK_CURRENTCLOCKSTATE_DISABLE);
复制代码
/ I% X9 e% E* w6 |8 ?$ ^8 y
+ X/ s) s* i- K* K8 E" S- V
2.分析问题
1 _  b" x: p8 d# Y# mSTM8 上电后默认的主时钟源为内部 HSI RC 时钟的 8 分频,即 fHSI/8。原因是 HSI 时钟的稳定时间短,而 8 分频可保证系统在较差的 VDD条件下安全启动。等主时钟源稳定后,用户可以自行将主时钟切换到其他时钟源上。/ y  n/ ]6 Q0 ^! I
先来看一下刚才这个函数的原型:# X6 A, K$ M: C3 ]1 B; q  ~2 K
  1. ErrorStatus CLK_ClockSwitchConfig(CLK_SwitchMode_TypeDef CLK_SwitchMode,
    # ?: s$ z! W$ ]& V( ?( f- @! f
  2. CLK_Source_TypeDef CLK_NewClock, FunctionalState ITState, CLK_CurrentClockState_TypeDef % b# W6 I; D, x: Y& F0 c
  3. CLK_CurrentClockState)
复制代码
' R8 s% W4 Q  S4 z  o
0 a6 l9 e7 C! t# p
它的作用在于切换时钟源。CLK_SwitchMode 代表使用的切换方式,有自动切换和手动切换;CLK_NewClock 代表新的时钟源;ITState 代表是否使能或禁用中断;CLK_CurrentClockState 代表切换后原时钟源的状态是否保持或关闭。所以,用户代码的意思就是:使用自动切换方式,切换主时钟到 HSE,不产生中断,切换后原主时钟源关闭。
  F$ \- B& G( Z3 e- W! _切换主时钟源后程序就出问题这种情况,看来问题很可能出在 HSE 上,必须对外部晶振进行检测。原本思考是否 HSE 外部晶体的振荡是否存在什么问题,但是在使用示波器进行检测后发现 HSE 已经是在正常的振荡当中了,而且波形很漂亮。但是, 在示波器上看到频率是 24MHz。检查晶体上的标记,果然是 24MHz 的频率。所以,客户在使用 STM8AF52A9 时,为了提高性能,使用了最高主频 24MHz。: j2 `5 {( e5 u; l+ s5 a" ^, h" l/ E
客户所遇到的问题应该就出在 24MHz 的使用上了。客户以前使用都是 16MHz 的主频。STM8 要求,如果用户使用的主时钟频率超过了 16MHz,那么 Flash 以及 EEPROM 的访问需要配置 1 个等待周期。
0 l7 W1 g% j7 F$ |7 v2 g9 FSTM8AF52A9 数据手册可见如下:" Z/ G" U" ^- v8 v$ l2 }7 G4 g
7 S5 H3 k1 H8 w3 R- e7 z/ H8 u
! M9 j$ m1 V1 k0 [& S1 _
%9L~P3{1`C@5HBKL5UFP`}0.png
2 I) \% g2 A& Y0 j% i% p" {7 r7 l/ Z: C, H# U+ R" R% l
参考手册 RM0016 在 HSE 的描述中,也提到了:
2 r8 ]8 M3 t. e  Z# o6 ~
& e) h- j$ b7 N. F
4 R4 l2 P, ?! W7 g- D- T3 S: R
(VKB$FWAG}FN{[~WV2FV0%D.png 9 y% o, W( q" [7 A! S* k
5 a$ N/ `8 [- M  J  R
对于选择 0 等待周期还是 1 等待周期,必须在选项字节中选择。检查芯片的选项字节,发现选择的是 0 等待周期,所以问题就是就出在这了。
2 f8 ]& a! |, a; ~3 J
' z; U2 Z" [6 A2 ^
3.问题解决
, z1 Q8 p. \% c9 r* g9 y# x使用 STVP,在 OPTION BYTE 页面修改选项字节,将等待周期设置为 1 个等待周期,如下:下载更新芯片的选项字节,使用之前的.hex 文件,可以正常工作了。
) x' J) r  {5 A, N* }3 u2 G
" ~! i: C' H, D# b! ^, Q% w9 T
结论 9 G+ @5 \+ _* z* d9 |3 [0 x# z% J
由于使用的 24MHz 主频已经超出 16MHz,而在选项字节中并没有修改等待周期为 1 等待周期,导致在 Flash 访问上存在问题,无法正常运行程序。6 B( F& L* e: o9 E9 T

  M4 l0 v$ A6 ?) t& I
处理 9 K1 w9 g5 B8 m/ ^7 R$ h
需要修改选项字节,将等待周期修改为 1 等待周期。 % i* r4 {; \: w8 g# r4 i

8 _) ?, ^; y# z完整版请查看:附件2 R0 Q: ~1 b' w6 M# L3 F& _
. x7 Y; R1 C4 I6 c( T, Q

: O9 K$ U4 Q' ]9 C! N0 Q5 M' J
JRVPB2EJ8I`8J1QY]`H0LYH.png

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

下载

194.18 KB, 下载次数: 0

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

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版