最近使用STM32G030来做项目,使用的过程发现有太多的坑了,折腾自己快要崩溃,主要问题还是初始化的过程中初始化失败,导致程序不运行。
+ C$ n! ?! ~2 {( ?9 U' S% J
! g: I' I) l4 [现在总结下遇到的问题:: q$ X; D" U) [1 f6 o; u5 X
1.ADC使用多通道扫描模式用DMA传输数据,HAL_ADC_Start(&hadc1);这个开始必须要放在DMA初始化相关函数的后面。* _8 J U, X+ g
2.开启串口中断后导致程序异常不运行,最后把开启传偶中断函数放在main函数的最前面就可以正常运行
' j$ W, ]0 c* C& N% i0 y" S3.程序是按顺序上之下运行,初始化时候要考虑好顺序关系。3 Q! c. a8 T; N( @
0 e0 U' v" c. ]" D8 t
比如按下面的顺序进行初始化才可以正常的运行
# ^7 R- m' Q' X8 \- /* USER CODE BEGIN 1 /
& t+ [' P& z1 t. J* F# m! t - / STM32G0xx HAL library initialization:
% N2 I W. @3 |" B - - Configure the Flash prefetch
& ?/ [0 f' l- H; j" { - - Systick timer is configured by default as source of time base, but user' u: I: _7 N+ J3 j4 k( j
- can eventually implement his proper time base source (a general purpose. N5 M( a, z0 S' `
- timer for example or other time source), keeping in mind that Time base
3 k/ k4 ^ h a% X0 ~/ W* i - duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and
. ]+ U! I7 |9 e5 R/ J9 O - handled in milliseconds basis.
1 D8 p# v7 l2 ?: p$ h0 ~/ Y/ ^ - - Low Level Initialization* C L$ g7 T+ y, A# G" J6 [' M1 O$ f
- */
$ P; D9 [) Z% y! f
! I% p% r- z( ]% f# ^- /* USER CODE END 1 */
' I: s- X$ ^: H8 V
! h" ^. Q. U! V/ m# H1 [2 ?' D! B- /* MCU Configuration--------------------------------------------------------*/7 [" L# G( H8 h
- ' J0 @" F( a; @% \; i9 u& v N3 u
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
: X1 U! v! a2 t5 D% W+ r - HAL_Init();; v! W& R& e7 S' P. B1 @& q' _' w
- Enable_IT_Uart_Fun();9 u+ H: l' i% O2 S8 B
- + b4 v: I& B3 ?; g C- k
- /* USER CODE BEGIN Init /" U' M# f' d) N5 z$ _! B
- / Configure the system clock to 56 MHz /
! Y9 O: V8 Q' M& | - / USER CODE END Init */
) C: | Q& Z3 `: o6 f; A - : N# M3 w2 l! b0 {# r# ]
- /* Configure the system clock *// x) F, U9 G9 v1 F4 \
- SystemClock_Config();
4 j8 a& X0 B5 ]. ~! l, ~
+ X6 T7 N7 O7 r) x- /* USER CODE BEGIN SysInit */
+ `* K) J. O1 M3 o& o9 p& w4 S - & @1 V g5 v" \$ q2 ?4 @
- /* USER CODE END SysInit */& p5 V# U: T# K0 F* ? Q+ N
- ; S& S3 @ j7 K4 ?7 W% R" B, o& Y
- /* Initialize all configured peripherals /- F& W& `2 b7 [1 q, t$ {8 B, ?
- MX_GPIO_Init();, x$ h, r6 x3 M- ?
- MX_DMA_Init();! e% K( ^0 z# q9 u4 W9 G3 ~ B
- MX_ADC1_Init();
2 N6 N. M; ~- c# p- g! P' c( S - MX_USART2_UART_Init();
% i0 C2 P$ |4 ] - MX_IWDG_Init();
]% @6 G2 Y9 z, H0 E2 a - MX_USART1_UART_Init();' o* Y" A3 k1 D
- / USER CODE BEGIN 2 */5 k, a7 W* d& ?# c* Z
- LED_Config();2 Z- [1 `$ f5 v) D0 {% H5 P
- Lcd_Init();
. F. d3 [9 L2 H& {$ p7 j - Clear_Screen();
' ?6 {8 |: @ {" R - Show_Picture();/开机显示logo/+ y9 }! X" m6 F0 F: W! x! B
- Wireless_Mode_Config();0 `/ H- m h! J0 V6 _
- : H4 B* w' U$ X& H! z7 M
- Flash_Init();
; ^/ G5 H) r6 `* I4 J5 s8 x8 u) l - if (HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK)
; }; {2 `7 a8 z0 l* M s+ b - {- x$ h' L$ k, N; u4 u5 I
- /* Calibration Error */0 n) E3 o6 M3 i. h4 w
- while(1);- s9 P2 `. Y. `: V
- }2 x& c/ l$ `) u) X# S- c- G. k
- if (HAL_ADC_Start_DMA(&hadc1,(uint32_t )ADC_ConvertedValue,7) != HAL_OK)( v; c! _ i; r i
- {
( Z; ~7 V- f3 a+ O: K1 @# j - / ADC conversion start error */
' C( f6 `+ _/ N, v - while(1);- Y4 g% {0 {) Q$ ^ W- [/ d3 v5 R$ R
- }
% @# Q7 H; q3 ^% \5 E; L9 q1 S5 x - HAL_ADC_Start(&hadc1);" D8 q8 G) J' E* s$ B. ?6 c$ |9 N
- * n+ ?$ u, b1 R8 j
复制代码
% T0 x* ~6 e6 j. x% R
$ q' [- y$ ~! f) Q. h |