最近使用STM32G030来做项目,使用的过程发现有太多的坑了,折腾自己快要崩溃,主要问题还是初始化的过程中初始化失败,导致程序不运行。
9 @: T: C# a% [$ x+ b- E/ F+ ^/ W& R' h& }% T
现在总结下遇到的问题:- }( D) J m" w9 C6 X: g& `+ n8 Y+ V
1.ADC使用多通道扫描模式用DMA传输数据,HAL_ADC_Start(&hadc1);这个开始必须要放在DMA初始化相关函数的后面。, \, |( w% g- j
2.开启串口中断后导致程序异常不运行,最后把开启传偶中断函数放在main函数的最前面就可以正常运行5 M6 ^' S9 ^2 Q+ |2 G7 a1 Q' ]
3.程序是按顺序上之下运行,初始化时候要考虑好顺序关系。
' Y4 g* ?$ n% k- Y8 X/ ]. {) ~: X$ k2 J+ d5 v7 r
比如按下面的顺序进行初始化才可以正常的运行
% ~7 N& D/ d0 p! C$ b# b& u0 o! i- /* USER CODE BEGIN 1 /$ S B8 O2 L# O+ a+ o) R+ W
- / STM32G0xx HAL library initialization:
( f1 H: g1 ]* t2 H - - Configure the Flash prefetch$ Z2 Q2 S5 z% B5 m0 J3 m
- - Systick timer is configured by default as source of time base, but user
) i4 H2 _5 w. I0 t - can eventually implement his proper time base source (a general purpose
/ g% Q# b: C0 D% i - timer for example or other time source), keeping in mind that Time base
0 {6 q) l, k/ n* K$ _$ f% O - duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and
6 _; g1 K1 u2 R - handled in milliseconds basis.! d q+ T. c4 }# O' P$ Z
- - Low Level Initialization$ j' f) a; U, H. M% h
- */' u" @9 K9 e4 Y7 j& Q$ m& \% G
- 7 L. e1 ?+ z; {0 X! N; G3 r z
- /* USER CODE END 1 */
* H" G% M& o2 c$ ]
( h' v" s/ E9 X- /* MCU Configuration--------------------------------------------------------*/1 r" o( P$ e7 h3 Z4 M$ z+ ^1 b
- 4 ?$ g2 Q2 |4 z9 A$ J8 |
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
7 N( T, [; J: J7 X1 w - HAL_Init();
, g7 w/ K* p# f; }% Q5 r1 O - Enable_IT_Uart_Fun();
9 z- C7 E9 I; b5 k. e - + j7 T' [% x9 G0 d: d2 h' r
- /* USER CODE BEGIN Init /' v$ l1 `; O" _4 I' V
- / Configure the system clock to 56 MHz /
" I- B$ b6 T1 E; y7 a: X - / USER CODE END Init */
) G: H; }/ {& r [3 f; i- b
& s, k7 g# M" Q- /* Configure the system clock */
& D$ s! v: E$ x/ N- S - SystemClock_Config();
& S2 U& ^) I% F& r) C. G/ j - 8 p+ {9 c' G5 Z4 Q5 v
- /* USER CODE BEGIN SysInit */
3 x9 B. x- x# D3 a! k3 T0 |0 V - . Q0 N# Y: P$ a$ z
- /* USER CODE END SysInit */
! o' f# j) d" @" R
) G# Y+ x2 y3 X7 s W- /* Initialize all configured peripherals /1 e* _; V0 z4 z5 K( \
- MX_GPIO_Init();
2 p' a5 f' {' U4 s - MX_DMA_Init();
" r5 ]* T' J: P( n1 f8 [ - MX_ADC1_Init();6 |. _4 \2 b6 [& c( U) s. I
- MX_USART2_UART_Init();
1 I9 F) c2 t2 K - MX_IWDG_Init();
% ~" E: T# a: b" Q" X* h - MX_USART1_UART_Init();
0 b! J9 P% Z& m/ G - / USER CODE BEGIN 2 */2 z- _ g0 X' X) W3 k' ]
- LED_Config();3 o+ a% g! e1 t+ I% R5 T5 P( K
- Lcd_Init();$ G: A/ n) ~- Z1 a: J) f
- Clear_Screen();
2 v; y0 p2 d3 J* i# R, c1 v e% I - Show_Picture();/开机显示logo/
) E9 w5 `! L' B( X) R/ ?6 y" f - Wireless_Mode_Config();' t/ r1 e' X1 B
- ( Y0 G# x4 x+ u7 N' c
- Flash_Init();& l2 D, \4 U2 K4 ~3 @) C! R
- if (HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK)
8 ^% F9 U, I; ?+ w - {. {9 x* v9 H, c$ @
- /* Calibration Error */1 x! @2 A B9 c, \
- while(1);; m% j! B; Q" a7 W& V7 X
- }. H7 o! K' R* w: ^* S
- if (HAL_ADC_Start_DMA(&hadc1,(uint32_t )ADC_ConvertedValue,7) != HAL_OK)5 r. |! Q& j. _" t; M/ }: ~6 c
- {9 `* b* {+ ^3 k
- / ADC conversion start error */
5 G4 E7 J2 J y" L* n - while(1);+ l: G8 }; A8 [* h" l
- }/ i+ x5 Y5 y7 Q
- HAL_ADC_Start(&hadc1);
* W# L/ ^+ u& N; o - 9 n7 K3 Q3 Z# v3 M2 t/ S: @
复制代码 : c9 b9 j4 s) r
# n$ A1 g5 i( j& B, y+ f+ D |