最近使用STM32G030来做项目,使用的过程发现有太多的坑了,折腾自己快要崩溃,主要问题还是初始化的过程中初始化失败,导致程序不运行。
8 o6 y, a# y8 F) h7 t. p" {
% x% V, v- J' A& b3 N4 A现在总结下遇到的问题:, {! V; i; M# i) t
1.ADC使用多通道扫描模式用DMA传输数据,HAL_ADC_Start(&hadc1);这个开始必须要放在DMA初始化相关函数的后面。
/ [7 R( T2 N4 ~: s3 k2.开启串口中断后导致程序异常不运行,最后把开启传偶中断函数放在main函数的最前面就可以正常运行
9 [$ e* i$ q( Y5 `: ~1 {3.程序是按顺序上之下运行,初始化时候要考虑好顺序关系。# a3 |4 o v" j/ k: ]! b
) k: c8 S/ F2 p( x) a/ a( O k5 @比如按下面的顺序进行初始化才可以正常的运行
% H8 K4 u2 Y- o, j1 C2 {- /* USER CODE BEGIN 1 /+ F$ G) `& n, J3 F7 e1 O
- / STM32G0xx HAL library initialization:9 u2 c) X( k- F9 E. p, h+ d3 j
- - Configure the Flash prefetch8 F' S5 A. Z' o5 d
- - Systick timer is configured by default as source of time base, but user
% S3 l3 N+ k4 H" s3 R. q# p8 B - can eventually implement his proper time base source (a general purpose8 s- I) G. w) I' [6 _
- timer for example or other time source), keeping in mind that Time base, o k" R! b7 o. q& d
- duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and; j9 a0 o% J. i7 ^# y9 n$ \+ {
- handled in milliseconds basis.5 }- x4 r! p1 U5 a
- - Low Level Initialization
+ q" Z" T6 Z2 y7 O; H7 W3 o3 f - */
$ Q; e! _/ i1 x5 }% x1 {. B5 |
$ S% N( V- A$ z& l- /* USER CODE END 1 */! Y# V6 [9 T9 r2 ?2 G5 G
! d. h$ u/ k; p; m9 }! `. p8 \1 P- /* MCU Configuration--------------------------------------------------------*/
# P% l! b( X; X9 D - . C% R' {+ P" r& l
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
6 l7 B1 {0 |. I6 O+ z5 y3 b5 H0 ~ - HAL_Init();
+ D! o0 @, f$ u+ V - Enable_IT_Uart_Fun();
, [: S! P# s& o: k
' z! ~0 p! ^# B( d- /* USER CODE BEGIN Init /
$ b9 J+ s. S4 O* R; G/ q1 ? - / Configure the system clock to 56 MHz /
6 s7 M; X1 @1 A7 s. X+ N2 v& y7 x' p - / USER CODE END Init */
8 V9 ]5 P: z8 Q
( z& r( B" r8 t6 n2 q: q" v- /* Configure the system clock */
0 Q( F% d# s; ~; W - SystemClock_Config();) c# D, g/ [( N8 ]6 P9 _. [* c
4 A9 N+ H2 r7 u5 _- /* USER CODE BEGIN SysInit */
4 \: _5 n0 |' h9 w0 k7 q4 [/ y - 7 H1 _+ p" I8 T
- /* USER CODE END SysInit */5 w* l6 B5 n" H7 Y+ J& [
& P, G ?- F0 e' e& S- /* Initialize all configured peripherals /
1 D* h8 F f: Z8 N! [9 Z& g - MX_GPIO_Init();
' \4 K* u) }5 v H - MX_DMA_Init();: u# c A4 g/ ~# W/ r
- MX_ADC1_Init();) L" K) C6 q V: W5 X. s5 _( l
- MX_USART2_UART_Init();
# T# K, u7 w; [0 R t - MX_IWDG_Init();
# e& g" _, B- Y4 s8 s* T' F - MX_USART1_UART_Init();
8 k+ A/ |3 L4 g) z J# D+ m - / USER CODE BEGIN 2 */
$ F4 m; |- `* l. E+ M - LED_Config();
- @! v5 k; n) P - Lcd_Init();
$ k3 R( L i3 d - Clear_Screen();
9 W5 w4 _% k3 h! f9 j - Show_Picture();/开机显示logo/; ?9 B/ j, u# E% t" t# k5 S
- Wireless_Mode_Config();
: c: B* Y v, v: A d# W6 D
, G! N a; @3 D2 l- Flash_Init();
% r6 q8 V1 {2 j5 _; } - if (HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK)* C$ s; x' w C9 ~
- {9 j5 s7 Q" K/ @6 Q _6 ?' l' e
- /* Calibration Error */
( J+ Q) i% ^7 i1 i1 P; C* d - while(1);
' q# |% B) s: I7 I9 Z% | - }
! \0 H9 y0 ?3 I& B8 y( ` - if (HAL_ADC_Start_DMA(&hadc1,(uint32_t )ADC_ConvertedValue,7) != HAL_OK)9 z# I" J. N9 z% O0 e
- {
a: C0 B& B: w7 i& |' z - / ADC conversion start error */+ n2 _! N7 L/ w) g( r5 Q
- while(1);
/ M z/ }% ]. f! r5 E - }9 k2 h# X" _' p) _- u% E
- HAL_ADC_Start(&hadc1);
* p1 b3 h3 O5 B* |- P- h" J1 ^ - $ }. k" ^6 _8 |( j% ]- R
复制代码 ) k# K6 \( V& i' P0 H' c
' x8 v! F6 @: B2 ], t% O
|