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

STM32CubeMX 4.20.1存在Bug

[复制链接]
中山无雪 发布时间:2017-4-8 23:03
使用STM32CubeMX 4.20.1配置STM32F103C8,在RCC中配置使用HSE和LSE,生成相关代码如下:) m  T& ?* R. B' Z% j8 h+ K5 Y
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_HSE;
7 l5 m. O! m% k) K+ M9 N. l3 t) G  RCC_OscInitStruct.HSEState = RCC_HSE_ON;% o$ G/ D4 M/ Z$ D$ U6 G  R0 |! R
  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
5 P; K$ ]8 ?7 m9 }4 {  RCC_OscInitStruct.HSIState = RCC_HSI_ON;% g! h) Z, @% p7 w% Y" C" j( |
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;( u# e& H# h  z( q5 U- P% z
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
6 b2 K; n% U% K  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
3 i- U2 J. g& |) R, \, y  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
& Y( B& h& F1 U9 i3 S7 W# ?
; [2 \( m- r  f3 _. O' e{8 }( W/ O  q+ E, b+ Z
.....
. p2 x& ?' ?4 _7 g}% t  F1 Q/ J% P  j% u* @9 s, ^& j
....
9 v9 q) T" k, l编译后运行HAL_RCC_OscConfig(&RCC_OscInitStruct)返回HAL_ERROR,致使程序陷入Error_Handler(void)函数死循环中, R8 S" h5 ?, u% _3 V
而使用STM32CubeMX 4.14生成的程序时钟设置代码如下:
% L8 a; `: \- T0 TRCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;
  Q0 g! X- x) B: U% o6 o# P/ A  RCC_OscInitStruct.HSEState = RCC_HSE_ON;  d+ ?" Z. |- P9 Y. G' I
  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
2 Q; c# r) e3 W1 L$ D  RCC_OscInitStruct.LSIState = RCC_LSI_ON;
; Z  f8 x, o" ^1 ~% _  ?0 C/ Q: b  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;! J# _  E+ g8 c0 B
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;8 `+ g/ U9 [, R( V/ a$ l
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
" m$ c) E! A$ U# t+ d$ l3 l  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
2 z2 ?! S  o9 Q/ h$ p  {
( d0 P# X* \5 l    Error_Handler();! {- V9 ^9 b$ b# O2 {# M
  }1 n6 l8 G, [! j# M* ^. A

1 C& F% a4 l: O& G" q软件成功设置时钟,正确运行,两个版本生成的代码相差就为上面的红色部分
1 z7 q: C9 H0 w仔细检查过stm32f1xx_hal_rcc.c文件,两个版本的STM32CubeMX 使用的stm32f1xx_hal_rcc.c完全一致
  L# k0 {$ ^5 P* z- x5 D
赞 收藏 1 评论16 发布时间:2017-4-8 23:03

举报

16个回答
qinyp-418319 回答时间:2017-4-10 11:42:28
/** System Clock Configuration; o- h3 h4 i! W6 ?
*/! }! C; ^7 s. _8 k0 B% N, K
void SystemClock_Config(void)
; x. Q7 _6 y  n+ k8 s7 a2 \% q{( K/ ?) U' q" [# }1 b
/ q0 c9 @% r2 i7 h% ~
  RCC_OscInitTypeDef RCC_OscInitStruct;" _" c9 o0 B. b0 S2 x
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
. I0 \7 |( q( z& {  RCC_PeriphCLKInitTypeDef PeriphClkInit;
9 F8 `! \, k% u$ u7 Q" P! f: X
6 I: e8 N6 h' G1 V+ \# Q    /**Initializes the CPU, AHB and APB busses clocks 3 S) Y* R9 _$ w) G6 i/ l
    */
+ ]  ~  W$ z5 d% W0 d2 W  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE;9 u/ g$ t3 s* {: {1 I
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
, f; E0 B1 r7 c/ x) a6 @, H( H" X' D  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
% t. v6 ?6 u5 v8 D3 ]  RCC_OscInitStruct.LSEState = RCC_LSE_BYPASS;9 ]8 @: f- |9 [/ g# [9 Z
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
1 E4 v$ N) x1 y+ O
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
: c$ r' Q+ S9 Y7 k3 s2 {- ?  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;! y# [3 R/ P& g0 B" ~. _7 M
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
5 u% p) G4 c- K# y4 F  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
! Y7 R  L6 Q, h+ u  {4 t& \8 R; Z7 @
    Error_Handler();: R2 ?3 t) d0 `! W& l; w+ n  V" D* o6 i
  }* q' z) W! u9 W" \; k: c& r

1 J2 l; P; W/ ~5 r1 ~7 B9 j0 N  v    /**Initializes the CPU, AHB and APB busses clocks 8 _; h3 P. |5 Y9 Y1 I, E' w
    */
' {9 p% E+ a+ q& m  _) v  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
2 y7 Q, P# A! _* ]) m                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
4 v3 q& F( B/ [& o+ `4 s3 h$ ?7 f' y  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
+ h0 Y1 H/ s( T. V, n1 U  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;  w& C' ^3 a5 {0 ^0 @, _0 D
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
8 g3 c, b( S" f. ~  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;1 p. ]+ c  o: g  u8 b3 K1 [

0 f" _# v" ]5 [+ B  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)+ Q6 s! k  k# t9 ?* e) L
  {
3 G2 D; I& w: X: F# O    Error_Handler();
: V0 J* `. u" f" h; B+ s  }- i3 x% l$ Y2 D" ~) D2 _3 ^
3 ~3 Z9 Q9 z# b/ i8 u8 |, L8 Y# I+ a# e
  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC;+ b$ h2 |" ^2 W3 P3 K; X: W% a# x
  PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
, u) q0 ]! c7 z2 m8 S( V  if (HAL_RCCEx_PeriphCLKConfig(&eriphClkInit) != HAL_OK)
+ P# l* h. [* q  {) z) d* L7 B# S* Y$ |
    Error_Handler();
' O; Q2 H7 t- `0 o  }3 p8 J& ?6 w. u$ D

8 Q+ L- T, Q* X) d$ B& j- Z+ B6 A    /**Configure the Systick interrupt time 6 q6 _2 q3 z0 N* d7 ~
    */
) C* A' y8 s+ h2 T! l# j) L; C6 R' D( ]  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);" b8 N* X) b5 F3 h0 ]" a

! W0 c! I0 \2 r0 |    /**Configure the Systick
: G/ F7 Z- p' S  L; G+ B& ~: |# L& x    */
% @3 m7 I( K! J  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);! M3 k8 \* f/ U* [5 P6 L

2 I  p- S  C- O% r% @- P, U  /* SysTick_IRQn interrupt configuration */( b7 F2 z. T7 H2 b8 d, Z  o3 }! z
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
/ W- |3 ^, V5 j}
  p% f5 @% d0 ~+ G5 m这里确实不对,软件修改完了难道ST的开发人员不自己测试一下吗?
leiyijing 回答时间:2017-4-10 11:26:04
本帖最后由 leiyijing2003 于 2017-4-10 11:27 编辑
5 z4 P8 S  o5 Y" G. A6 Z  i# l( S* `! s" U1 b- |! s! E
/* RTC init function */( c: K5 y% ?7 b# r# G% m. D) b  S
static void MX_RTC_Init(void)
) L4 n4 H! A/ j; R{; ?9 y5 l+ @$ m* _; W4 P( G
) u" V9 K# F9 w7 E1 C0 t8 y. I4 w
  RTC_TimeTypeDef sTime;
4 D1 G0 A/ Y5 |! ?  RTC_DateTypeDef DateToUpdate;8 t; N- q6 ?! Q  ^" |5 t
. v. j3 B0 s4 O5 @
    /**Initialize RTC Only
0 c8 w; F4 k  `( r) Z    */
& e3 u7 O" D0 D$ ]* q  hrtc.Instance = RTC;( S1 a5 p' m0 a0 u2 ^5 k
  hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND;; r  w" P( d0 p8 G, {
  hrtc.Init.OutPut = RTC_OUTPUTSOURCE_NONE;
. E4 ]6 I! d3 L% W  if (HAL_RTC_Init(&hrtc) != HAL_OK)
# b9 H$ m; _, ^) @/ F  {, q% _3 v0 X) S6 s9 O4 A" `; u* x
    Error_Handler();
/ p5 f7 p2 J0 w% E7 a* t# E+ g; Z  }: B' n5 t; m/ V5 m* o( a
- [& m( F5 l) B0 r- F
    /**Initialize RTC and set the Time and Date
) p' ^/ Z4 W- L( J% j    */
6 P# p6 ]8 N5 R; X; P  if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR1) != 0x32F2){
9 Y" K7 O' n2 E$ ?; w7 n4 K/ z# W  sTime.Hours = 0x1;& d, o) I- K' a& b
  sTime.Minutes = 0x0;
, I6 z1 ~, u" F" o: Z* k( r! Q  sTime.Seconds = 0x0;$ K9 i0 Y) m* R/ Q8 E6 g
# K2 l; O) ]5 E* R, o. E8 ]( M  `
  if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)7 s1 I7 O% b6 G5 t6 ]2 C5 N" [
  {" [! ^: r, g7 W# j* G' b* I
    Error_Handler();
3 }7 X( e+ ]: C  T) z  }7 D2 {1 J) d. l$ E4 Z

5 m8 c& [0 R5 {5 @  n" o/ W, X  DateToUpdate.WeekDay = RTC_WEEKDAY_MONDAY;' u" l0 x3 g- C+ [1 w. P! W
  DateToUpdate.Month = RTC_MONTH_JANUARY;: S$ g  q/ N( Z4 d4 p* N
  DateToUpdate.Date = 0x1;
$ q" Y) ?5 g/ C  DateToUpdate.Year = 0x0;. q4 L% F1 K7 B  f3 D
/ e, @! R! }! E
  if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK)
; L- D/ E4 f/ u" f  {1 C1 S! b8 I+ @: Q
    Error_Handler();
# T# g/ G4 ?  u  O; w6 u* Y  }) M! t/ n/ W# `
& B0 p$ ?( {8 k; K
    HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,0x32F2);/ C/ I$ h' z0 X  U9 D4 R
  }
" @) x9 _% T& C; G# ~- C" L
3 t6 `, E9 @9 p4 u}; _6 t1 s0 a3 E. [2 Y) R6 b
自动生成了上述红色的代码,没有考虑到RTC_BKP_DR1做了其它用途,这一生成,把这个值直接改了。。。不靠谱啊。。。要不然你直接在UI上让用户选择配置在哪个备份寄存器上,这样直接默认生成到了备份寄存器1上。
liuzx66 回答时间:2017-4-9 10:55:24
void SystemClock_Config(void)
! Y2 ?7 O9 e; d{' ^8 Y  L: @. o$ R& m% N" o. Y

& e; i+ i* a. S. @; ~  RCC_OscInitTypeDef RCC_OscInitStruct;
# [3 {; ~* V/ {$ i) u/ w* f  RCC_ClkInitTypeDef RCC_ClkInitStruct;
. G% E8 h( F8 {+ L, r( U$ {- G  RCC_PeriphCLKInitTypeDef PeriphClkInit;
6 {7 c1 U* ?+ ?) x6 ?
( d( i0 F' h. o+ W) l/ V8 a* Z    /**Initializes the CPU, AHB and APB busses clocks
' D' A* E7 j. o6 C7 t) j: D( y    */- A) W! s- v/ B( Y3 f) E! R- d
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;/ v+ s% i. O9 w, J6 w$ c
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
6 P2 M0 u+ z4 x) h9 b- K7 F. z$ e  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;2 a& P' u: j/ N  ^7 f% u
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
) W/ l7 R' @! ^' [! _# D7 Y  RCC_OscInitStruct.LSIState = RCC_LSI_ON;
9 Q2 Z" w' Z6 G2 }3 `1 x  F) r' F  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
9 f0 m! ]: O3 m: `9 x0 C9 ~  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;3 H3 {' B5 g0 L$ t# X( ?
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
, F! w$ L; I7 Y  Y  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)) f% r9 Q5 n; e' j
  {! h" H( D: c, S& J
    Error_Handler();3 Z, ?3 P& ]8 K/ x# ~$ A2 o7 C
  }7 y- L+ t0 X* T; p! r
这是生成的代码
奏奏奏 回答时间: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:26( h) f) A0 l7 j% M, ?2 l
/* RTC init function */
$ Z- j) T2 a3 g, Vstatic void MX_RTC_Init(void): r9 w, F+ h  r. @0 [
{
1 T) ~7 k) J- }2 T
这个是F1系列的吗?用的MCU是哪一款?
, Z' H9 O7 E" b/ n以后用的时候留意一下是不是有这个问题
leiyijing 回答时间:2017-4-10 11:33:46
奏奏奏 发表于 2017-4-10 11:31
$ T( e, t9 e% y# }2 b这个是F1系列的吗?用的MCU是哪一款?# m. c( @+ p2 k% }+ S
以后用的时候留意一下是不是有这个问题 ...
' J0 ]  k! U9 ~( ]: H
用的是STM32F105VCTx,备份寄存器1我作了Boot升级的判断条件。1 C: F$ r' l7 J. A; O! p
五哥1 回答时间:2017-4-10 13:20:30
这个是105的问题,还是别的芯片也都是这样,还是这个版本的CUBE有问题?
hpdell 回答时间:2017-4-10 16:02:03
之前 v4.20.0 版本也有这个问题,3 j8 T4 F; H1 m

/ h# m  q( E: T/ A现在这个 v4.20.1 页还没有解决5 ^# m, c- w' Z" L" f) N
0 k5 G! n5 Y! n" C+ \
估计看到 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 手机版