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

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

[复制链接]
STMCU小助手 发布时间:2021-11-10 01:00
1. 使用 CubeMx 创建 ADC 工程6 r' _) N0 W$ I. Z/ ?
打开 CubeMx 软件,选中我们此次使用的单片机型号 STM32G030F6P6 ,点击 StartProject.
3 g/ ]% l1 R1 _, i. _3 m- K% M5 u. q, i3 C" @: a  L
先配置一下串口,用来打印相关信息6 {& E( K  y2 J; ^. f1 F, m

3 _! K7 j& N* G0 [0 `+ b
20210129082956474.png
" l# Q" X/ D, G7 o+ t9 s2 g3 n

5 }+ d$ b$ `  O再来配置 ADC
$ e4 M. H4 h8 Q) L! c; p
; @) g4 E  {& v0 H7 `
20210129083334250.png

( b* G* R: ~- Q4 Q- z7 \$ P8 K0 v
) [- }# m  b! d" G$ f
20210129083449121.png
. _& W& J3 s2 ]/ h* o( U

; @+ v' ^' F- d9 }3 a( k配置DMA. c  s' A0 x, H( b. \! q
20210129085309510.png
* N. n/ s: o4 C7 t! \
# c5 F" h( {, E
PS:DMA 需要要配置成循环模式,否则只填满一次缓存数组后就停止工作,需要重调用启动 DMA 的函数.3 q1 x: l! G/ a$ {& q

/ y, Z: f: b) m, b' Y' w配置时钟
2 Y  h& [% p( g! r9 _% f7 Q
9 H- H' Y3 D& |1 S# E7 h. @
2021012908370231.png
* B: L3 {4 `& J$ ^- q- _( W
8 F9 \8 P* L$ ?- f
ps:本实验使用内部高速时钟,未使用外部晶振,主频设置为最大的64MHZ./ i/ |+ C* k# a' y
; y0 |# N% m: W; M: c0 n2 _
配置工程相关选项
5 L- ?) L6 }* @! T1 |2 G" V) J$ |4 F6 z8 J
20210129083821567.png
, D9 O9 q! i+ N, a; ~

4 ]& C: h/ I- e) x" V1 e配置完成后点击右上角 GENERATE CODE完成工程的创建
- t3 H5 Q* k. b" e0 q5 z. c$ O4 j8 Q! D/ `5 o: v% |
2. 编程
4 t% H; T4 D- W5 t- L* m2.1 串口相关的代码
3 J  [8 ^" Y. B  k# {% z/ A因打印相关信息需要使用 printf ,需要包含 stdio.h 的头文件,且需要重新设 fputc 的函数
- a: ^: w- ?% T0 c- }/ J+ O" c
  1. /* Includes ------------------------------------------------------------------*/' m2 q! s- L+ O, w
  2. #include "main.h"
    : x8 X) }9 z0 ]: Y8 z$ Y% D- n

  3. ! v% A& v* q; n* N% w* ]
  4. /* Private includes ----------------------------------------------------------*/
    , F* n5 V& F" k
  5. /* USER CODE BEGIN Includes */
    # J% ^6 U# s3 f7 E  m% q
  6. #include "stdio.h"
      P; a  C. G5 g. F9 u" O5 P0 b- b: l. {
  7. /* USER CODE END Includes */0 x1 Y$ ?: g7 O8 [8 C, }3 E* w

  8. 4 r( v% C' K; a* S/ I
  9. /* Private typedef -----------------------------------------------------------*/+ H' v0 }/ T, e! ?0 F: b
  10. /* USER CODE BEGIN PTD */
    ; e; h# T/ W; ?0 _  s7 T9 L$ P
  11. & A/ D6 n9 S4 g3 t4 u: T( M5 X
  12. /* USER CODE END PTD */4 w; J3 ?! [; R: O% F* y- t
  13. / ^. \4 I$ D, Q: k0 t# O# Q0 b( ?% e
  14. /* Private define ------------------------------------------------------------*/! w+ v0 S4 u% C- _; O$ T
  15. /* USER CODE BEGIN PD */3 }- D% p: [& o+ O
  16. /* USER CODE END PD */
    0 P9 N& ^* x( x! r; q

  17. 8 \$ |& \2 v1 }$ Y+ i8 b
  18. /* Private macro -------------------------------------------------------------*/. ^5 }- k. x' ]- x
  19. /* USER CODE BEGIN PM */! ?/ U, G, K) @/ y1 l: `
  20. 3 \6 p* b3 H. |% m- m3 ?
  21. /* USER CODE END PM */
    1 r/ r% p$ U, U$ K9 T  A, L2 [& s

  22. 7 t0 X( z& y# y+ V/ G! A6 d
  23. /* Private variables ---------------------------------------------------------*/
    5 O6 h' q9 h0 Z- [: L; R
  24. ADC_HandleTypeDef hadc1;
    , S3 H& F) A7 v! j0 y
  25. DMA_HandleTypeDef hdma_adc1;; Q! H: t7 N' V9 x/ E& ^
  26. * `7 w/ U. Z- e* Q5 F: p+ `4 |1 N
  27. UART_HandleTypeDef huart1;7 E, D- y! B- K! z5 |9 X& ?# V

  28. * A# ^! Q- U+ ~/ b. `3 z
  29. /* USER CODE BEGIN PV */
    ; w. a4 w. V# K4 C9 T2 X

  30. 0 s1 X$ _% F, A6 Q6 h8 m, F
  31. /* USER CODE END PV */3 x# ?& `0 j3 y
  32. 0 P& u3 w2 s2 O) ^2 L+ I% j
  33. /* Private function prototypes -----------------------------------------------*/
    ' K& s1 L/ W0 h% Q3 `
  34. void SystemClock_Config(void);+ e$ @  n+ S% q+ g4 p
  35. static void MX_GPIO_Init(void);
      Y1 G& E  @# f( `  N
  36. static void MX_DMA_Init(void);' O7 @0 t* O5 L) ]6 w6 y
  37. static void MX_ADC1_Init(void);
    " ~. I1 x# m+ Z5 W
  38. static void MX_USART1_UART_Init(void);$ F1 n0 d, |# l" u- M) U! u
  39. /* USER CODE BEGIN PFP */, C. F& D4 x8 [- s! K  o' H8 d

  40. 7 _3 B9 I# M( l# R* f
  41. /* USER CODE END PFP */- Y/ T- Z) F% M/ w

  42. & M% T9 g. ^9 j* }! ?) y1 y
  43. /* Private user code ---------------------------------------------------------*/: o, n3 T# I, m& g: q9 x& `8 O
  44. /* USER CODE BEGIN 0 */
    3 C4 J) c0 U& C4 ]- p; x( [/ W
  45. __IO uint16_t adcCovValueBuff[30][2] = {0};        //存放ADC的值 2通道  每个通道存放30个值,由DMA循环写入7 K$ o( x8 Z/ k
  46. uint16_t adcAverageBuff[2] = {0};        //对每个通道30个ADC值取平均值
    & ~6 d' s$ z, c. p& G
  47. # y3 C7 v3 P% E8 k4 w

  48. 9 Y* c- I( b5 l  m
  49. #ifdef __GNUC_5 n' o! s% ]7 a" U
  50. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
    ( Z! L6 U, }  C/ I+ V" i
  51. #else8 X7 M; q3 _6 u# `# h& y# @
  52. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
    . S* g- y/ c7 P6 p" [' S" ]5 C
  53. #endif
    " S+ m1 a, C6 q% U0 t2 E$ S/ L
  54. PUTCHAR_PROTOTYPE
    1 x8 P" Y! M0 I/ f! ?
  55. {2 ?; \2 Y! E! f- T0 i7 ^
  56.     HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 0xFFFF);
    ! ~7 Z( P; [8 A6 c4 u" f, ^- `) ?

  57. * K7 J- \6 B- s" ?5 B4 R: n6 g
  58.     return ch;& r" L' {$ O) E0 Y! |) C2 z
  59. }* q* {* ?2 r" q. I3 J* [, }. ]9 S

  60. ; D, u% T/ }, Z. I5 `
  61. /* USER CODE END 0 */
复制代码
+ M* [6 c6 A1 [' Z1 I; l0 R, |
# g1 U9 z/ I4 ?
2.2 main 函数
! @& r4 d1 e  c( x1 \( a. s( ]
  1. /**" Y/ Z* M0 M0 Q7 g. u# p9 D. r
  2.   * @brief  The application entry point.8 f( f1 V8 i0 {+ i1 z) H  p
  3.   * @retval int* S4 F& @7 A' u
  4.   */3 N0 P9 c: v( @& T/ e
  5. int main(void)0 f' _# R8 L$ m: q
  6. {( |3 |# A1 }- S2 Q5 o' _
  7.     /* USER CODE BEGIN 1 */
    7 F1 P- n' e# e# j' ~3 F
  8.     float votage = 0;" F( m9 m$ s6 `6 m
  9.     uint32_t sum = 0;
    , Q& D" _/ \5 G5 Q# @4 o# R/ ]
  10.     /* USER CODE END 1 */0 J7 c. F% A/ B; f5 O% g! W

  11. - f: W0 g! z( T2 g
  12.     /* MCU Configuration--------------------------------------------------------*/
    4 u" ?2 ^! m7 B
  13. ' n: h/ Q% {4 r3 N' n* ~2 K) }
  14.     /* Reset of all peripherals, Initializes the Flash interface and the Systick. */9 p" L( J) v8 t
  15.     HAL_Init();& f3 o5 c0 V( R  ]

  16. - i+ V9 r% I1 J$ ^+ ]
  17.     /* USER CODE BEGIN Init */
    4 J# k$ X: r1 o: c* b/ r1 ^# i. }

  18. 4 J/ d5 i" m+ g% N) E) O
  19.     /* USER CODE END Init */  d. O2 C% H2 A" a1 Q8 A
  20. 5 p- s, X+ V0 k5 d  H: {' [9 z
  21.     /* Configure the system clock */
    ! Y. z2 ^0 a! V. v2 F
  22.     SystemClock_Config();
      [0 j) d6 r1 {% a. N) ^# I
  23. ) D' q. _2 c) y2 O( r; _! [1 s
  24.     /* USER CODE BEGIN SysInit */, d8 T4 w7 h& N# ?. K: [! ~
  25. $ p4 S0 e) ^$ w# c. Y# e/ C
  26.     /* USER CODE END SysInit */3 b4 \3 e8 A; O6 W% c7 j. j

  27. , @& ?- x. [" |) [3 z) ^8 o" j
  28.     /* Initialize all configured peripherals */
    1 c% e) q: B1 W) h8 q
  29.     MX_GPIO_Init();$ _/ h3 I9 {! V" |$ `3 Q, W
  30.     MX_DMA_Init();
    + K% z0 }0 k" V
  31.     MX_ADC1_Init();
    9 Y0 m6 ]7 F# a" o' O) a& ]. O
  32.     MX_USART1_UART_Init();' J% a# m; v. ]+ P2 [( C& O9 {& y
  33.     /* USER CODE BEGIN 2 */7 `# A9 v0 N, B2 W0 ^
  34.     printf("stm32g030f6 adc demo...... \n");: t! S$ b. I( }+ e
  35.     HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adcCovValueBuff, 60);
    2 b2 C; ^9 r8 U9 d) m' P2 z
  36.     /* USER CODE END 2 */% J7 d- Z; Q& x! t- q% k
  37. # B: q" l  C7 q; m6 d
  38.     /* Infinite loop */! Y8 T& K( n# y- P. Z9 _$ W
  39.     /* USER CODE BEGIN WHILE */8 u* N! {2 V( a
  40.     while(1)1 U8 V" q( M- \2 `
  41.     {  |7 a. r; ?/ x/ {  i2 j
  42.         for(uint8_t i = 0; i < 2; i++)/ z% q# O. v/ C, f4 ?
  43.         {5 L( O- |' S* b; f
  44.             for(uint8_t count = 0; count < 30; count++)* U% T( a  b. ^. [% g. r
  45.             {
    + S) `/ Z! m( a% n0 c( X* M8 ?( g# t
  46.                 sum += adcCovValueBuff[count];5 x& w9 P$ X5 d, b
  47.             }, [: E8 Z4 r( [% h. g
  48.             adcAverageBuff = sum / 30;
    8 y- y  A' ~5 F
  49.             sum = 0;: r3 J" y  A, d& }+ ^( Y
  50.         }
    / \$ a4 U- y6 v
  51. 3 V) ^$ K: ^( ~
  52.         printf("---------------------------------------- \n");1 w8 R# t) k  r9 J5 V- C% u' I
  53.         printf("ADC Channel01 Value:0x%04X \n", adcAverageBuff[0]);9 m! W. Q# a) V$ r) P0 ^( E
  54.         votage = (float) adcAverageBuff[0] / 4096 * (float)3.3;5 ]1 u" a7 e  M% z" G2 C. j
  55.         printf("ADC Channel01 Voltage:%f V \n", votage);: W, H0 B# p2 m  a3 S7 T! w$ ?% o
  56.         printf("ADC Channel02 Value:0x%04X \n", adcAverageBuff[1]);
    5 E  m7 c1 P* S0 L$ o) v
  57.         votage = (float) adcAverageBuff[1] / 4096 * (float)3.3;( g0 |7 }4 i: z: f: Q  ?
  58.         printf("ADC Channel02 Voltage:%f V \n", votage);7 k0 L/ i4 g% o, j
  59.         printf("---------------------------------------- \n");
    3 ?* J+ C% \+ y
  60.         HAL_Delay(1000);$ D& J) {2 M# y/ x
  61.         /* USER CODE END WHILE */
    & }, S  B1 m* h; v1 z5 L
  62. $ q# y6 d# O$ R5 V$ `( l0 t
  63.         /* USER CODE BEGIN 3 */
    ! X, m) T, a; d7 E( _/ Y5 Q
  64.     }5 k1 z& n( h  i% b
  65.     /* USER CODE END 3 */8 r* A9 f6 o7 c1 ^; z. ~; g- W
  66. }
复制代码
) o4 e% X* T* a1 p3 H6 X
2.3 外设的初始化函数- h  N& y6 x# X5 i$ V
外设的初始化函数都是由 CubeMx 生成的,因为我们只用 DMA 搬运数据,未使用 DMA 的中断功能,故初始化 DMA 时可将中断配置函数注释。) c1 {, Q+ B, o5 b+ Z
" h! i0 ]7 @8 `1 V
  1. /**
    ; E! l3 |/ P7 X. R  ?
  2.   * @brief ADC1 Initialization Function1 [( U3 u( o4 a6 I
  3.   * @param None
    * `  W" Q& u" [  Q, p
  4.   * @retval None
    % ?2 S5 h5 @1 |+ `/ Z
  5.   */
    3 ]( p( k9 \. Z6 g  Q1 O; E
  6. static void MX_ADC1_Init(void)2 ?4 D6 O% \' |
  7. {& [) F6 _( p5 n2 O" {0 B$ d

  8. * O# D' l( p6 o5 u& y+ b
  9.     /* USER CODE BEGIN ADC1_Init 0 */0 l9 Q- B3 I) ]5 W/ I
  10. ' L  s2 a$ V# A+ \' z
  11.     /* USER CODE END ADC1_Init 0 */
    / ^9 X) {, Z' d  {. o* {
  12. 6 i) m5 i- d9 E% z$ E$ j8 }1 z
  13.     ADC_ChannelConfTypeDef sConfig = {0};
    2 C$ U4 v# d( X; A2 d' l# c

  14. 2 z0 r) r+ U) M
  15.     /* USER CODE BEGIN ADC1_Init 1 */
    ( d7 {/ v0 N, _. Z# ]4 u

  16. . A: n. t4 X( _& z; z
  17.     /* USER CODE END ADC1_Init 1 */
    ' H! z; Q6 A/ z, O2 h
  18.     /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)/ u8 C  I, c  `$ x: Q0 y+ I( V+ W
  19.     */8 r# k! y2 T5 N7 L2 y  B5 c
  20.     hadc1.Instance = ADC1;8 P5 {; n+ s" L2 ^
  21.     hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;/ c% B- v# t, |: q2 x
  22.     hadc1.Init.Resolution = ADC_RESOLUTION_12B;
    ' u% v! z4 h9 D/ [5 O/ \1 k
  23.     hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;  ~8 J1 C3 V! h* J! a& l8 W
  24.     hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;4 W0 K$ v: q' g/ }
  25.     hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
    + P3 v$ D' Y" b2 a5 l# y
  26.     hadc1.Init.LowPowerAutoWait = DISABLE;
    6 t: ~) l! Y, t# v, S
  27.     hadc1.Init.LowPowerAutoPowerOff = DISABLE;
    ' S5 w1 {; z% A1 W, B' m: K
  28.     hadc1.Init.ContinuousConvMode = ENABLE;) I; w1 @3 ], N6 Q
  29.     hadc1.Init.NbrOfConversion = 2;8 K0 q$ T. H  ~5 m; m
  30.     hadc1.Init.DiscontinuousConvMode = DISABLE;$ S$ x% X; d2 A! w4 x2 G
  31.     hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;) s. ?1 A7 }: m7 F  V3 k
  32.     hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;1 W  n) J# f: l5 c, ]7 n
  33.     hadc1.Init.DMAContinuousRequests = ENABLE;, F% N  r4 @3 e0 Q; y- ?" d& {
  34.     hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;% T# I1 g+ a- `6 c7 N
  35.     hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_12CYCLES_5;
    ' f$ \1 x4 A0 I6 H+ v
  36.     hadc1.Init.SamplingTimeCommon2 = ADC_SAMPLETIME_12CYCLES_5;" W$ R& u+ y/ b2 ?4 d2 x
  37.     hadc1.Init.OversamplingMode = DISABLE;
    4 E' L# c' b- q) i
  38.     hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH;
    1 G8 ?  K4 `# [
  39.     if(HAL_ADC_Init(&hadc1) != HAL_OK)
    1 f5 C% x7 ~2 X) {
  40.     {
    / g0 |4 Z7 X% j: ]; L8 [& q- p4 l
  41.         Error_Handler();, @* S& J" B/ f
  42.     }
    9 N4 u" U; N9 X- M
  43.     /** Configure Regular Channel2 d1 ~7 Z0 J5 S' e3 u5 |* N
  44.     */
    & f! M3 Z$ S+ ?
  45.     sConfig.Channel = ADC_CHANNEL_7;! z+ i5 J) c& l8 v
  46.     sConfig.Rank = ADC_REGULAR_RANK_1;/ v8 }( g+ _1 i5 r
  47.     sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1;
    ! b/ F! C$ o$ q* r5 c, z: P) w( \) i
  48.     if(HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
    * H. T" N* m, D1 k. j/ R6 P2 Q
  49.     {, i" [7 M7 _& ]; E% n; z
  50.         Error_Handler();
    9 D' h& f2 O1 A6 r
  51.     }
    " `) J. A1 f7 x: T
  52.     /** Configure Regular Channel
    1 e/ H) W4 a3 u* \8 b
  53.     */
    5 b  r4 n' s6 W0 i8 C
  54.     sConfig.Channel = ADC_CHANNEL_8;" U. E' A; m. H. V1 M( R8 s
  55.     sConfig.Rank = ADC_REGULAR_RANK_2;
    8 ^- s+ d& F5 v6 ]  d
  56.     sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_2;
    ' u* r9 B  [/ Z; I+ [$ I
  57.     if(HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)0 K/ v/ W( C/ g. ~
  58.     {% D/ O) X/ j+ C$ J% t& H
  59.         Error_Handler();* H! I; m# c+ [9 I9 }
  60.     }
    " {  s1 I7 U/ E! ]
  61.     /* USER CODE BEGIN ADC1_Init 2 */
    # b$ R( d. ?# n( I: Z2 N
  62. - m7 @8 k+ M1 E- z0 H8 @3 n; S+ _
  63.     /* USER CODE END ADC1_Init 2 */, o1 p7 K9 l$ i! |$ a
  64. 8 f+ W2 X1 }9 D- q- P$ x; {
  65. }" H5 s# D8 ~4 C  Y2 l9 C; D( V

  66. + k4 ~3 l: f3 a1 i# V
  67. /**# C6 o, u5 o. r1 ?1 ?! Y
  68.   * @brief USART1 Initialization Function3 E8 e. m6 _! d1 [2 ^) O! N
  69.   * @param None
    6 f0 c( U* _6 M" M
  70.   * @retval None
    8 j. B  K! Q% p# i
  71.   */: m! I( I( V) w' |+ X  R# f$ e% B8 T$ d
  72. static void MX_USART1_UART_Init(void)
    9 q: A* |' u# G$ ^4 V
  73. {
    8 X0 o& F- T4 W9 Y- j2 L

  74. 1 l( d! b" A4 }; z7 B: E' _  Z
  75.     /* USER CODE BEGIN USART1_Init 0 */
    ! s5 ?, N* l8 @; j9 @6 l, Z
  76. ) ?# R5 A( {, y3 @
  77.     /* USER CODE END USART1_Init 0 */: k5 t! U9 l/ u  @! G+ L

  78. 6 n7 c! y* Z. r% _  u' r* s6 D: L
  79.     /* USER CODE BEGIN USART1_Init 1 */9 T/ g* I$ a; I( N  v, g3 S
  80. : e1 Q  P: k" G
  81.     /* USER CODE END USART1_Init 1 */7 U/ V& {- P+ X. z( d" {
  82.     huart1.Instance = USART1;1 a5 F% X& B8 M6 @! v
  83.     huart1.Init.BaudRate = 115200;
    * w3 S# d* `# X5 `8 U, k$ z
  84.     huart1.Init.WordLength = UART_WORDLENGTH_8B;
    ! [* h* b8 b9 H  Q. M+ P/ k
  85.     huart1.Init.StopBits = UART_STOPBITS_1;0 g* n4 I- C5 ?: k" ]. R7 d% L
  86.     huart1.Init.Parity = UART_PARITY_NONE;
    ( Q3 L/ Z4 O: h! r+ s" j
  87.     huart1.Init.Mode = UART_MODE_TX_RX;
    8 _! m" p( a1 ^: k% ^
  88.     huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
    4 K6 W3 ^4 e- I) }+ U' z7 \7 E
  89.     huart1.Init.OverSampling = UART_OVERSAMPLING_16;
    8 r+ ~/ ^& @) C0 m
  90.     huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;' j" c. p5 m. x& s+ l5 p* ^2 o
  91.     huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
    0 b8 z- e$ m6 [# i: C6 ~* Z
  92.     huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
    6 H1 A" s  T# m
  93.     if(HAL_UART_Init(&huart1) != HAL_OK)
    7 u; `  l% p- H1 A
  94.     {
    : c2 p" l% f) r* [) }" T; P1 E5 `
  95.         Error_Handler();7 b0 s  I8 i* U& o6 W6 }  C, Z
  96.     }
    ) H3 v& V( a) ?6 z
  97.     if(HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
    + ~; w( w; s! V7 Y9 a8 O. n
  98.     {
    8 q: j: m- ?7 x; {
  99.         Error_Handler();7 e- X. _; N$ c* A$ D8 y  C! V
  100.     }- v; ]/ h# ]/ @' {& w" \" e2 f
  101.     if(HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)- H8 e5 @. C7 F( r; P& G
  102.     {6 F4 {+ l/ c8 ]# {  J, p) }
  103.         Error_Handler();
    1 ]" p7 l/ ]0 u% X2 S* G4 F
  104.     }& B# v4 e; [9 `
  105.     if(HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK), k% P5 q" M/ Z7 J6 N! T% p
  106.     {  n2 l5 M+ z* f0 I. p6 {
  107.         Error_Handler();0 O2 y' R, x4 u& {9 b
  108.     }
      j) C0 W2 R% l8 I) i  b8 G2 r
  109.     /* USER CODE BEGIN USART1_Init 2 *// ?- `# m% t/ d* E

  110. 5 D% j7 v" D* P' \
  111.     /* USER CODE END USART1_Init 2 */
    + m0 a# m+ V7 i, {* f
  112. 4 q, F! [# B5 C( G  y- q( W! M* S* j  o
  113. }: r- Q/ N7 W$ w' C

  114. : }& K" T% o# R5 r& Z5 x) W
  115. /**4 G, X+ _- Y  X- U6 ]) v* R# f
  116.   * Enable DMA controller clock4 D. v( E' h& z( N* k( E, o
  117.   */+ N1 e$ Z& w& C5 p2 {! r
  118. static void MX_DMA_Init(void): z+ `4 X; a/ A, U* m9 |
  119. {
    * u! b1 y/ C2 T
  120. 9 m6 d+ {* N( C$ ]
  121.     /* DMA controller clock enable */! x3 M; T3 f& k/ o
  122.     __HAL_RCC_DMA1_CLK_ENABLE();
      y- @8 c/ K( I8 ]3 `0 m

  123. " x+ S% w% b/ c. m
  124.     /* DMA interrupt init */: A# t& d8 [0 x1 h/ B1 S
  125.     /* DMA1_Channel1_IRQn interrupt configuration */
    ( O( c; z7 {$ o

  126. 6 t* j, }! B. _8 v! h7 _
  127.     //HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0); //未使用中断功能,故注释 * H9 ]0 A9 z1 W3 s; x
  128.     //HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);! n1 D& e  U% @# f; i4 g7 v: c+ p2 I
  129. 6 E8 O5 _7 O+ t; ~  ^: B  f
  130. }
    " F, h. T$ y3 v$ K
  131. ( [* K/ \( t8 [
  132. /**8 g# A+ T# A3 b- A: J
  133.   * @brief GPIO Initialization Function3 B# M$ G( n" s# D. l  _
  134.   * @param None
    $ s/ S( ~+ T: R
  135.   * @retval None
    & J1 Q: Y6 h4 w% B+ g, O' _
  136.   */! F: q! P. S* J" u' e
  137. static void MX_GPIO_Init(void)/ V8 T8 e1 w2 O+ E1 v7 F
  138. {4 g; k8 A* N$ ^( J/ ~

  139. ( T2 \) P" R/ f0 T: A" {! r
  140.     /* GPIO Ports Clock Enable */4 [" z3 S) S0 c& ?5 V1 C, y8 h' `) \
  141.     __HAL_RCC_GPIOB_CLK_ENABLE();& X1 \: M7 N4 y5 U9 I
  142.     __HAL_RCC_GPIOA_CLK_ENABLE();* c3 i. K0 w3 p5 M1 I: c$ {$ [9 y
  143.   H9 j9 u0 @& C0 b
  144. }
复制代码

7 h3 R  `+ x' L( A* a
$ }5 O, d& ?' ~3 y, e; `( W* U3. 实验现象
* Z7 }% A- @, V( U8 q0 |编译并将程序下载到开发板中,连接串口助手并打开;9 \! F5 i  ]* P# k' k( Q
实验现象:每秒打印一次当前两个通道的 ADC 值及换算后的电压.6 S. d- J0 j) V4 ]- ^! o  \
  e. a0 F, j6 p  N3 d% r

8 a; Q' @* _5 }  G
2021012908502456.png

9 Q6 e0 r) @% j3 A& @
收藏 评论0 发布时间:2021-11-10 01:00

举报

0个回答

所属标签

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