最近使用STM32G030来做项目,使用的过程发现有太多的坑了,折腾自己快要崩溃,主要问题还是初始化的过程中初始化失败,导致程序不运行。7 h& D1 l; R9 {- ~" j% s
" |% P5 `, L$ v现在总结下遇到的问题:* R- b& N# w8 x; z
1.ADC使用多通道扫描模式用DMA传输数据,HAL_ADC_Start(&hadc1);这个开始必须要放在DMA初始化相关函数的后面。
/ I: [ S; A. ^ y$ U2.开启串口中断后导致程序异常不运行,最后把开启传偶中断函数放在main函数的最前面就可以正常运行
' N8 y0 ?; i$ i- g. N ?% i3 W3.程序是按顺序上之下运行,初始化时候要考虑好顺序关系。
1 z& X; \1 [4 V! A R' p# U
; r' S% q3 Y/ B比如按下面的顺序进行初始化才可以正常的运行
; t5 O4 {* H5 e: U- u" F9 h- /* USER CODE BEGIN 1 / j/ x$ D2 }& s& Y2 E8 l
- / STM32G0xx HAL library initialization:' O) R' M" f( L" E5 f
- - Configure the Flash prefetch/ i& u# ^ P7 F; K; P: v9 c
- - Systick timer is configured by default as source of time base, but user9 e I# I! u4 B$ B/ s, ?, ^5 c
- can eventually implement his proper time base source (a general purpose
: N/ M) Y1 s" [3 o2 e4 y0 I - timer for example or other time source), keeping in mind that Time base: ]5 C- q" U: N# z2 z# i) D
- duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and
' a( T6 G/ g& N/ B% b; g2 J - handled in milliseconds basis.+ T+ k3 h$ d4 Z7 e
- - Low Level Initialization
5 S7 Y8 c) O. v1 w0 k - */
1 k- n% O5 }2 h8 B( G/ m( T7 A z0 { - : f3 C3 ~2 Z; [* z9 E' V" Z' n/ c
- /* USER CODE END 1 */
+ _2 n& Y- L% w j - 1 I K! k* h0 `+ e) e2 \) k- W' `
- /* MCU Configuration--------------------------------------------------------*/# y( k% a. K* J5 m1 a
, N0 A1 o! \9 s( Y5 A, ?: w9 }- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */: K0 R |; _7 x+ U, k; [ G% x
- HAL_Init();
- Y7 I* W) E5 G& c2 O - Enable_IT_Uart_Fun();8 b6 Z" Z" _, O
- 6 H% }! P6 g# j' o! |! `1 H
- /* USER CODE BEGIN Init /
9 b6 m/ \* t$ z- }6 B% c - / Configure the system clock to 56 MHz /
8 C+ U& z* a' Y# h( ?& a- E; ?0 q& h - / USER CODE END Init */- c9 P! D0 L" J' c5 k/ E9 e6 y$ ~! ^
' q2 P1 s }4 j# G# V+ T- /* Configure the system clock */0 q/ i: r" s) z: J) D
- SystemClock_Config();2 F; ~$ d6 N. M6 a% h# J B- I
2 S7 d4 _7 Q& m; P& G2 S8 g0 X/ W- /* USER CODE BEGIN SysInit */
2 b" L/ l$ d2 {; ] - - M9 Y4 M7 \+ X7 ^ a
- /* USER CODE END SysInit */
1 D' D. }+ U# j+ w- x4 ^ - + S4 b0 _% m1 X! I
- /* Initialize all configured peripherals /' k/ ]) [$ i1 o
- MX_GPIO_Init();% d% h# ]5 _# ]' w9 p: V
- MX_DMA_Init();
) ~" v5 M8 H, g; |2 S" w+ t& N - MX_ADC1_Init();
7 s; `+ t$ c8 x( M9 T - MX_USART2_UART_Init();
5 A3 @, W) i0 Q6 B1 | - MX_IWDG_Init();" J) x" G5 s/ y2 ^7 G
- MX_USART1_UART_Init();% J$ k+ h: L: u( m+ ~6 |
- / USER CODE BEGIN 2 */! ?' l2 v/ H i7 c# X& Z+ ?0 ]
- LED_Config();# ?& `+ n1 f, |1 d' r
- Lcd_Init();, g; z; {, h1 p$ f% Z
- Clear_Screen();
9 V- Z. o" }5 L+ K* S - Show_Picture();/开机显示logo/
) _" S2 e$ G( W1 b" l0 G5 } - Wireless_Mode_Config();
' p: {: R% G+ t }, W+ y - * m$ H2 E6 P* G, \. O2 K; h
- Flash_Init();# H$ e; w# d8 q) w
- if (HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK)# k, z& {0 j4 K0 q! q, s9 |
- {. |0 y O# L$ G9 Q) M$ n8 C
- /* Calibration Error */
" X9 n3 p4 X0 g$ p w3 ? - while(1);' ]" ~9 d% t$ @4 Q& D
- }1 z" R/ @( t; t% H, f2 r
- if (HAL_ADC_Start_DMA(&hadc1,(uint32_t )ADC_ConvertedValue,7) != HAL_OK)9 V; ~) C' k0 k& z6 b
- {
) H6 Z. E# Q% G1 {( O - / ADC conversion start error */+ M& |7 z/ O8 l, Y1 A, e0 N+ Y
- while(1);7 B: K1 Q1 L3 c0 i- J- n
- }1 i+ Y& A+ M+ {! J
- HAL_ADC_Start(&hadc1);
) P/ u7 T6 E( H- A9 E
& }/ b, x3 i5 ~ i/ m' E
复制代码
! @" c! {8 ?& c" A
1 |5 a- J; |# w1 r2 c: V: r, [* L* p |