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

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

[复制链接]
STMCU小助手 发布时间:2021-11-10 01:00
1. 使用 CubeMx 创建 ADC 工程$ Q/ J! J8 G7 {7 I: Y/ k+ g: [
打开 CubeMx 软件,选中我们此次使用的单片机型号 STM32G030F6P6 ,点击 StartProject.
* S# t: q# X0 z* w4 c' u
: r; z! |( @4 b$ T* A& T先配置一下串口,用来打印相关信息8 l* i- ?3 @' |1 l" w) Z
' j4 Y* k4 v3 x# Q( Y
20210129082956474.png

8 @0 Z* R$ U: L# ]$ o* a1 L
& ]  y3 ?4 _0 M再来配置 ADC
& Z1 z1 Z$ q. h) p2 o$ a9 H$ F0 u& l' p8 S) ^1 F! f
20210129083334250.png

0 T2 s$ E% L5 R' o: d. ~# D
! K& x; w; \1 i( s& M$ d
20210129083449121.png
2 K$ ]( x9 s" t+ L* O2 I
+ X. N4 G. A9 L( l; A; k* s
配置DMA1 z3 M# Y5 \9 N  g
20210129085309510.png

7 H4 N  p! S8 y0 A$ |" _, R+ k# u+ ^2 d) @9 R
PS:DMA 需要要配置成循环模式,否则只填满一次缓存数组后就停止工作,需要重调用启动 DMA 的函数.% }1 q' l) g% x) V$ w6 r9 a# F$ C4 r

4 E/ T1 r! P  a; d" Z4 w$ ?配置时钟4 s$ r: O  i, f' Y
4 n( f! z* w6 g
2021012908370231.png
* S, f. O. n5 S% R0 e

" u: t) I2 A3 ~; d$ Y8 lps:本实验使用内部高速时钟,未使用外部晶振,主频设置为最大的64MHZ.
  I% T# \* E: M+ [
+ Z! J$ r) s* r' @' z- L配置工程相关选项
+ V2 ?0 o1 X( ~' W& B
; b% v1 r; Q, _3 n
20210129083821567.png

8 o! {# n+ a  b# T* X
& G/ L8 o+ |+ |- d" h+ _配置完成后点击右上角 GENERATE CODE完成工程的创建8 }( S! O- W! x

" P- Z  I0 X. T* |2. 编程
5 W. a. ~# W3 |) T2.1 串口相关的代码
7 B' k" l0 X3 E% W% p" W" d% n因打印相关信息需要使用 printf ,需要包含 stdio.h 的头文件,且需要重新设 fputc 的函数
, X- i. ^; y) b
  1. /* Includes ------------------------------------------------------------------*/, P3 J0 O: a( r5 m1 w: {
  2. #include "main.h"
    , |9 c5 s1 H2 Y9 {. K5 g1 a

  3. 6 R" F$ `% F; }
  4. /* Private includes ----------------------------------------------------------*/5 g) E" _& t8 ?
  5. /* USER CODE BEGIN Includes */
    % N, W$ r) N  S
  6. #include "stdio.h"
    7 p/ x6 n  x0 e% u0 _
  7. /* USER CODE END Includes */
    3 y1 F0 f8 F; L; W' g2 [) @
  8. 7 l) f9 X4 B3 d+ X! F3 P
  9. /* Private typedef -----------------------------------------------------------*/
    & J4 b% Q/ Q: V/ }- u. I) ~1 m
  10. /* USER CODE BEGIN PTD */
    , @' U6 a! m' z7 R6 E* h# U$ S

  11. 4 k% H) K# F# D
  12. /* USER CODE END PTD */: E; P6 I+ {# s- D) r
  13. + U* y& Y' ~' i  a
  14. /* Private define ------------------------------------------------------------*/
    0 N- l7 x9 T7 e3 W" O
  15. /* USER CODE BEGIN PD */7 ~; G- n5 C: |
  16. /* USER CODE END PD */1 o0 ~+ ~# x/ N7 V" t4 Y8 d& f$ |

  17. 0 G  y0 p7 P: x' z1 ]* ?; _5 K
  18. /* Private macro -------------------------------------------------------------*/9 a3 D) ?3 n. @% f
  19. /* USER CODE BEGIN PM */- r) W4 }/ o' I0 V% |* ^4 b+ _
  20. " h2 _0 }, K: @* O
  21. /* USER CODE END PM *// ~# z# `! E# p

  22. # [# f: _7 `9 f, Q
  23. /* Private variables ---------------------------------------------------------*/, f/ @  [6 f: q/ j' c1 g# }6 R
  24. ADC_HandleTypeDef hadc1;" C, A  R9 N  \' q9 z# P! {
  25. DMA_HandleTypeDef hdma_adc1;! L! T1 D1 y4 k% ?- ]% u
  26. 3 c4 J" E4 e* J6 |( f
  27. UART_HandleTypeDef huart1;3 o) ?$ _. j$ N7 Q7 P

  28. ' `% \- b- r& B4 u& f
  29. /* USER CODE BEGIN PV */4 i7 S) [' y$ l+ R6 J) u2 G' V

  30. 3 i+ x% E; B  k" b: g$ S" k
  31. /* USER CODE END PV */. f9 T) x( M: E" }% E& R5 A
  32. ! f( E  ^; J7 u4 F8 b: l. q
  33. /* Private function prototypes -----------------------------------------------*/& ~" f& B" I, f3 i# a8 e
  34. void SystemClock_Config(void);2 ~  J- U1 G& p& @9 m% F
  35. static void MX_GPIO_Init(void);( e7 [) w- \2 a; k4 L+ O! {$ v5 E
  36. static void MX_DMA_Init(void);/ \) ~" [7 W8 n- K4 Y- O
  37. static void MX_ADC1_Init(void);* F4 U( M$ l* N$ E* {
  38. static void MX_USART1_UART_Init(void);) s, S8 h3 Y) _
  39. /* USER CODE BEGIN PFP */
    3 H# V: X4 D1 H" e" {$ N. Z# x+ X

  40. % o3 x! m/ k1 c% x) V
  41. /* USER CODE END PFP */
    8 g; b3 b' f- R9 ^& z

  42. 6 I! s: \' S. c3 P
  43. /* Private user code ---------------------------------------------------------*/
    ( g5 M) a0 j' \0 z! P0 n
  44. /* USER CODE BEGIN 0 */5 F. m: q) z! z8 M' B7 q3 J! e6 W- }
  45. __IO uint16_t adcCovValueBuff[30][2] = {0};        //存放ADC的值 2通道  每个通道存放30个值,由DMA循环写入
    9 q4 O. F6 h+ w$ J
  46. uint16_t adcAverageBuff[2] = {0};        //对每个通道30个ADC值取平均值) Z8 t/ c  @3 c$ z8 A" n$ [6 N

  47. 5 [# ?: W; \( A8 ]5 \! g" |' g7 ~% v

  48. 2 {  d" C8 f- a8 Y) P& z
  49. #ifdef __GNUC_. H7 T$ [+ b! M, L
  50. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)# [( \; L, X% K. e0 W: P4 a6 U7 N
  51. #else
    $ O. Z, R1 l7 w9 {
  52. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
    + ]8 Z, u4 q1 S; ]
  53. #endif
    ; L/ `1 s2 l, X1 q, _
  54. PUTCHAR_PROTOTYPE
    ; j$ x+ k! M2 S) I6 j4 h' K; [
  55. {* k1 |& v& |* {" p3 ~
  56.     HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 0xFFFF);
    ) S& A# Z) y1 ~1 c/ C- y( E
  57. ( m$ D0 s5 B1 W; T4 P
  58.     return ch;
    # ^3 x. e( P: j4 s  s2 g. I
  59. }$ L) Y6 S# T0 n: h* M

  60. 1 F- n- }6 u% ?: v8 c- \1 E: h8 D
  61. /* USER CODE END 0 */
复制代码
/ v( t5 W; S0 r: f

9 r8 s& J" o7 y4 f$ S$ g2.2 main 函数0 [& U1 _  G3 s8 M! ]6 Q
  1. /**! G3 \% d# ?0 u1 u9 C
  2.   * @brief  The application entry point.
    3 m5 ~' M" ?6 S  J
  3.   * @retval int; }7 v6 w, }& ^7 [
  4.   */
    + w1 s# Y% G5 Z5 Z, X8 Q
  5. int main(void)1 V* t2 J8 x$ c" f! c8 @
  6. {' N3 B  G' B$ R, E' j
  7.     /* USER CODE BEGIN 1 */* i- C) p1 w+ H) k/ t
  8.     float votage = 0;
    # `6 q0 u( Q7 J' \! H" J9 M
  9.     uint32_t sum = 0;% D" p3 m- B: N' E0 R
  10.     /* USER CODE END 1 */8 X3 w; P3 p# b
  11. 3 A* _+ F& b, M2 I( t5 G& B+ c
  12.     /* MCU Configuration--------------------------------------------------------*/. R2 k; ^2 Q5 e8 C: `3 a  H8 k
  13. 9 V0 S7 \: ~( q' p' F- E
  14.     /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    , V) `- L6 T1 D0 L+ e
  15.     HAL_Init();. P4 a( i& G6 `  H9 j

  16. $ m' i) {7 `5 p/ D% H: b
  17.     /* USER CODE BEGIN Init */+ g; L+ t$ G- Y7 \3 C: B5 `2 D( U) t
  18. # {2 C: A* V) X4 Z. t, ~
  19.     /* USER CODE END Init */
    5 }, T5 ^( Q' j. ^  C( k5 @1 j. F* K
  20. ' F# Z/ K- |7 W& g
  21.     /* Configure the system clock */' \# y% x6 k( t: i9 I
  22.     SystemClock_Config();+ [" f/ Q. C' U5 ?
  23. 9 l0 x5 @/ K: q& G4 B* l
  24.     /* USER CODE BEGIN SysInit */
    $ F  N! o# ^' ?/ @7 D& a6 Y& a

  25. ; f0 _/ r3 j6 L
  26.     /* USER CODE END SysInit */& ~8 O/ d, c+ ]2 T5 W( }  J! Y$ g

  27. ) K! N4 T& j) C2 e
  28.     /* Initialize all configured peripherals */( t7 h& G7 I7 Q: p: b
  29.     MX_GPIO_Init();
    2 {2 ?! k. u, X! E; w# i0 M) q  |' c+ a/ ]
  30.     MX_DMA_Init();) \) s7 [' I+ n* m( A$ m. g# j' ~
  31.     MX_ADC1_Init();! O! ^" {8 `6 h3 h: P2 g7 j
  32.     MX_USART1_UART_Init();
    0 o* a' U! s: K8 T
  33.     /* USER CODE BEGIN 2 */
    9 Y/ A2 H3 t4 ^. q+ p+ M
  34.     printf("stm32g030f6 adc demo...... \n");& L% X* M4 q5 C% F
  35.     HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adcCovValueBuff, 60);$ R& c& S% `8 f- A! Y* P* |: u
  36.     /* USER CODE END 2 */" r+ S. H- N- m
  37. . G0 y: L5 {' y9 m# m2 H' U8 _( |. D
  38.     /* Infinite loop */
    - @; n4 ~1 c+ _: v* a6 o
  39.     /* USER CODE BEGIN WHILE */
    1 J" V, q0 K  v
  40.     while(1): o3 U0 u6 M+ K+ x+ P
  41.     {
    / I2 [" [( z8 g) A3 ^
  42.         for(uint8_t i = 0; i < 2; i++)
    ) E  {8 a" Y9 j
  43.         {
    ' B- v5 n: q, x. u2 V6 N
  44.             for(uint8_t count = 0; count < 30; count++)
    - T: J2 \! f0 Z" B
  45.             {
    1 E% s' L+ C( r' f
  46.                 sum += adcCovValueBuff[count];' [, I& J- `5 K5 f' U! p( Y" J, F
  47.             }
    : B2 [+ ?1 m& {( m7 A8 {( O5 ^
  48.             adcAverageBuff = sum / 30;) D9 t' _" q& t; F- G; @% Y
  49.             sum = 0;! L( m. P5 Q' A6 P6 |
  50.         }( A: U9 q  ?& d3 O* F
  51. & C6 j6 w" j  t7 v
  52.         printf("---------------------------------------- \n");3 B; c; t- e& a6 f; {
  53.         printf("ADC Channel01 Value:0x%04X \n", adcAverageBuff[0]);4 Q- Z9 R( A5 S$ `( O0 {
  54.         votage = (float) adcAverageBuff[0] / 4096 * (float)3.3;
    : [- G5 l, h1 v: c% S
  55.         printf("ADC Channel01 Voltage:%f V \n", votage);# `1 w; ]+ |- _3 K/ t, e
  56.         printf("ADC Channel02 Value:0x%04X \n", adcAverageBuff[1]);
    ! [. U# \- L! O: f9 Y
  57.         votage = (float) adcAverageBuff[1] / 4096 * (float)3.3;
    8 S& X9 V5 H& l
  58.         printf("ADC Channel02 Voltage:%f V \n", votage);+ L& C) ^6 n6 ^0 f& Z& K* ]
  59.         printf("---------------------------------------- \n");
    ) Z5 W% u& _* l* F3 ~, J
  60.         HAL_Delay(1000);
    5 q+ u' |8 X& w0 u
  61.         /* USER CODE END WHILE */4 |! y  Q$ Z) x6 |$ j5 P+ s

  62. & t2 k+ x3 l2 N3 w. i% B" D
  63.         /* USER CODE BEGIN 3 */9 {- }& R' F* V" c
  64.     }4 o( o7 K$ ^/ ^
  65.     /* USER CODE END 3 */3 P( S3 v  G3 O4 ^5 ^
  66. }
复制代码
! k# B, g1 C5 h9 I" \, b0 Y9 [! F
2.3 外设的初始化函数6 X* {* ^) Y) x% s4 i
外设的初始化函数都是由 CubeMx 生成的,因为我们只用 DMA 搬运数据,未使用 DMA 的中断功能,故初始化 DMA 时可将中断配置函数注释。* K4 T. X0 t# Y! Q. d8 v1 e

6 u- N8 |5 p* f( `2 P; W
  1. /*** Z% w1 z; V! H1 J; s8 `% C
  2.   * @brief ADC1 Initialization Function' A; c  u5 P1 D7 i6 D4 G* k  K) ]
  3.   * @param None% m; A! W0 E7 A- P
  4.   * @retval None
    ; u. U7 Z2 t+ B9 G5 f  y
  5.   */
    : @2 u; Z) O; o. ?  c7 N
  6. static void MX_ADC1_Init(void)! o, {# }! z4 T- Q
  7. {
    " C+ {- D0 l' c6 ]% Y
  8. . V' C1 F5 Z- N, Q4 O
  9.     /* USER CODE BEGIN ADC1_Init 0 */
    " a3 [3 C+ {' H+ r5 R
  10. 3 k  e2 @* d0 k
  11.     /* USER CODE END ADC1_Init 0 */) o$ d# }! |- o& U# M. s0 j

  12. ' Q' X) i7 V& _7 _/ F
  13.     ADC_ChannelConfTypeDef sConfig = {0};4 u# T6 I) {5 E" _' P  `, l) O

  14. ' H% m) ?* I' Z6 N0 z7 [& w
  15.     /* USER CODE BEGIN ADC1_Init 1 */" z; `, u" {# p: v0 n3 m' z
  16. 7 w, H, J' l1 U+ R; ?8 l, P) \
  17.     /* USER CODE END ADC1_Init 1 */
    9 ^/ u: Y% b% C
  18.     /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
    1 J) m8 h+ {2 P" H! K1 J4 U
  19.     */) s: u. Y  C, {3 l3 d2 X
  20.     hadc1.Instance = ADC1;
    * W+ v5 L$ _$ W* A
  21.     hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;$ k! c" o  D2 C& O  J2 J
  22.     hadc1.Init.Resolution = ADC_RESOLUTION_12B;
    6 c* ^$ h2 ^3 e( n7 z2 _  S
  23.     hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;7 Y" V# e! }; K) W; K  J- t1 z) X
  24.     hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;% |3 G; `' a9 e; N0 v" @0 x/ s8 l
  25.     hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;7 i1 k' B& ~$ F' y
  26.     hadc1.Init.LowPowerAutoWait = DISABLE;
    2 T+ n8 f( P8 v% Q& m( N- c
  27.     hadc1.Init.LowPowerAutoPowerOff = DISABLE;
    1 m" S0 I  t6 L2 G. u. v
  28.     hadc1.Init.ContinuousConvMode = ENABLE;
    / c, e$ k1 w1 ~: X1 J
  29.     hadc1.Init.NbrOfConversion = 2;, n5 f5 H" `; R6 j( J7 Y1 _- _
  30.     hadc1.Init.DiscontinuousConvMode = DISABLE;
    % q) a6 `+ M( Y
  31.     hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;; \0 z" n" v2 q+ k9 F3 l/ D6 T; M
  32.     hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;/ p1 Z( l( u* O  t  h! n2 _
  33.     hadc1.Init.DMAContinuousRequests = ENABLE;
    . u* ^! l7 a9 i$ _0 v1 ^
  34.     hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;$ r7 b  X0 V8 e
  35.     hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_12CYCLES_5;
    / [+ B* @2 r5 ]" K& E4 D
  36.     hadc1.Init.SamplingTimeCommon2 = ADC_SAMPLETIME_12CYCLES_5;3 H7 ~- a# W9 r- ^
  37.     hadc1.Init.OversamplingMode = DISABLE;
    0 D8 }5 ^1 {; u8 P6 t; G9 |/ ]
  38.     hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH;0 l- O$ W# r9 r$ m0 t
  39.     if(HAL_ADC_Init(&hadc1) != HAL_OK)9 i) O! y/ Q/ |+ W, g" \3 i% \  k/ b5 w
  40.     {
    ( v$ Z" L& z2 ]# Y; X1 ?4 J; b
  41.         Error_Handler();
    3 K+ g8 A. J; o4 i
  42.     }/ B( N$ |" J  i8 ~
  43.     /** Configure Regular Channel
    ( z4 Y' ~2 W. T: l
  44.     */
    0 T3 n0 w- B/ Q. t8 A. t
  45.     sConfig.Channel = ADC_CHANNEL_7;( t7 G' o$ E& h0 s; k7 Y8 B
  46.     sConfig.Rank = ADC_REGULAR_RANK_1;' i. f$ C6 I0 @! m( R# b( A0 T
  47.     sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1;
    + ^' M' X+ g# c/ l7 `8 N" D7 T
  48.     if(HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)" P3 q1 D$ \/ L6 A3 L
  49.     {) F2 _; b2 c: X  R1 Y  g+ v
  50.         Error_Handler();9 C) ~* y2 }/ f0 S( V9 y% Y
  51.     }2 a; z" H  x" _3 P9 `4 A2 w6 U
  52.     /** Configure Regular Channel# }9 e2 z% Y* I, k: L% F1 q
  53.     */
    4 o( ~" C0 G" Q. Q
  54.     sConfig.Channel = ADC_CHANNEL_8;
    - P: {4 p4 j; U
  55.     sConfig.Rank = ADC_REGULAR_RANK_2;
    8 ~# \; y5 `1 p+ X6 T
  56.     sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_2;' V/ q9 `1 d3 R- S
  57.     if(HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
    9 X) N# k) b! F0 f4 c6 \
  58.     {
    3 M& \8 H. x# s/ W1 ?3 I; z5 Z
  59.         Error_Handler();
    ' M) X- {1 }( M$ T7 d
  60.     }
    8 A* K! V* I2 f& a
  61.     /* USER CODE BEGIN ADC1_Init 2 */& Z4 p) a+ \/ R  w( {0 p9 `% T: i
  62. 8 i8 x4 R5 N  H: K4 M( X+ z
  63.     /* USER CODE END ADC1_Init 2 */
    & a4 B& `/ Y  @- B

  64. 7 t% ^+ d/ j7 c( j! o' ?3 h
  65. }
    2 V9 l$ i& W0 z5 f- Z

  66. / ~1 F8 Y4 w- O0 g' ]& u
  67. /**
    ; s2 O, M7 M% a# [& j0 b  Z
  68.   * @brief USART1 Initialization Function
    0 i/ m7 H, [) O5 y
  69.   * @param None
    + {# C; r7 ^' c
  70.   * @retval None3 i8 p# G1 c1 H+ m+ ~
  71.   */
    ! K" c9 x# n6 }0 x* e
  72. static void MX_USART1_UART_Init(void)
    1 s# ?. L% ], X4 p, \. v; L
  73. {: [& X, o3 |" d1 i2 F* o1 v

  74. , S7 U, N: v& q/ p# _8 A& ^. w  p
  75.     /* USER CODE BEGIN USART1_Init 0 */
    . N/ E% N0 p! M+ T

  76. : {6 @7 C# W7 y) C+ r2 O1 G( w5 d1 F% k
  77.     /* USER CODE END USART1_Init 0 */
    9 ^1 G: [# ~( W8 c
  78. ! z; Q1 |4 S7 N
  79.     /* USER CODE BEGIN USART1_Init 1 */
    7 z& K" \- ^; J! j: e
  80. 0 U  x7 D% e6 i; H+ t
  81.     /* USER CODE END USART1_Init 1 */
    % B/ Y/ S& t0 P0 y! J& D' }
  82.     huart1.Instance = USART1;% [; D- p0 W; g/ X, ~
  83.     huart1.Init.BaudRate = 115200;
    & W) {0 _* T$ T3 p# Z- N" K
  84.     huart1.Init.WordLength = UART_WORDLENGTH_8B;- x& B- O' p' N
  85.     huart1.Init.StopBits = UART_STOPBITS_1;+ d4 y# S. q# b0 X" |+ `6 G
  86.     huart1.Init.Parity = UART_PARITY_NONE;. A9 |" {. ^# m' l) g$ A7 {/ K
  87.     huart1.Init.Mode = UART_MODE_TX_RX;2 B5 \3 f5 W3 v
  88.     huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;' V* u/ a" ]8 `. B) p& Z
  89.     huart1.Init.OverSampling = UART_OVERSAMPLING_16;
    8 p0 j& X$ O# J/ Q. `: e
  90.     huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;5 Z0 K" J' E6 K1 {) ?' `- ?  X" \
  91.     huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;4 B0 b5 c0 A5 x% e- _6 r4 ]) ?5 K
  92.     huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
    ! M. G& c" I7 s  y: O
  93.     if(HAL_UART_Init(&huart1) != HAL_OK)
    8 ^! Y7 e2 i0 A% k
  94.     {
    , ^1 \; D0 A1 @- N- I: R% s$ b# U
  95.         Error_Handler();
    . A4 N$ x( X% ]2 i* @
  96.     }
    4 [* I! E6 A' `2 `
  97.     if(HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
    & Y2 F  w% w8 e, `' }2 e3 t% R: ^9 g
  98.     {
      i% g' f6 V' N' u6 }) a1 |+ x
  99.         Error_Handler();
    5 A( |9 w. \2 w% n) H9 ~! e
  100.     }
    ' \/ g" _& @' ^8 f2 [& O
  101.     if(HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)0 G4 e& Q( ~* Z4 |  @8 L" }
  102.     {3 l% O* E1 Q- j* F( z
  103.         Error_Handler();- z+ L6 W& s2 f- n) G- U, U
  104.     }% W' U8 a6 t; b# w% |
  105.     if(HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
    " j5 m) N+ i2 N7 o
  106.     {" q* P: @: [5 k8 t
  107.         Error_Handler();( |# m* ?: @: a
  108.     }  W/ K; x  U" @
  109.     /* USER CODE BEGIN USART1_Init 2 */
    ! _; X( p4 j6 l/ I# U" G) c% ~4 j

  110. 5 V+ Z1 ~+ U. q6 U
  111.     /* USER CODE END USART1_Init 2 */
    / Z6 J" W  a% h- m! ]/ [$ Q

  112. + E6 H* `! z* ?: u1 j- V
  113. }" o* z" [  L, b- N

  114. 0 }' ?+ \; H, _: U* S
  115. /**9 i/ ~: w! n7 j% ^/ v
  116.   * Enable DMA controller clock2 _  n- u+ h2 Y% F
  117.   */! _8 S2 K+ v8 O4 o& s" B
  118. static void MX_DMA_Init(void)
    ' L2 Y( }# ]. i3 I& f! ]) g. Z6 h
  119. {2 N4 y8 ^, [# A% k

  120. & S1 E8 M% g: L6 ?% [
  121.     /* DMA controller clock enable */
    $ `: ?1 j+ r' R
  122.     __HAL_RCC_DMA1_CLK_ENABLE();
    % x- C* R5 \" J* \$ B  ]4 x

  123. : d5 q0 n6 j3 r. G) o9 G
  124.     /* DMA interrupt init */8 m- _  z3 V* g. `( N# n1 W
  125.     /* DMA1_Channel1_IRQn interrupt configuration */. h# }2 i! ?; x: s: Z! \3 c

  126. ( C; n+ u; t( w8 d3 ~4 }
  127.     //HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0); //未使用中断功能,故注释 
    $ L' A; L2 s  x1 l9 I& t9 e3 h$ e
  128.     //HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
    9 |! `5 z. R8 n5 O

  129. # h$ L# ?1 B6 c9 }& M' Z4 q4 r" z
  130. }6 S5 P+ f3 ]( X* r+ }' D/ X
  131. 0 }3 }4 g+ n  o/ R
  132. /**: A- E5 S7 Q0 v5 _9 _
  133.   * @brief GPIO Initialization Function& _) U. }4 ]$ ~$ r2 N. j
  134.   * @param None
    1 N* Y$ M$ ~8 g  _1 p
  135.   * @retval None% ^  W2 h5 h5 w6 G8 I
  136.   */3 R, H+ e* S9 p* o" k- {
  137. static void MX_GPIO_Init(void)
    9 `+ T$ L+ R! x0 p  W- S! K
  138. {
    1 i9 Z6 S+ B: y7 x: j  T

  139. 4 d( w. Y/ g" ]  E
  140.     /* GPIO Ports Clock Enable */6 K3 m  {" }& o6 ]8 d& P" Z4 F
  141.     __HAL_RCC_GPIOB_CLK_ENABLE();4 e! B6 Y+ z6 N2 Z$ b
  142.     __HAL_RCC_GPIOA_CLK_ENABLE();$ _8 L# c- Q( E$ c& i0 I

  143. : w& C4 @4 C2 h2 H4 Y9 j& U
  144. }
复制代码
* T- E" Y! U( y# e6 i  R

& L5 X, E% x. O1 Q6 W+ T0 {1 q+ x3. 实验现象
! w6 t  P( @3 p8 X/ S编译并将程序下载到开发板中,连接串口助手并打开;# a+ \& }$ U9 j( X7 X1 j7 }
实验现象:每秒打印一次当前两个通道的 ADC 值及换算后的电压.
0 x4 Y3 Q& |' t! X6 a

2 W2 X/ Q) L, i+ l8 |+ r9 @  d. c4 V. @% z* t
2021012908502456.png

; `% Q2 L8 z& j7 I1 h# `" |
收藏 评论0 发布时间:2021-11-10 01:00

举报

0个回答

所属标签

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