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

STM32CubeMX 4.20.1存在Bug

[复制链接]
中山无雪 发布时间:2017-4-8 23:03
使用STM32CubeMX 4.20.1配置STM32F103C8,在RCC中配置使用HSE和LSE,生成相关代码如下:- C: `% [& y* G9 p1 C
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_HSE;
) b1 m4 D& F+ T! C- W3 n1 v4 G  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
0 ~/ B& ]6 A$ W. F5 z  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
% j: L& |% V: Y. `  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
& r8 o4 h+ g4 G8 I; P  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
. m# x- F3 G" O- @1 _, ?9 I  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;& N, k8 }% |6 ?6 x, j; o2 \7 f
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;( U/ P7 D/ |( j5 d6 h+ {# o$ A8 s
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)$ ?8 c; v8 u1 W& Q# u( W: w
& K1 P; i* A, _8 L$ ?3 `
{
* Q( v9 z1 e5 P4 S.....6 i7 k2 a: s. g* i# N( P
}
4 D( \( B. [3 M....
0 d  N5 o8 j; b+ P编译后运行HAL_RCC_OscConfig(&RCC_OscInitStruct)返回HAL_ERROR,致使程序陷入Error_Handler(void)函数死循环中7 y# p: X) m  k" |! \
而使用STM32CubeMX 4.14生成的程序时钟设置代码如下:1 t8 Z% K9 \7 F" d
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;# ^$ i! z0 ~, m# N8 K8 a
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
. Q- v; o; [/ r+ M% w7 ^  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
7 F# f0 l. Q5 ]2 @  RCC_OscInitStruct.LSIState = RCC_LSI_ON;$ q0 D& U, D" U) ?; M% u( D
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;+ m! h/ l' K: x
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;9 O8 N8 m/ {6 A2 _
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
5 s2 A3 C: [' O- h' j9 B4 e' Y  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)+ T- x! @6 U1 f2 v% K  A
  {
6 `" T5 q1 i; q3 M% g7 O7 {    Error_Handler();
$ q) k4 [5 h- v# P# x  }
4 N) @3 x9 }- S% b  v; k4 Q* X7 g: M
" G) }& c  j; [' o+ I软件成功设置时钟,正确运行,两个版本生成的代码相差就为上面的红色部分
, t. o0 E3 K, ]. f/ f8 y仔细检查过stm32f1xx_hal_rcc.c文件,两个版本的STM32CubeMX 使用的stm32f1xx_hal_rcc.c完全一致
9 t$ i7 b2 y3 J1 q
赞 收藏 1 评论16 发布时间:2017-4-8 23:03

举报

16个回答
qinyp-418319 回答时间:2017-4-10 11:42:28
/** System Clock Configuration! J$ K1 c# _5 u# y! \0 {
*// u- W6 P# T6 s
void SystemClock_Config(void)
: q& A  x- J- N: e{
6 B9 _8 N: }7 G( M; ^& B- `$ T
( p2 O/ V/ K. G3 m2 \  RCC_OscInitTypeDef RCC_OscInitStruct;
$ k# C8 p8 ?  R  RCC_ClkInitTypeDef RCC_ClkInitStruct;5 p  U2 G1 w$ R9 n
  RCC_PeriphCLKInitTypeDef PeriphClkInit;
6 ?5 g% g" `( Y  w7 o1 R
4 T, S' j* ~# Q' S# ]2 Z$ a0 G    /**Initializes the CPU, AHB and APB busses clocks
9 }4 o' z/ _7 X+ Y    */, j; L# R8 B  |
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE;3 F& |1 B) J1 D* J) L2 b
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
* \" v, T; l$ G+ _2 M  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
4 c( Q/ `* k) e) i) Z$ R9 S9 m  RCC_OscInitStruct.LSEState = RCC_LSE_BYPASS;
4 m7 z! C7 Y" j: x6 B9 G  z; r) t  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
# V. o  c- N0 b1 s
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;5 V/ O- A7 {$ v$ Z! _. h5 M
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
# J% x& F0 p$ I  Y  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;/ }1 i! h  [! m: U
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
, ?6 Y! b' o/ k6 ~, ^# j# \  {
6 n2 o4 a( u7 o8 k5 S    Error_Handler();# z; t; J) A1 C  U9 ~8 `
  }
' f, v* H: p) J5 Y/ n4 u
( m. x- c0 U) P( N    /**Initializes the CPU, AHB and APB busses clocks * [$ Q* r7 f' d
    */
. O" x  A  o& k  }+ F& l, e9 Z  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK- B2 d* v# L; Z. D/ r' g
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
% }9 o) P$ J! u# W0 C1 o  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
" J8 {4 p" q! t. O" B9 C8 G  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;) @) ~1 o3 \) r4 o
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;4 r: ^" r- c  e( g  l4 I
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
& B. U, v* J. `( r% h$ Q# b
( A4 `$ H) d+ i3 W6 }8 I  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
% H5 W8 k! e3 @4 {  {
$ n0 i+ t8 t" [    Error_Handler();
% \: X. ?( q8 J  }
0 K* j4 L5 d  K7 k) p0 d2 ^& C+ f7 c1 @( g, @# x
  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC;
2 F; r9 ~8 [0 P. z+ |3 b. c& A  PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
; n& P/ w5 L& s! h. D- y9 a  if (HAL_RCCEx_PeriphCLKConfig(&eriphClkInit) != HAL_OK)
4 W6 l& u' u$ o! `/ Y0 {+ C  {  i2 E3 M0 D; a: k% Z, K1 h
    Error_Handler();+ W% {, u# H% l" L' Q
  }
3 Q% n& @: Z& G( i' k; y) H# A
* m3 s& b6 m- L    /**Configure the Systick interrupt time
# Z. u7 |; `. [4 s# y3 O% Q8 V& X    */
, |8 x) L6 L, e& R9 f% b, f  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);9 i  X1 F, b* _! d& F; j

) `  }* s4 n; n* ^    /**Configure the Systick
: j! n% n# p4 I* B  o- N( R6 @% {- `7 t    */" k9 }. ]# G. @4 G* o% _
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);% V8 ^+ T; [5 X

7 ~( G% `% {0 n0 Y' Y  /* SysTick_IRQn interrupt configuration */
  J- F- A2 j* P9 k6 ~8 S! [  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
/ m1 e) r# g9 l9 I' p}, w! E9 f% i: F9 ?, n% H  E
这里确实不对,软件修改完了难道ST的开发人员不自己测试一下吗?
leiyijing 回答时间:2017-4-10 11:26:04
本帖最后由 leiyijing2003 于 2017-4-10 11:27 编辑
1 f) @$ g$ d. i3 I4 X  q) D7 q5 g0 ~4 @5 k8 h7 P5 o1 i
/* RTC init function */
& o7 }; N" Z" `- zstatic void MX_RTC_Init(void)+ o, S. b/ [( e
{
2 J0 {% b) N* J+ \) C$ r9 q$ b, B. b2 g& N/ Q3 C
  RTC_TimeTypeDef sTime;& E- B% E  Y6 P( ~
  RTC_DateTypeDef DateToUpdate;
, Z4 _7 z3 m& f3 |0 l& }! [+ |) ]; H
    /**Initialize RTC Only 0 I$ o+ l; W- _2 x1 e7 n* N+ z5 |
    */  F# W% j8 P$ |* j5 J
  hrtc.Instance = RTC;$ o: A' W# F; s% J& O8 _# V5 F: C' y
  hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND;/ g, A/ z, C* P
  hrtc.Init.OutPut = RTC_OUTPUTSOURCE_NONE;
1 U8 c: D2 A# f- L  a' O  if (HAL_RTC_Init(&hrtc) != HAL_OK)
4 c# I9 _9 X, [4 K# O9 ~  {
! C  o. P, F, L& {    Error_Handler();
9 |9 O" |6 u; `. ?* P, Y. t  }+ D4 O& X" t0 w. A5 ^( h

. Q! q  j: t" _    /**Initialize RTC and set the Time and Date
& v9 w; M" w6 h! Q  T    */
* P: n* t- n% m9 S  if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR1) != 0x32F2){, R. V5 H' \! X" d: K
  sTime.Hours = 0x1;! M' q1 M. c$ U' n% I+ T4 _
  sTime.Minutes = 0x0;
9 d$ Q( X( A, V. x3 L  sTime.Seconds = 0x0;" W' N# ^/ s, S0 T6 V3 ~4 a& c
7 g* Z/ }& r: ]3 B! n8 Q( z  u
  if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)4 E% I& W! k, U5 \% C7 |4 R
  {: s5 P& I$ `' e2 _* I4 @+ j
    Error_Handler();2 O! W8 F- ~4 Q+ \2 {
  }
, A  e; C7 i) ~) ?! |
0 |+ J; ^: t. M1 d% o  DateToUpdate.WeekDay = RTC_WEEKDAY_MONDAY;
( ]: R# t! {  ?; j  |  DateToUpdate.Month = RTC_MONTH_JANUARY;
) k7 [* U* Y& h0 {/ o  DateToUpdate.Date = 0x1;3 G# H! q: _& h
  DateToUpdate.Year = 0x0;2 `$ U! K) o, o" I5 v$ r8 {
( u+ A6 }0 O1 J) p! z) A) i
  if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK)
0 v4 g9 J! f' [  {
) l! m) l9 s1 [" K$ @" q7 \    Error_Handler();
% {+ d" T4 n/ |# K  }0 v0 L5 h; r- S. i; h

* L' K) f8 Z) \    HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,0x32F2);
- F0 {; d7 [) K6 v  }
+ @$ |  R/ L7 w1 }2 T3 w
) D. a4 \  u: O( @2 o}+ a3 ~& K9 @  s$ A$ K6 G/ j
自动生成了上述红色的代码,没有考虑到RTC_BKP_DR1做了其它用途,这一生成,把这个值直接改了。。。不靠谱啊。。。要不然你直接在UI上让用户选择配置在哪个备份寄存器上,这样直接默认生成到了备份寄存器1上。
liuzx66 回答时间:2017-4-9 10:55:24
void SystemClock_Config(void)2 z$ Z0 b  E5 S, g0 U# o
{- w9 \% \$ ?% L* T3 f# Y2 j
" }" S* H8 J5 D6 j8 N- Y6 z8 G
  RCC_OscInitTypeDef RCC_OscInitStruct;
2 Y% K: h& o6 s7 v2 M  RCC_ClkInitTypeDef RCC_ClkInitStruct;3 e( y& l1 j: r) ]. u
  RCC_PeriphCLKInitTypeDef PeriphClkInit;7 s: S9 u7 ?  g" Y- j
: F9 ]. t' x8 [8 j* ?7 c
    /**Initializes the CPU, AHB and APB busses clocks
0 Y8 B. c) G, l0 W1 f  v( I8 X    */
3 C7 I2 j. n7 m5 B6 u  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;  v0 y) C% o' c  {
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;3 Q0 [" T4 C! p
  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;3 U# S2 u6 V) ]9 b
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
: X; o. X7 B- c' S. Z# p7 f" {% x  RCC_OscInitStruct.LSIState = RCC_LSI_ON;
$ j8 w' y+ N+ ^0 q  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
1 }4 y/ R* r7 }! i  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
- x8 Q7 N# d* k! a  [  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;7 A+ F) i% {! [5 ^" J
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)  f% a: O5 ^3 f" l1 C1 ]
  {! Q# i# a- q( t5 j  G: |9 e
    Error_Handler();
  M; ?, {) B' X7 J  }
0 |6 L+ q2 F+ b+ ]- x5 ~1 H0 v! t3 t! u这是生成的代码
奏奏奏 回答时间:2017-4-9 08:34:45
看来这个版本还是没有完全修复时钟配置的问题,但是我用外部时钟锁相正常运行是没问题的,STM32F107VCT6的主控
liuzx66 回答时间:2017-4-9 10:54:04
我试了一下,好像没有你说的现象,是不是我们设置的不一样?
harvardx 回答时间:2017-4-9 12:02:02
好快 刚刚下载好.  却被搞知有bug 看来小改款不靠谱 .坐等 4.3x版本.
奏奏奏 回答时间:2017-4-10 11:31:09
leiyijing2003 发表于 2017-4-10 11:263 v; o5 d- v0 }/ [3 a
/* RTC init function */
% i. i1 Y" O' i$ N3 [static void MX_RTC_Init(void)5 l4 y0 K0 A3 d6 ]5 S1 O
{
$ h: P# ]5 l9 z7 x5 k
这个是F1系列的吗?用的MCU是哪一款?+ {( ^0 O) O" {8 V3 Z$ v& P4 x
以后用的时候留意一下是不是有这个问题
leiyijing 回答时间:2017-4-10 11:33:46
奏奏奏 发表于 2017-4-10 11:31% L$ T, v( Q; {  m) i6 u* i
这个是F1系列的吗?用的MCU是哪一款?
; G( X9 [3 U3 A9 |: U' _以后用的时候留意一下是不是有这个问题 ...

3 q. _. {( g1 E9 l, E用的是STM32F105VCTx,备份寄存器1我作了Boot升级的判断条件。- U+ {6 D7 ^/ O  A. w& r1 q
五哥1 回答时间:2017-4-10 13:20:30
这个是105的问题,还是别的芯片也都是这样,还是这个版本的CUBE有问题?
hpdell 回答时间:2017-4-10 16:02:03
之前 v4.20.0 版本也有这个问题,- U) |0 J, x8 w! l- @: X1 N6 j! j

; y# p& I: D) G" d现在这个 v4.20.1 页还没有解决9 t1 d* a. f: n) y$ x
& \- e- Y$ `( @2 S8 M
估计看到 H7 系列的单片机时能否正真解决哟,真准备下载来试试,看到你发出的bug,还是不下载了,免得浪费时间,之前的 v4.16 貌似使用是非常好的,估计他们现在换人了啊
星星王 回答时间:2017-4-11 08:55:25
周二来签到
zbber 回答时间:2017-4-11 11:15:33
/** System Clock Configuration
leiyijing 回答时间:2017-4-12 10:14:14
我用的V4.17还可以,但是公司做一个测试夹具要用到F413,4.17不支持这颗芯片,尼玛,不是逼着我要更新吗。。。
wofei1314 回答时间:2017-4-12 10:48:31
407VE使用正常
12下一页

所属标签

相似技术帖

官网相关资源

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