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

STM32CubeMX 4.20.1存在Bug

[复制链接]
中山无雪 发布时间:2017-4-8 23:03
使用STM32CubeMX 4.20.1配置STM32F103C8,在RCC中配置使用HSE和LSE,生成相关代码如下:
1 E( ?5 a: \# u+ Z& \. i3 P7 ?  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_HSE;
* k3 `8 Q- F0 c  RCC_OscInitStruct.HSEState = RCC_HSE_ON;; }" z  w" d! W  T/ q: c
  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;& l' @: K) m' S
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;3 ?* i+ |" p( }" i
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
% W* B1 W! z8 b( J/ V$ \  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
8 s1 W) O9 \/ e/ b1 R7 u7 K% \) B7 e  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;! v4 O' u! B# C6 A
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)! g) _* n  q5 j- }: V: P
* _0 k0 O  ~( X
{3 z5 d2 t" ]# P: S& v1 Y  p$ Z
.....% V, s1 J, Q$ @" \
}# [2 p) l0 I9 s+ p, f. f
....
5 A8 C! h' X* [$ K( z编译后运行HAL_RCC_OscConfig(&RCC_OscInitStruct)返回HAL_ERROR,致使程序陷入Error_Handler(void)函数死循环中
& P: u" Y$ D2 [5 L  z% j而使用STM32CubeMX 4.14生成的程序时钟设置代码如下:
; l6 m# w' W: z: hRCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;
3 B# a, f) j5 y+ H% h: l* j  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
; x& P  a. s2 x; V0 |) r) e% Z0 a  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
) e/ p# K$ w" [  RCC_OscInitStruct.LSIState = RCC_LSI_ON;; H. x% i8 l7 J( G/ ~( E1 A9 A
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
. [8 ^& T: l% g6 T6 t0 q  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
0 m9 E- Q1 {: R& b6 ]  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
) L# I- p2 v. Z  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)/ V7 o$ O: K; X3 n6 H" h8 X6 {
  {! M( s5 f' _* c
    Error_Handler();' I) B, \7 R; V* \3 V4 Q9 `
  }
- @8 r8 N3 `  F8 s3 X: r
; `6 g  c" g/ i/ `软件成功设置时钟,正确运行,两个版本生成的代码相差就为上面的红色部分" D9 B; @3 Y& d
仔细检查过stm32f1xx_hal_rcc.c文件,两个版本的STM32CubeMX 使用的stm32f1xx_hal_rcc.c完全一致8 l! [, Z& P# n+ @7 \4 [  a( a9 a
赞 收藏 1 评论16 发布时间:2017-4-8 23:03

举报

16个回答
qinyp-418319 回答时间:2017-4-10 11:42:28
/** System Clock Configuration
0 \3 T' d+ E4 u% @! |) ?, y3 m2 q; @*/
' @9 o$ j, W4 l8 Mvoid SystemClock_Config(void)
; t4 r$ G- ]0 K- x  v) R1 E: g{$ k- @9 _. p5 _) U; m( A; `
* c- n% W; B$ X6 O
  RCC_OscInitTypeDef RCC_OscInitStruct;, N& S0 k5 D' N3 j) e0 ^3 _( l
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
7 I% e& a6 L, x! y  s" l0 m  RCC_PeriphCLKInitTypeDef PeriphClkInit;; d9 [( i' J' H3 G) [8 b7 P
& I! R8 E& `& k
    /**Initializes the CPU, AHB and APB busses clocks   J- L( M7 J: i1 W8 n
    */
* o. W7 S9 ^. b+ s  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE;* g2 _! Z# V* {5 F. U& r
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;7 C! S6 t7 }# T/ G0 a2 Y8 f7 t% c
  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
/ }( K0 h# F5 m* N  RCC_OscInitStruct.LSEState = RCC_LSE_BYPASS;; K2 g, A1 B- q% E+ ?+ G* Y/ N
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
3 _& Z: z' s2 d* L% r# z" V
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;2 E/ Q* u" M! G$ R  t: x5 _; g
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;3 q+ c4 [; r8 R4 B- f/ `4 u
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;0 D- k0 e: u* \% v+ S3 \
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
2 ^! h$ ~& j; Y1 K( i: H& i8 W  {! n! g: Q5 t! [
    Error_Handler();
1 p, F7 M2 O% s: y  }
9 [2 d) k7 p2 `: v8 E
: \1 A4 z& H- f  h  y    /**Initializes the CPU, AHB and APB busses clocks   O2 _8 D% e2 O* P; f9 s$ H
    */9 i( ~2 {8 v6 D" G( r' N* X4 s
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
; {- D) H1 y$ ~7 j                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
7 w2 F3 O7 Q: b# s% ]  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
. f7 G) ]. e+ I& V7 u: ]$ C# @& p  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;+ W; j- d4 G: H5 z
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;/ h- o4 t% f& K! \4 L3 `
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
4 S' O" l0 m. J5 r
* x( v2 @: ~2 h) N+ h5 B; [  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)( ]% z" b5 W4 h; V
  {% C) Y2 t3 \2 _# B
    Error_Handler();
' T( j# g* F+ u  }' v# T% U) m" G& u: G% V5 x5 o
7 T1 M- Z1 \# C! H; g* J
  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC;4 X4 c8 S6 N2 q' A$ S6 v
  PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;3 S- Q' J. x9 `' O& r) j8 v
  if (HAL_RCCEx_PeriphCLKConfig(&eriphClkInit) != HAL_OK). |! e; |7 N, a  y" X+ X. r
  {) }' V3 I& B, C* ^3 u/ Q& \" Z, E1 Q
    Error_Handler();6 D- f! p; L2 H' ]7 W
  }" t5 h. i. b3 ^4 ]- D5 G
# N/ j$ Z3 y: h* L
    /**Configure the Systick interrupt time 3 ^8 K/ z% I. v& p) s1 f
    */$ u7 [1 N& A4 k6 S% U
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
' `" g$ v: s- y6 ~; t, S$ N; v
, v: g0 C9 m: `( Q& h    /**Configure the Systick
' [& e+ N8 x0 A2 o- C/ |, N    */
/ s( i) S0 J. p; j" }- |3 ^  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);5 m  o) o# e# a* |, Q

" h) {5 f3 n% u$ \6 D1 x. n: A8 t  /* SysTick_IRQn interrupt configuration */
7 k* i& e7 |+ o8 |1 P+ \0 M  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);9 r1 z8 I2 [7 ?7 E/ l
}
. I) }( |/ x) ?% F* u- r8 |, _这里确实不对,软件修改完了难道ST的开发人员不自己测试一下吗?
leiyijing 回答时间:2017-4-10 11:26:04
本帖最后由 leiyijing2003 于 2017-4-10 11:27 编辑 , _8 ?9 t4 O+ B- r
+ F7 m- h; m% T2 N- G. S3 K
/* RTC init function */
+ I4 _+ i2 j- J9 l5 m2 G$ kstatic void MX_RTC_Init(void)
3 z  f. z4 t+ J( M- G9 ]{
8 Q+ x" D. x( X1 D) G) k
3 R9 N1 J+ ]) y+ F  RTC_TimeTypeDef sTime;) Q! a8 P" @6 B  g: r9 t$ r' a
  RTC_DateTypeDef DateToUpdate;
; o) q4 q! i8 W( O8 Y( {. r; A' m4 h+ C) t# E/ o
    /**Initialize RTC Only ) T6 X; Z7 a8 Y4 p& S3 {
    */
( l( ?" `6 s7 @1 U8 ]7 h8 t% Z  hrtc.Instance = RTC;
+ [2 J* y4 Y  p% e( E  hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND;" F; v9 b0 [2 U7 W
  hrtc.Init.OutPut = RTC_OUTPUTSOURCE_NONE;
" c. i1 c+ x) K& ?& b  if (HAL_RTC_Init(&hrtc) != HAL_OK)
/ W5 j3 w6 k( g# o( V" w  {0 j3 |: M6 C( R- a7 |  n! o( T
    Error_Handler();4 Z0 }4 m( g* T) x; I* R$ J
  }
7 t$ t$ n! A% I) B, b, U- |: P+ N# q0 z# n" A& p
    /**Initialize RTC and set the Time and Date
7 A2 B$ m0 A* B/ O# |4 Y    */
. n& v' f, J6 `9 P& O" v  if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR1) != 0x32F2){
. y: G* n2 q( c# k* K+ R0 r  sTime.Hours = 0x1;
+ d2 g+ a  y+ Y  sTime.Minutes = 0x0;; X5 T" G/ n* _5 g
  sTime.Seconds = 0x0;
5 T* \. R- ?% y2 \4 A4 M- r# n( v$ q
: P, m+ v  B' d/ A! P  if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)6 M& J& v4 S0 p% b
  {4 S0 P6 r3 P5 |9 {
    Error_Handler();
8 {, U$ x1 B7 M# `' D7 r  }
. {$ T4 v/ U2 l* [( H  x  D9 K$ t9 N0 Y
  DateToUpdate.WeekDay = RTC_WEEKDAY_MONDAY;/ l+ r) h$ [1 h  x
  DateToUpdate.Month = RTC_MONTH_JANUARY;3 A) K% v  g, W
  DateToUpdate.Date = 0x1;
  |1 q5 c0 L( e& Y- M: W. S  DateToUpdate.Year = 0x0;
" p- F4 W0 w) q8 R8 i" [$ X. `
( f' m; P& G# m0 s4 s  if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK)
1 i. i) C( b4 ]4 p' x  {( [8 F& ^9 h4 d
    Error_Handler();4 n! q4 m1 l, g3 s0 y2 D
  }
& e! K1 k7 E! O2 _/ J- e. w' T+ X* H4 m, h2 V1 J/ F
    HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR1,0x32F2);; x5 b- R. R* i, [' ^7 t8 i6 y5 |7 x
  }
! s$ b  Y7 k% ~' j! b9 s3 j* c4 @  f. |( t
}
5 J/ E# d7 L+ Q2 p/ y0 ^7 q& D" m自动生成了上述红色的代码,没有考虑到RTC_BKP_DR1做了其它用途,这一生成,把这个值直接改了。。。不靠谱啊。。。要不然你直接在UI上让用户选择配置在哪个备份寄存器上,这样直接默认生成到了备份寄存器1上。
liuzx66 回答时间:2017-4-9 10:55:24
void SystemClock_Config(void)
1 {( `  @8 n; X; {, I/ W{, S8 z2 |) d: {+ O4 C
+ e1 `$ j" C6 }. E4 b
  RCC_OscInitTypeDef RCC_OscInitStruct;. W' D( \/ y- o; Q) I
  RCC_ClkInitTypeDef RCC_ClkInitStruct;- A$ w( x5 ^: ~9 i1 a4 n& a" ?/ \
  RCC_PeriphCLKInitTypeDef PeriphClkInit;
7 r  e/ @( x  \3 d' t7 Q2 [& m+ [6 `; c
    /**Initializes the CPU, AHB and APB busses clocks
# v  s2 U$ z& t    */
; {- `( r7 C7 c% a9 N8 `3 v3 P  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;& x1 }% A6 \8 t( @" Q! h5 E( v
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
; x! ~$ u: m, ]( t2 g, i5 K  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
8 d% `. T, U1 Y' e! r# |* U) X  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
' w9 _' M% Q  v- B  RCC_OscInitStruct.LSIState = RCC_LSI_ON;' k5 {% x1 c2 `. J- L
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
* L, _7 {7 |! p) e) A* _  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
# {( Y6 K" J, ?, h  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
7 A3 X$ [8 g# y  A6 D  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
, p/ i, K$ b: R2 Z7 }1 Y4 q  {3 ?) W& m1 A' B6 Z4 B4 Q
    Error_Handler();  F6 z' ~/ o2 d
  }: @7 `# d2 C  Z, x+ S- Q/ `
这是生成的代码
奏奏奏 回答时间: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; V! C- b/ I  m  u, o
/* RTC init function */! J# i' r  i& R6 s, m. }
static void MX_RTC_Init(void)
3 _4 q+ \0 z% H/ K. U$ C9 p{

6 K. Q$ L$ D" K- F) m这个是F1系列的吗?用的MCU是哪一款?
2 f- w6 C! S" ?" S& l以后用的时候留意一下是不是有这个问题
leiyijing 回答时间:2017-4-10 11:33:46
奏奏奏 发表于 2017-4-10 11:312 j- ^+ k1 t# d
这个是F1系列的吗?用的MCU是哪一款?
3 ]2 R7 p% d0 Y: h1 z以后用的时候留意一下是不是有这个问题 ...

% H$ @9 [0 g; q  }. @' f# w用的是STM32F105VCTx,备份寄存器1我作了Boot升级的判断条件。$ {/ M4 K) ]* Y5 z+ [% X! @
五哥1 回答时间:2017-4-10 13:20:30
这个是105的问题,还是别的芯片也都是这样,还是这个版本的CUBE有问题?
hpdell 回答时间:2017-4-10 16:02:03
之前 v4.20.0 版本也有这个问题,8 ~0 ]4 I6 F% n8 l+ x
' u  i: A' _2 r$ X
现在这个 v4.20.1 页还没有解决: s2 @  F! S% G0 I

  i8 X5 Q1 H; V: X估计看到 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 手机版