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

【经验分享】STM32G070xx的flash分布如下图,打算将Page 63用于保存用户数据。

[复制链接]
STMCU小助手 发布时间:2021-11-10 01:00
1. 使用 CubeMx 创建 ADC 工程. i4 t+ N- D, {
打开 CubeMx 软件,选中我们此次使用的单片机型号 STM32G030F6P6 ,点击 StartProject." O! l3 a% a4 V! f4 q

. P* I, h5 \" v# ?4 Y. i& u先配置一下串口,用来打印相关信息4 r  r2 h9 P- r% x2 i) S4 \* W
- e: ?# U# v' M  `
20210129082956474.png

+ P' R* K- t4 f1 P2 ]: w1 B6 J, y( j6 r7 {9 n- G  B7 {
再来配置 ADC
3 |3 E7 u% E" C: H: X& z6 W9 O( b+ q/ n: y
20210129083334250.png

- _1 P) {. u6 ]4 Y  i/ x) E  y  {' u2 T9 S
20210129083449121.png

, O; W2 R& e0 b) w5 ?0 W
1 C1 ~1 i0 W) F& K3 k配置DMA/ s  B$ r5 Q6 T! n
20210129085309510.png

- \* S* o' B1 ?0 W
* F  N- B/ D6 _4 Z" m1 F. NPS:DMA 需要要配置成循环模式,否则只填满一次缓存数组后就停止工作,需要重调用启动 DMA 的函数.$ S& z6 T# `7 O$ f+ [( y

2 H6 P( Y+ o9 X3 H配置时钟& u% g0 T: J, Z- W+ I3 |( j
$ B; H/ w, p$ m: }' n
2021012908370231.png
, i" O- L6 g, I( _: U
) J) }7 a6 M) _% p, p/ b2 `1 i- d
ps:本实验使用内部高速时钟,未使用外部晶振,主频设置为最大的64MHZ.
, g8 d: R4 N- U6 X6 i" \3 F3 I$ A4 u  x) }
配置工程相关选项8 N, v; d. C& k' D( b) f

5 u% F& c4 ~+ x" D2 r
20210129083821567.png

! t; s$ |: _0 m  J. H* U9 J, ^) u  l. @% }
配置完成后点击右上角 GENERATE CODE完成工程的创建7 D/ Y1 L% s" a7 ~2 Z; J

3 y) A- V0 L6 J4 P( p2 i& e; m2. 编程7 Z; v$ ^& ^) y- B5 O5 Q+ U. V
2.1 串口相关的代码
6 ?; {/ A* p  e' W- m因打印相关信息需要使用 printf ,需要包含 stdio.h 的头文件,且需要重新设 fputc 的函数
5 N: e' h7 Q" C
  1. /* Includes ------------------------------------------------------------------*/) t' y* p& K; i* ~1 l- Q
  2. #include "main.h") T1 i! N0 J  u, L# B$ T
  3. & q% {, z: p1 t
  4. /* Private includes ----------------------------------------------------------*/
    9 }. F6 |" n- r; h. C9 t, a( i6 W" V
  5. /* USER CODE BEGIN Includes */
    . L% o: l5 P8 H& A' _
  6. #include "stdio.h"
    * \) B0 C1 N& h- Y1 w, O
  7. /* USER CODE END Includes */+ |* ~3 Q1 J! u% C" z* J. e( Z, {
  8. - o- e0 ?2 x: j# q6 z* T& Q
  9. /* Private typedef -----------------------------------------------------------*// t: T7 w7 A1 I# q+ n
  10. /* USER CODE BEGIN PTD */: O6 o( C3 Q* q6 c; {

  11. & A+ j* q- z% G* T$ G' M4 u
  12. /* USER CODE END PTD */
    3 G5 f% D" w; z  L' ?0 ?; J
  13. ; Q. s& k8 S! K. S9 t
  14. /* Private define ------------------------------------------------------------*/7 E' Y. N2 S6 T+ R9 k
  15. /* USER CODE BEGIN PD */; G; l- @. h! A* u
  16. /* USER CODE END PD */7 q8 i1 e9 Q! b

  17. 6 m, g, I* y9 b  J
  18. /* Private macro -------------------------------------------------------------*/( c+ d1 o( C" o, q4 U: L0 q
  19. /* USER CODE BEGIN PM */
    1 @3 S+ e! K7 S% c- ~3 b* \  _

  20. + K1 P- d9 {! _8 L
  21. /* USER CODE END PM */
    ) c" F  O% w( `; X! U  A
  22. ' W5 G0 [5 u- L. z" x+ {* b
  23. /* Private variables ---------------------------------------------------------*/
    2 _) K' j0 I' R
  24. ADC_HandleTypeDef hadc1;' E, U4 U; v: S3 @' Z6 k) F3 K
  25. DMA_HandleTypeDef hdma_adc1;
    - }5 Z7 _; i7 K1 R; K% z, H
  26. 0 f& e) m" S' ?* i
  27. UART_HandleTypeDef huart1;2 z. E* G9 z" |6 k* h  D

  28. ) Q7 h, ~+ [9 c& Q
  29. /* USER CODE BEGIN PV */( I- O- _6 [: J

  30. + r# y1 {9 U& Y4 y: M( o
  31. /* USER CODE END PV */
    ( D: ?9 \/ M4 ?
  32. 1 G; w$ t) ^3 J/ `: q: f' m
  33. /* Private function prototypes -----------------------------------------------*/! c: C& N  J4 e- J& c
  34. void SystemClock_Config(void);
    ( v) a5 _5 H  @
  35. static void MX_GPIO_Init(void);/ B. k6 Q$ Q4 f$ `
  36. static void MX_DMA_Init(void);  K! i% y. w- ]! Y/ A* q1 T5 R* \
  37. static void MX_ADC1_Init(void);+ l$ ]7 Z9 t' `0 m; _# H
  38. static void MX_USART1_UART_Init(void);
    $ ^* e: \6 G) s; I, I
  39. /* USER CODE BEGIN PFP */
    ; _5 F5 H/ \+ N0 @2 I( ^* x$ y/ N

  40. 1 k% ~2 V% p( }, R
  41. /* USER CODE END PFP */* ~! i9 m4 r  z8 w- |

  42. 6 N" W- ^2 K9 j3 N& n3 r
  43. /* Private user code ---------------------------------------------------------*/
    5 Z: N  }! a$ L/ _# ?9 Q* D. f; I
  44. /* USER CODE BEGIN 0 */2 t; S' W5 B' u9 b: ~
  45. __IO uint16_t adcCovValueBuff[30][2] = {0};        //存放ADC的值 2通道  每个通道存放30个值,由DMA循环写入) @8 ^0 ^  V( n
  46. uint16_t adcAverageBuff[2] = {0};        //对每个通道30个ADC值取平均值
    $ Z% C) }. B" n# ~  f# k. S' U# [

  47. & Y/ k6 v9 W9 |' m6 M- H

  48. . s! N1 p+ q/ N. I8 [
  49. #ifdef __GNUC_
    / m8 n6 s) S" H8 T! z. A
  50. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
    ; [6 b) h  O6 j! [
  51. #else8 n+ F8 J) P" R  g1 ~/ r6 m! M  h
  52. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)6 l3 ?+ C) k4 y0 n$ }4 ]+ A
  53. #endif
    1 Q  g+ z( c- g) b" Q+ e. p
  54. PUTCHAR_PROTOTYPE. p; ~4 {( w9 l
  55. {. w4 t, m' f: ?! X$ X- C
  56.     HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 0xFFFF);% r2 g0 ?- \  O+ r% {7 l
  57. 8 b7 t) I* c3 v
  58.     return ch;
    * T* j% c8 V8 y  s& T  {5 }& E
  59. }* m$ `5 T! |; f' F

  60. 1 ^, G) N! |9 \! a
  61. /* USER CODE END 0 */
复制代码
7 J$ _1 S- h0 j4 n

  i( o1 @9 O1 e5 M+ K! h( W2.2 main 函数
% q) x) I, d  k* I6 a7 S0 U( h: n
  1. /**
    $ M- Y5 k; y0 F% L7 l& {( H
  2.   * @brief  The application entry point.
    9 N$ r5 E" S- w+ u
  3.   * @retval int3 o: t) b0 \) d
  4.   */
    ) R( o+ M( N; T0 x! q  ^$ y
  5. int main(void)3 j8 {' k2 D+ g0 M) g) w# d
  6. {( R% I, v/ T0 T6 c7 L: o
  7.     /* USER CODE BEGIN 1 */
    1 {& J. R" @" N5 W* m+ o% c) b
  8.     float votage = 0;
    ! r8 M* d% b8 ?" F; G! c9 B) |5 I' H# X
  9.     uint32_t sum = 0;
    & p1 R1 Q% m' c7 }( x7 G" K
  10.     /* USER CODE END 1 */
    0 s% C( z( L& [2 ?
  11. 7 z( X7 S3 ^% R1 M+ z0 R, R
  12.     /* MCU Configuration--------------------------------------------------------*/
    ( C$ N$ R' g' p' ~

  13. ; r+ D% _3 A* p8 D
  14.     /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    6 c2 Z. h# D7 I/ j* ~2 y# N
  15.     HAL_Init();/ u8 _5 J$ p2 L* a
  16. , l( X' w2 v* C* |; O+ O$ s
  17.     /* USER CODE BEGIN Init */" d) F3 D8 r5 C5 O/ h; D

  18. 6 H; N% w" m* D# v" Q
  19.     /* USER CODE END Init */
    4 p- S" a9 T, r0 `$ I
  20. 0 |, C0 o# a$ C3 i  U
  21.     /* Configure the system clock */8 @% i$ T" A; V6 s0 D$ g
  22.     SystemClock_Config();
    5 O; f8 j8 ]- K7 r

  23. 8 x" R  }/ A/ _. L/ E
  24.     /* USER CODE BEGIN SysInit */, L8 z; h) |( V% F4 N% D$ U
  25.   a/ B' z6 Y3 j) ?
  26.     /* USER CODE END SysInit */' G, e( b$ J5 v
  27. 2 r& [: K" e7 [8 C# |4 F
  28.     /* Initialize all configured peripherals */0 F$ D: l: Q, `. T/ B; u+ l
  29.     MX_GPIO_Init();
    7 p  f1 Z5 D( `6 {( D
  30.     MX_DMA_Init();6 c( q7 C# S: d) b+ O- P  P  f
  31.     MX_ADC1_Init();5 d( O( z+ V# Z7 i
  32.     MX_USART1_UART_Init();
    & H) V6 D5 P9 T$ j6 t
  33.     /* USER CODE BEGIN 2 */
    $ v+ p( X' Z# Q. I+ j& x2 {
  34.     printf("stm32g030f6 adc demo...... \n");
    % E' s9 g7 J" t, b% O" m  ]
  35.     HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adcCovValueBuff, 60);% E% i1 y: M' |+ W& y
  36.     /* USER CODE END 2 */! o( f# ?' r) L9 ]7 {' n0 i
  37. ' V2 C+ ^( M% h7 l7 f, h6 x8 v0 C
  38.     /* Infinite loop */
    9 y) }7 z" z- d4 Z$ i
  39.     /* USER CODE BEGIN WHILE */# |, Y8 ]) W! p
  40.     while(1)
    & L% h* O) _$ d3 q2 U
  41.     {
    % V9 @) ]) O7 p, v4 P
  42.         for(uint8_t i = 0; i < 2; i++)
    5 _6 ?" E$ L7 ]' _1 c2 N- e
  43.         {
    & w4 O# {" C- Y3 Q( z
  44.             for(uint8_t count = 0; count < 30; count++)# J/ p7 @% }7 s; n1 a
  45.             {
    2 K2 F$ |9 k; C7 ~, d
  46.                 sum += adcCovValueBuff[count];$ g  w! ~& q2 Q% l. O1 p' j5 C/ E
  47.             }
    ! @/ q9 D! f& d0 t
  48.             adcAverageBuff = sum / 30;
    & r3 I* }; ?" i$ D
  49.             sum = 0;2 L  U. s5 ~9 r; d. }  b, b
  50.         }
    / k$ J* _7 v( D; V+ h! |2 v

  51. 7 E. a  i' G0 L6 C0 b; U
  52.         printf("---------------------------------------- \n");
    ! V) w8 z) A# q, P+ [$ Z0 \. f
  53.         printf("ADC Channel01 Value:0x%04X \n", adcAverageBuff[0]);9 p. ]0 K) ]0 Q" ]+ D& }% S
  54.         votage = (float) adcAverageBuff[0] / 4096 * (float)3.3;) H+ Q7 f$ [( b4 s
  55.         printf("ADC Channel01 Voltage:%f V \n", votage);5 T3 B' X. }0 |0 ~; w. o. z
  56.         printf("ADC Channel02 Value:0x%04X \n", adcAverageBuff[1]);+ n# E+ z6 H0 d6 z4 ]
  57.         votage = (float) adcAverageBuff[1] / 4096 * (float)3.3;9 E+ i) y& o* z3 i7 V2 d
  58.         printf("ADC Channel02 Voltage:%f V \n", votage);0 x# a! t+ ^' H
  59.         printf("---------------------------------------- \n");
    * F- W" n/ n% I- ~' c7 k: U
  60.         HAL_Delay(1000);* `7 l% M& f7 p5 G3 m8 ]; r/ o
  61.         /* USER CODE END WHILE */4 f/ n; ~8 }3 {" G3 ?! X6 _# G
  62. * ^) {4 l; K: Z$ x7 C: o
  63.         /* USER CODE BEGIN 3 */, _( a7 w+ K1 r. {" I& Q7 |
  64.     }/ g& X) \5 l( H0 X$ }' e
  65.     /* USER CODE END 3 */
    3 x- v5 T, ~3 m2 `* h# h
  66. }
复制代码

, _) l' c" `* u1 |. f/ m7 ~3 s2.3 外设的初始化函数* I. k( n# f7 f' E* h
外设的初始化函数都是由 CubeMx 生成的,因为我们只用 DMA 搬运数据,未使用 DMA 的中断功能,故初始化 DMA 时可将中断配置函数注释。6 h1 _' W6 ?* [# y  P

2 f6 _3 `# J" J2 N
  1. /**
    * I2 [! u2 U" e5 f7 h  R
  2.   * @brief ADC1 Initialization Function1 \" i8 {  i: Y# l9 P$ ?
  3.   * @param None
    ) w5 ?( X& C7 f( Y2 }! `- h9 @
  4.   * @retval None
    8 b/ q( s" R! F  z" t
  5.   */# T4 K8 Y) o0 M6 U# Y+ h
  6. static void MX_ADC1_Init(void)
    7 g4 ]* j; T) a9 w9 p: d
  7. {
    $ D+ {9 J5 e' [& j# P6 Y2 {% u

  8. ! ]" g' v8 \. y0 A/ |
  9.     /* USER CODE BEGIN ADC1_Init 0 */" d8 L% n  x$ K8 B' _
  10. & o: a$ Y" P9 n
  11.     /* USER CODE END ADC1_Init 0 */
    6 P' b6 @) K2 H

  12. 0 e0 v( K/ D7 i0 C: S" c. w% ?; _
  13.     ADC_ChannelConfTypeDef sConfig = {0};
    - p- U4 N3 b4 L6 a$ L" Q4 E3 s
  14. 0 e: ~( X  ~) v, {) v- i# X! ~  O
  15.     /* USER CODE BEGIN ADC1_Init 1 */
    ) \% d7 k) F/ M6 d5 l! [& o
  16. % c$ ]: s* |8 q3 o/ m  ?2 C
  17.     /* USER CODE END ADC1_Init 1 */# e, D9 h0 f, n! L* _3 d& }' ~! R
  18.     /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)6 A; `: P* i9 N) p3 }- Z
  19.     */+ f3 D# u- |6 z" z& G# L
  20.     hadc1.Instance = ADC1;
    6 J, s8 c. f/ l. I% D; H
  21.     hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
    & l  U: J- ]% l; ~3 b
  22.     hadc1.Init.Resolution = ADC_RESOLUTION_12B;5 l7 e0 B% M+ H- }& F
  23.     hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
      R; [& s; |0 G5 r# N. h
  24.     hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;- g4 E  R: j0 U5 B" C
  25.     hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;3 S* j0 n% m* J( H' v
  26.     hadc1.Init.LowPowerAutoWait = DISABLE;% F+ `4 w  [: m
  27.     hadc1.Init.LowPowerAutoPowerOff = DISABLE;& f7 P1 Q0 |! Z
  28.     hadc1.Init.ContinuousConvMode = ENABLE;( q; N2 }& y! K% a! M# Q
  29.     hadc1.Init.NbrOfConversion = 2;- ?& v; a: t! `- k. ]# ^
  30.     hadc1.Init.DiscontinuousConvMode = DISABLE;
    6 E) J3 g$ I+ }) h: ]" }9 j
  31.     hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;) ^% Y0 ]0 p  e7 N3 _! s
  32.     hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
    ) o( }* E: a3 B& z
  33.     hadc1.Init.DMAContinuousRequests = ENABLE;
    ' e5 T& h5 q4 S% k
  34.     hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
    9 G  \1 y  X; C7 R* S
  35.     hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_12CYCLES_5;
    - ~+ q# o; P! P( O3 \
  36.     hadc1.Init.SamplingTimeCommon2 = ADC_SAMPLETIME_12CYCLES_5;5 |1 g7 X! q) N; |$ k
  37.     hadc1.Init.OversamplingMode = DISABLE;
    ( y) A' h% [; x; U
  38.     hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH;) @! i7 L' L  N
  39.     if(HAL_ADC_Init(&hadc1) != HAL_OK)7 i; ^1 a8 w+ e( I
  40.     {  t) @; ~1 [$ y) @6 `
  41.         Error_Handler();
    ! h9 ~" }2 A! B) C
  42.     }' u( j2 y' [! B5 U, R
  43.     /** Configure Regular Channel2 G+ W) U0 ?2 Z1 n7 @3 o
  44.     */
    5 z8 _& h5 R- o& }
  45.     sConfig.Channel = ADC_CHANNEL_7;
    ! Z0 f1 j! [  _
  46.     sConfig.Rank = ADC_REGULAR_RANK_1;
    ' U$ n1 n; Q, ^; {7 r
  47.     sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1;" k0 L8 X& A+ m; ]( x0 Z
  48.     if(HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
    ' I, h5 `+ B$ E* [' V8 O- M
  49.     {
    " x7 ^' Q' E- G1 \" m4 a5 R% w0 {
  50.         Error_Handler();) ~0 v9 q' R8 m6 @
  51.     }
      \) S2 o# `" i, a) d
  52.     /** Configure Regular Channel
    9 {( P3 D8 _0 ?7 y# `1 \: E
  53.     */! A6 c+ Z6 d4 a& O7 U: Z, P0 t
  54.     sConfig.Channel = ADC_CHANNEL_8;" q7 f6 x& C: C4 a1 y
  55.     sConfig.Rank = ADC_REGULAR_RANK_2;
    - i5 c6 a) @) t# N( Y
  56.     sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_2;/ m" |/ G' M7 A/ o7 o4 u; F3 {
  57.     if(HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK): Q/ v& F5 @% ^) d' W  j# t
  58.     {% E* w  G8 q5 h  O8 w# P
  59.         Error_Handler();1 l5 \* E  E/ L) J
  60.     }
    1 E/ s1 I& o6 j5 D4 I% y& g$ V
  61.     /* USER CODE BEGIN ADC1_Init 2 */
    1 ^* N5 v3 G( \: r1 R  Y
  62. 8 c' r# H% N4 ^
  63.     /* USER CODE END ADC1_Init 2 *// L2 ^2 @' x7 M" S& n8 Z+ w

  64. $ A, f+ b, @8 j( \: A: \0 x2 x
  65. }% Y6 t! W5 n' x+ S3 \( K; m

  66. 5 ?. c2 S* U# u( R' [
  67. /**2 m1 A' w3 S: ~& N7 w$ O+ i
  68.   * @brief USART1 Initialization Function* g! u  v& |1 `' T: J
  69.   * @param None6 i) K/ d! w  n3 |+ w
  70.   * @retval None% D' F8 K- q) D0 A. d" W& i
  71.   */' B$ f5 d6 v7 i6 o
  72. static void MX_USART1_UART_Init(void)
    ( h" m# |4 E) _: I) l" G7 V. _
  73. {
    8 u. l1 x! S1 v1 o5 t; Q

  74. 7 s& _2 M0 f# H" ?: n! ^: q
  75.     /* USER CODE BEGIN USART1_Init 0 */% E* t; t. G5 F+ z& M) p, q

  76. & E) u& t% G5 o6 A, L$ P, o# T
  77.     /* USER CODE END USART1_Init 0 */
    : E: t) x9 a* J" W1 Q
  78. 5 p! o$ y9 Z! c- B/ _
  79.     /* USER CODE BEGIN USART1_Init 1 */
    4 ~' f5 R& v# w* b; d  u! w

  80. : B" d: _/ z5 t# r8 \! o
  81.     /* USER CODE END USART1_Init 1 */
    1 f) o! J1 }, I& ~  e0 v' [
  82.     huart1.Instance = USART1;6 @+ \; P+ q) C2 w5 _: O- `
  83.     huart1.Init.BaudRate = 115200;
    " V4 ^# _0 v. F$ x# a) U  _
  84.     huart1.Init.WordLength = UART_WORDLENGTH_8B;
    & \) |( L0 i' w) B
  85.     huart1.Init.StopBits = UART_STOPBITS_1;6 J/ P" J- ~+ ^' u$ {( u
  86.     huart1.Init.Parity = UART_PARITY_NONE;
    : |, e. N! R4 g
  87.     huart1.Init.Mode = UART_MODE_TX_RX;$ d( ?% t# T& |
  88.     huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
    $ X$ ^" o. e5 n6 J
  89.     huart1.Init.OverSampling = UART_OVERSAMPLING_16;' ^8 ]# Z# N# Q: S, }* X
  90.     huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
      }1 H$ X) S/ v9 ^6 B5 `  S8 \6 m* M1 Z
  91.     huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
    ( x5 }7 Y0 S& R2 v, q  ~# I4 F. I: r
  92.     huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;" Q) s& @; I4 b' C
  93.     if(HAL_UART_Init(&huart1) != HAL_OK), n. Z- b3 {2 f' k$ Y
  94.     {
    + ]0 i" _3 L1 H5 l! Q
  95.         Error_Handler();. A0 n7 T& ~/ F  i) \+ r7 O
  96.     }
    8 I6 g; d9 W/ I/ z& w5 V0 }
  97.     if(HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)- H: o  @# h3 d  i
  98.     {
    ( q- W  P8 ^! h: I+ J5 h
  99.         Error_Handler();7 M* w' ?# L3 Y# W  L& w4 @' v% O
  100.     }1 q( `5 C5 J& ]+ j' D  W, Q; x
  101.     if(HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)& G/ V2 y+ Z) y$ D+ ?
  102.     {
    * \- a4 V) s0 M5 N" `- H
  103.         Error_Handler();
    8 I' e1 w& K  c+ f
  104.     }- u* p5 K- l; z3 D% z  q
  105.     if(HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)) F$ w0 t! l4 k+ E: G& L2 }  q( E
  106.     {( o$ |2 d2 Z' ~0 G, w2 k; X
  107.         Error_Handler();/ K$ v' e! u7 {0 @" C
  108.     }5 \  b0 S: F% U( A; M2 N! }, M
  109.     /* USER CODE BEGIN USART1_Init 2 */- u# d' y" p3 N
  110. $ T' I3 C. a4 U
  111.     /* USER CODE END USART1_Init 2 */
    7 l8 v2 B2 s2 R7 |

  112.   \; f! L. A/ a2 Q5 q3 [
  113. }
    1 d% T/ t/ Z: e5 w

  114. 5 C4 B9 ]* z3 \- v
  115. /**, C/ U) e. i* _+ T  C( }7 E
  116.   * Enable DMA controller clock
    6 f( g8 T5 f% _2 R: c
  117.   */
    . C" m) ?; n& k/ j; ?: p8 h! u
  118. static void MX_DMA_Init(void)
    5 e4 l5 |, E! q9 S& f' b6 Y7 W
  119. {$ P0 x8 {7 p6 z3 B  o: M

  120. 3 l' O* D: A, ?* m& l  h
  121.     /* DMA controller clock enable */
    $ L$ l' H/ F, j2 p. E3 b( {
  122.     __HAL_RCC_DMA1_CLK_ENABLE();
    2 n9 C7 e2 ^- E$ s1 @
  123. 4 P! Y  g7 F, Z6 p% R+ k: `
  124.     /* DMA interrupt init */
    ' d+ t& \& A+ F
  125.     /* DMA1_Channel1_IRQn interrupt configuration */6 n0 ^! O: w+ Q0 C6 F1 v

  126. 5 Z% V# _4 M* H; k. t
  127.     //HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0); //未使用中断功能,故注释 2 T3 ~  Z6 V5 o! d7 \8 p0 @' c, A8 I
  128.     //HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);) S$ [6 C. f6 D

  129. ( {* _' @3 r0 m" ~
  130. }  u2 L0 O" Q8 c5 M  M* g
  131. / K) ]1 J, b( R/ O2 w# ]1 O0 B
  132. /**5 D5 C- u5 r/ u9 l' t
  133.   * @brief GPIO Initialization Function+ o% P) f! g+ g% m
  134.   * @param None
    $ s5 Z9 m2 D& @: l/ \
  135.   * @retval None, U; L2 T" W$ X: [- P
  136.   */6 z) E9 L' Q7 X3 o$ }, U' g. o$ `
  137. static void MX_GPIO_Init(void)- ~& T- s, Q& Z9 B
  138. {
    - A  L. R, H& k
  139. 3 D* Y1 \; ~0 S$ L
  140.     /* GPIO Ports Clock Enable */* ?% C; R3 k+ X
  141.     __HAL_RCC_GPIOB_CLK_ENABLE();  V! I4 i% O! D0 F# R
  142.     __HAL_RCC_GPIOA_CLK_ENABLE();
    7 h7 l- e$ A# ~7 x* N9 \3 K9 b

  143. . J$ R) v+ C* _9 A, o
  144. }
复制代码

: s& T; t9 ?- i. i& m* w; ~4 F: V7 q3 e" Q( S
3. 实验现象: A+ Z5 H" Q  `! C
编译并将程序下载到开发板中,连接串口助手并打开;
$ t# @/ l# L0 K1 w4 E实验现象:每秒打印一次当前两个通道的 ADC 值及换算后的电压.
3 _. @8 f( |8 w

6 e! L  g3 ]- ^$ Q" q
$ \: D# j, R  b8 K' l( G
2021012908502456.png
: j! ?' D' E: b4 w- T
收藏 评论0 发布时间:2021-11-10 01:00

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版