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

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

[复制链接]
STMCU小助手 发布时间:2021-11-10 01:00
1. 使用 CubeMx 创建 ADC 工程
5 ~+ d5 K4 G9 j0 z. y6 _! h6 {  W打开 CubeMx 软件,选中我们此次使用的单片机型号 STM32G030F6P6 ,点击 StartProject.
" A5 l, |9 w5 r: v/ o' S8 p/ j! g% i( R3 B, S
先配置一下串口,用来打印相关信息
3 a5 W  s& Y1 K" y5 n' Y3 }1 X
5 }- l4 n2 R& t: z% M" L9 o
20210129082956474.png
, ^; _" z$ X( T. M

3 z- K+ r! A+ G+ _+ d再来配置 ADC& s% m3 p5 D: z5 v; H( X' ^
! F. n8 X' C* l4 n% o* T. x9 {% f
20210129083334250.png
, a6 A) m0 r# E+ {# n3 B' d

- j$ x) F- R) R! b
20210129083449121.png

  e/ g7 Y+ a/ V$ {$ e
% U1 [: z7 a4 Z: v4 H1 _+ v5 _7 {, ^配置DMA; T9 I+ l; I! w
20210129085309510.png

8 c3 m* ?5 T( f0 E5 x3 U; J7 q
$ y% |4 |! H" p+ hPS:DMA 需要要配置成循环模式,否则只填满一次缓存数组后就停止工作,需要重调用启动 DMA 的函数.
& Z5 a" x1 @' C. t# d! ?/ e$ G9 z/ z) M2 J1 }
配置时钟
' ~! N4 W; D) y3 R* A1 O/ y' y, z
/ p% \: {! v/ d8 ?
2021012908370231.png
$ e; {* U; ^; x( D6 d: V

0 r9 B+ `4 m/ \# [. U, W( ?$ qps:本实验使用内部高速时钟,未使用外部晶振,主频设置为最大的64MHZ.
# b2 b- G- `+ R% A7 ^4 Q$ H; o+ U6 x" J; ~' ~/ k4 U
配置工程相关选项
( q# v% I( T# S1 A6 I" `, K# Q# a/ o  i5 g8 s8 k/ t& P& O
20210129083821567.png

! Q; N5 b, n8 ^% ~. @: `* R& @( q- l3 H7 {( |, g  ?
配置完成后点击右上角 GENERATE CODE完成工程的创建- e, X! ?4 T5 N- v8 J
% j2 z5 p( j" L# A8 Z
2. 编程
* _# q2 R; z3 t6 C2.1 串口相关的代码
1 y7 P9 x: e& m* f2 r, x6 ^4 a因打印相关信息需要使用 printf ,需要包含 stdio.h 的头文件,且需要重新设 fputc 的函数- y9 Y6 U# W; ~, P' g1 m
  1. /* Includes ------------------------------------------------------------------*/: T. u, I, ~# F) }) @* a' G
  2. #include "main.h"' o, d8 Q& H) D0 p. E
  3. + r4 I& v) a  u2 n
  4. /* Private includes ----------------------------------------------------------*/
    ) ]% g! o, J& ]0 l  c. |% X8 o
  5. /* USER CODE BEGIN Includes */' |4 J, o6 r/ A0 }* d6 k% V
  6. #include "stdio.h"
    5 Z. e' l9 l5 g6 R% ~/ u* @4 g
  7. /* USER CODE END Includes */# O) E( t0 _- V4 y! X, Y2 r! O* R

  8. 3 H% M1 S6 m7 d( Z$ x( i4 N# ]
  9. /* Private typedef -----------------------------------------------------------*/
    2 @' h% D4 L: s9 g% J& d
  10. /* USER CODE BEGIN PTD */- V/ ]8 u9 i) |

  11. $ P% @4 [! R& k+ w8 `
  12. /* USER CODE END PTD */
    0 L) A( P' `% C& T5 r  I5 D5 F

  13. 1 X0 L8 @+ Q( I
  14. /* Private define ------------------------------------------------------------*/  M( W7 z+ l& g- V( n( G
  15. /* USER CODE BEGIN PD */' \0 Q0 O! a1 V' f/ ~8 ?4 c
  16. /* USER CODE END PD */4 ?/ ?9 Z: r2 |' |8 H9 y
  17. / }' O* F* z' U- x, V# }
  18. /* Private macro -------------------------------------------------------------*/
    1 W& G/ ~) n! _  c( b
  19. /* USER CODE BEGIN PM */
    + a1 i# ^; [/ e1 s' G- I' \

  20. 4 x( Y% S7 C% M6 S  {3 H& b
  21. /* USER CODE END PM */0 v: ]* c& w4 r5 z

  22. ! t3 v2 D" J8 x- V$ ~" l1 V
  23. /* Private variables ---------------------------------------------------------*/
    + F/ `; ?" V1 S5 H  f$ u
  24. ADC_HandleTypeDef hadc1;
    : `" U6 \+ e5 |5 N1 f' @
  25. DMA_HandleTypeDef hdma_adc1;
    ( G. b; V& s3 |" A( w: Q

  26. # X$ w6 p" m. l% F7 }- i* x, x
  27. UART_HandleTypeDef huart1;3 ]+ d: {/ T$ h* i

  28. 9 t* f1 D5 t- m9 n
  29. /* USER CODE BEGIN PV */
    / q) H; ^, e8 B3 e9 j* \

  30. " E3 b  {0 C/ g' M
  31. /* USER CODE END PV */
    6 c2 w. R# ]9 C$ Q

  32. . u7 F! v5 z# |1 Q  K" F5 v( t
  33. /* Private function prototypes -----------------------------------------------*/4 n, a" U: }7 I1 B! z1 v$ N
  34. void SystemClock_Config(void);" j, o' O7 F8 m
  35. static void MX_GPIO_Init(void);
    7 O  m; t- l" U
  36. static void MX_DMA_Init(void);
    / v+ S7 r$ P9 q: i& J
  37. static void MX_ADC1_Init(void);0 E7 G* M  q; ~4 l/ c" ~
  38. static void MX_USART1_UART_Init(void);
    . b! A4 ?9 _+ {  o
  39. /* USER CODE BEGIN PFP */* h5 @) X3 w) h; u3 M/ O' M

  40. ; Y  N$ |2 W* m$ a! @, O! G; l- Q
  41. /* USER CODE END PFP */
    2 \4 ^6 ^4 H) v" H3 Z

  42. 8 u) }& Y0 z* T( {4 C' a$ v
  43. /* Private user code ---------------------------------------------------------*/: j6 x- j1 S* I5 Y1 {
  44. /* USER CODE BEGIN 0 */3 s; j, D  H  a3 Z
  45. __IO uint16_t adcCovValueBuff[30][2] = {0};        //存放ADC的值 2通道  每个通道存放30个值,由DMA循环写入
    2 N' U  O4 c7 U2 P2 D; ~; D; d2 W
  46. uint16_t adcAverageBuff[2] = {0};        //对每个通道30个ADC值取平均值1 W2 n4 D$ g( u9 y, J2 T
  47.   t* S2 V9 ?! b& Q' f' P* T4 H, K) {
  48. : e7 Z' h% x! ^
  49. #ifdef __GNUC_2 R! ~0 p# {# C8 g/ a2 E3 F8 }( o
  50. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
    * A. Q% O: e# R; h0 q' D; T
  51. #else
    0 S# o5 y) ^) w. a( `4 b
  52. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)0 ^) b, @5 R4 `4 h
  53. #endif
    1 k8 W+ n( \: j+ J
  54. PUTCHAR_PROTOTYPE6 M/ S9 r, l" B' N0 I
  55. {
    8 p$ m  z) j1 c7 _/ J* R0 X6 k
  56.     HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 0xFFFF);$ C4 X! b# Z7 R

  57. 8 {4 |$ K6 Z/ Y
  58.     return ch;
    5 }' e$ k2 I; f0 R' j3 E) k6 c
  59. }
    7 \  j! `" s# J. O5 x: I5 H
  60. ( d: }; h5 Y4 _6 G  G
  61. /* USER CODE END 0 */
复制代码
- |4 `$ r- Q0 A2 b1 b
( z& s& }* _5 F' q4 S0 e- T
2.2 main 函数
5 t" q7 R5 p! O; r* x8 G: I
  1. /**
    * `1 O( |" [0 P0 E
  2.   * @brief  The application entry point.; f1 c0 f- L/ n& Z* @' G* C
  3.   * @retval int
    ' ?9 N" U% L! n. M
  4.   */! n7 J/ k, ?% r& J9 W' k
  5. int main(void)6 Z8 F$ C' m8 x( x# G6 o2 ?
  6. {
    9 a) L: ?! S7 Y9 \0 N
  7.     /* USER CODE BEGIN 1 */, c6 M3 N* }# T. |5 }4 \' C0 u
  8.     float votage = 0;3 _6 e  I. o4 O+ v& p
  9.     uint32_t sum = 0;: }- ?( i2 U1 h+ q4 z  `
  10.     /* USER CODE END 1 */& d/ w# E; r1 Z. \) F7 N3 X# G5 J
  11. : C+ N7 G4 M. G" [
  12.     /* MCU Configuration--------------------------------------------------------*/1 ?. y9 k/ |6 [+ T: Y: C
  13. 4 g( N) _6 A# p. _
  14.     /* Reset of all peripherals, Initializes the Flash interface and the Systick. */3 q  p) ]/ a1 L( Y) X
  15.     HAL_Init();
    % B& B! d( ]+ }9 R5 K# F0 {9 c
  16. 2 l  v, ?7 k" Q9 U7 C2 M6 c
  17.     /* USER CODE BEGIN Init */
    ( e# z  E; \2 @  a1 e1 T8 t

  18. 6 g0 F) a% B/ [3 ^% r9 V% T
  19.     /* USER CODE END Init */
    ) @/ X# S8 w8 N; ~8 K

  20. ! }; W+ K: Z1 N/ i# X' Q
  21.     /* Configure the system clock */+ c' T/ q9 v9 y; L) H# B
  22.     SystemClock_Config();
    7 D4 S. t, t# }0 M! E. p  [# X
  23. ' q6 R& S( x# b1 S  U& J
  24.     /* USER CODE BEGIN SysInit */8 }9 W, i! a4 ]! H8 i; r
  25. : Q  t% j) R# g- Y% X; {9 @
  26.     /* USER CODE END SysInit */
    2 X( S& R2 i' ~, r/ Y

  27. " ]! ]8 L' x2 l' ~) n
  28.     /* Initialize all configured peripherals */" V. ]9 @0 \' W$ [2 L* B
  29.     MX_GPIO_Init();7 z$ o" G4 ?- k& Y2 Z
  30.     MX_DMA_Init();) `" D6 O: a, m2 y3 z1 E$ i0 i8 |
  31.     MX_ADC1_Init();
    4 o8 Q6 P- S$ v' \0 T; f4 B
  32.     MX_USART1_UART_Init();: i* y5 l: }! H9 q5 L
  33.     /* USER CODE BEGIN 2 */7 U  _9 o, ^8 e; A
  34.     printf("stm32g030f6 adc demo...... \n");7 Y9 c" ]' d( Z* j( w; }8 n' W8 U
  35.     HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adcCovValueBuff, 60);
    + u3 m0 Z2 ~& U; J' A& B9 F3 g. e
  36.     /* USER CODE END 2 */; M0 W+ B" w6 j% |  E9 q8 H
  37. 8 X' a8 h& v8 m* W+ I1 w5 J" Z5 u
  38.     /* Infinite loop */
    , ^* J& |9 y5 ?) W4 E% p: p. ~
  39.     /* USER CODE BEGIN WHILE */% ^0 w& q- G2 I$ B! f
  40.     while(1)8 X! J% T+ `9 k/ A# f' f
  41.     {! w3 }. w' `# \9 k; f) a
  42.         for(uint8_t i = 0; i < 2; i++)
    3 a6 d" j! S# e0 B4 e4 m
  43.         {/ Z  v  W+ c0 f7 L6 A- u
  44.             for(uint8_t count = 0; count < 30; count++)0 ^9 j- t" i, a9 }: y* S0 c# `* e
  45.             {
    6 J, Q# v  L6 l# G  t2 j/ l4 n5 R
  46.                 sum += adcCovValueBuff[count];
    1 ?  ^4 v$ O: T2 ^& ]+ B4 X$ o, z2 L. n
  47.             }# N" i: B/ `+ p2 ^
  48.             adcAverageBuff = sum / 30;; Z2 e1 n" Y3 p% t$ P8 K
  49.             sum = 0;
    / B% a' ?7 h9 f$ T$ u
  50.         }  s& e$ ]+ G5 A0 u4 U% J
  51. # {9 C. v0 u/ K
  52.         printf("---------------------------------------- \n");
    6 ^* o2 [/ O: U/ L* P# [1 W7 r5 u
  53.         printf("ADC Channel01 Value:0x%04X \n", adcAverageBuff[0]);
    / l! S& L) y7 `  A5 O
  54.         votage = (float) adcAverageBuff[0] / 4096 * (float)3.3;- X5 i( c# z6 L  X' K) Q
  55.         printf("ADC Channel01 Voltage:%f V \n", votage);
    $ y, T9 D2 Q( @3 F# ?2 J& ^* ?
  56.         printf("ADC Channel02 Value:0x%04X \n", adcAverageBuff[1]);3 |7 E: S% W6 ]! s9 u) p
  57.         votage = (float) adcAverageBuff[1] / 4096 * (float)3.3;
    $ @  \0 w4 D2 Z1 I) ^
  58.         printf("ADC Channel02 Voltage:%f V \n", votage);9 n' w& w2 t( b- I. ]8 K, D4 H: q
  59.         printf("---------------------------------------- \n");
    & K: W/ ~$ t5 d8 I
  60.         HAL_Delay(1000);
    ! S1 E4 }2 l! _# W" `. S
  61.         /* USER CODE END WHILE */1 f1 _$ v. P+ \2 R
  62. + Q  u9 w1 ^3 `! P
  63.         /* USER CODE BEGIN 3 *// U2 B: \; b' |& }: U8 x
  64.     }* o* \+ i7 w) r2 K6 w: n
  65.     /* USER CODE END 3 */
    ; }8 R! Z5 r. J9 l& b
  66. }
复制代码

0 n8 d( r! {5 J- m; Q9 I& Q" ?5 I2.3 外设的初始化函数
: n* J. Q% W( Q$ @" C外设的初始化函数都是由 CubeMx 生成的,因为我们只用 DMA 搬运数据,未使用 DMA 的中断功能,故初始化 DMA 时可将中断配置函数注释。( {, w, v- a; A' ?

( I" l0 D5 G5 l! O* R
  1. /**
    . R9 e: o/ S% l% B: D& K
  2.   * @brief ADC1 Initialization Function
    . p+ d6 H& [) m- G6 H3 d& _
  3.   * @param None
    : n  s1 G2 R) D8 n8 @" m
  4.   * @retval None
    2 I  a$ k' u) q3 t- |
  5.   */
    # |5 S$ s! b( b
  6. static void MX_ADC1_Init(void)
    : f* D1 B  M/ E' Q7 w' [2 u
  7. {
    2 L& \0 _/ t+ V( k

  8. " r7 o# ?/ P. D9 ?2 W9 }' E4 t7 e: T
  9.     /* USER CODE BEGIN ADC1_Init 0 */
    ; I' {) \* ?! }$ O7 L) e

  10. + h7 i& o2 t$ a
  11.     /* USER CODE END ADC1_Init 0 */* l! @: e. Q! B- D- p/ m3 d- z
  12. 7 X5 O0 o- t$ h: d
  13.     ADC_ChannelConfTypeDef sConfig = {0};" h9 u% N- k5 Y* E6 P2 p5 l, @; C

  14. 2 E' D9 x3 g+ B, i
  15.     /* USER CODE BEGIN ADC1_Init 1 */
    $ ^; [7 @0 W$ n) L

  16. 0 Z; m: z0 _( o, g( I" o  B6 ~
  17.     /* USER CODE END ADC1_Init 1 */
    3 b  ]0 Q" ?" O$ L; I! R: m
  18.     /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion), o% [6 C' b" G% q% _( ?& I, m+ e
  19.     */
    ) B. E; @7 [+ `$ ~$ r% v
  20.     hadc1.Instance = ADC1;
    + H4 p9 g, u& S+ ~! C. Y3 c
  21.     hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;) W/ v8 }, M" V4 m/ h( S$ C* ?
  22.     hadc1.Init.Resolution = ADC_RESOLUTION_12B;9 G) l/ H3 j* s
  23.     hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
    4 q' ^( X% ?3 O7 I
  24.     hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
    + n7 M( v; \) X" x
  25.     hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;" Y1 F( r' u* |( S; D
  26.     hadc1.Init.LowPowerAutoWait = DISABLE;
    ) ~7 l: s3 C- {1 [1 |1 u$ U
  27.     hadc1.Init.LowPowerAutoPowerOff = DISABLE;3 P) D$ u& I: \% E
  28.     hadc1.Init.ContinuousConvMode = ENABLE;
      H' n% k3 d! |& J& S0 v
  29.     hadc1.Init.NbrOfConversion = 2;# @* @+ D" z# F  H. S# Z0 N
  30.     hadc1.Init.DiscontinuousConvMode = DISABLE;- ]- q7 j" v& t/ ?6 u8 b9 M
  31.     hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
    " T( }& Y# A; D- W. q- f. t
  32.     hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
    $ F' P3 F9 ?1 B4 [: E
  33.     hadc1.Init.DMAContinuousRequests = ENABLE;
    . s% z9 E4 [' r# j- E4 S9 e% @
  34.     hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;/ H; S# A% y9 \7 b2 S; \
  35.     hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_12CYCLES_5;7 c! O3 B1 u* Y# Z
  36.     hadc1.Init.SamplingTimeCommon2 = ADC_SAMPLETIME_12CYCLES_5;
    9 O$ d. x" i8 a
  37.     hadc1.Init.OversamplingMode = DISABLE;6 W! n& T/ ]& d, Z
  38.     hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH;
    1 `. z5 n  p0 X; e4 V# l& t( n6 C
  39.     if(HAL_ADC_Init(&hadc1) != HAL_OK)1 W. ~( z6 U$ n6 ]( a1 m8 t- Z( h
  40.     {
    ) q9 ]1 T4 i' z! D+ A: c
  41.         Error_Handler();! B( o! I, S) i  U5 y4 b# O, I
  42.     }4 N3 V3 a; k5 G
  43.     /** Configure Regular Channel
    8 O; O3 }* {, J9 o' v$ \
  44.     */
    * T" h5 L9 D! {- Y) Y2 E
  45.     sConfig.Channel = ADC_CHANNEL_7;
    5 u! r7 j; W! Q( w# K
  46.     sConfig.Rank = ADC_REGULAR_RANK_1;0 P2 R: U3 ^) p( _& {1 o7 e  o. T
  47.     sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1;# [0 `  ]' z/ K  q3 I. Z
  48.     if(HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)$ n. o) H/ G  N5 i% e2 e) K8 a1 z
  49.     {
    ' }$ e- R5 \3 ?$ A
  50.         Error_Handler();
    5 l4 y. z( _% T* G
  51.     }& j4 O% R8 b3 M  G8 j% d
  52.     /** Configure Regular Channel
    ' \+ ]3 z! `, k. Z. _  [# a
  53.     */
    " K; X* x: h1 `, G" i0 Q
  54.     sConfig.Channel = ADC_CHANNEL_8;
    0 X' A+ I' K7 i  R4 l2 j
  55.     sConfig.Rank = ADC_REGULAR_RANK_2;
    ; I+ t9 t' H( u$ Z' Y1 K$ A$ A1 k6 T
  56.     sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_2;3 F9 Q7 |0 U! z
  57.     if(HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)1 t3 v: ^/ {( J: ?
  58.     {
      t$ E! K( L! l* L
  59.         Error_Handler();# O% E0 `! i; g' H' P; \
  60.     }
    , B7 V9 n! _+ I! G9 r
  61.     /* USER CODE BEGIN ADC1_Init 2 */( w' f- b' T( G  k$ v1 T
  62. ! i+ S/ }' L' W
  63.     /* USER CODE END ADC1_Init 2 */. u& I. a. m- \# d. z

  64. : F+ u1 B0 a* Z- e9 h: j8 u* r
  65. }& B) Q5 j1 P3 V# T
  66. 4 f& A! E, P# P. J
  67. /**. ?" Q# h+ y, P$ N
  68.   * @brief USART1 Initialization Function1 W9 {; b5 f  o
  69.   * @param None
    6 h" D6 K( P, N4 C" H
  70.   * @retval None  l- r5 Q2 \. h9 r. J9 x
  71.   */
    3 l; F3 H. v+ ?- e* M2 H
  72. static void MX_USART1_UART_Init(void)7 f6 K7 F4 ?% G7 R
  73. {
    9 t8 u: i8 q' R% t) k6 W

  74. & [- f1 T3 z0 {" C$ r& h7 k
  75.     /* USER CODE BEGIN USART1_Init 0 */2 t% @4 I8 L$ Q0 L- R4 q. \

  76. * l, A/ [: U+ h9 @
  77.     /* USER CODE END USART1_Init 0 */
    4 ]* y" X) Y9 e! {: T+ H! P
  78. * H: ?& O5 B; C# C4 E) m
  79.     /* USER CODE BEGIN USART1_Init 1 */
    : ?" |' k4 J" W$ d; f

  80. 9 P5 N# I9 z& F0 C' v$ m" l4 ?- p, P
  81.     /* USER CODE END USART1_Init 1 */
    4 K8 k, n9 n; M7 o8 q2 _
  82.     huart1.Instance = USART1;; d& W+ r0 s8 `9 c, o
  83.     huart1.Init.BaudRate = 115200;
    + u% z, o  M1 B0 y, Q8 ]
  84.     huart1.Init.WordLength = UART_WORDLENGTH_8B;
    6 N( H- e! X6 i5 t
  85.     huart1.Init.StopBits = UART_STOPBITS_1;0 `# J$ u5 I# i4 k
  86.     huart1.Init.Parity = UART_PARITY_NONE;
    + z- h8 {9 |1 k+ C. R! E( i6 M; o
  87.     huart1.Init.Mode = UART_MODE_TX_RX;
    , i- K, T( N3 g+ {: E
  88.     huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;4 u6 }  E5 E4 x, J* c2 m
  89.     huart1.Init.OverSampling = UART_OVERSAMPLING_16;
    3 r( \3 V5 g/ E1 i
  90.     huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
    - T2 n/ k* X+ _6 {
  91.     huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
    4 y9 h0 L) @; s( w  W) A2 T
  92.     huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;, e0 s+ ~) j6 \2 x! D
  93.     if(HAL_UART_Init(&huart1) != HAL_OK)
    6 v8 j6 l4 A2 d$ ?! p1 t
  94.     {
    & a0 s3 B$ I* _% L  A1 g8 {
  95.         Error_Handler();
    9 H: t: i/ f% O7 s" W
  96.     }
    # d& E' A5 K4 B. f
  97.     if(HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)* U2 q- k( U1 G% y
  98.     {
    / Z8 H9 a& B! P2 A' d
  99.         Error_Handler();0 v# O$ H- q6 l& Q$ a/ x
  100.     }7 j3 \; _7 l0 J* Z
  101.     if(HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
    ) B3 G8 @+ C3 ?( Y9 O4 }* n
  102.     {
    5 X7 i; |4 P6 Z2 V0 E" F2 j) b# Q
  103.         Error_Handler();5 ]0 c6 N2 h/ O9 t7 A1 o
  104.     }6 `6 k" j$ L6 |: j& a
  105.     if(HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
    ' ^/ p1 \3 x0 Q8 j& c
  106.     {
    " ^& e) k# |3 D
  107.         Error_Handler();1 P/ q" ~- D$ }. v
  108.     }$ D- ?% |/ d" E" w! }4 _
  109.     /* USER CODE BEGIN USART1_Init 2 */! i8 f8 K0 B8 g' ?; M

  110. ( o. w, ^: x# L' x9 C+ |
  111.     /* USER CODE END USART1_Init 2 */& J! W0 R6 _$ v# w6 r3 ?

  112. 4 m. j5 |# P- h# c+ k9 J8 t
  113. }
      W& e( P9 A! I  Q# h
  114. 5 x6 G; Z2 y1 n/ P2 |$ H
  115. /**
    - b! `" S; B0 e, `
  116.   * Enable DMA controller clock
    & {! ~& ~0 {3 j7 C! M
  117.   */. X, `$ n( h4 Q, k5 U
  118. static void MX_DMA_Init(void)
    ) V' y) U1 c6 `7 S; w
  119. {
    & p* X5 T  o; R2 O9 h, ?1 f

  120. 7 B- c, D* i+ E
  121.     /* DMA controller clock enable */, ]" ~, K6 D! t5 S7 c8 f
  122.     __HAL_RCC_DMA1_CLK_ENABLE();
    7 Y* b+ ~  f/ D# N& n' U

  123. ; |4 G8 }( c' b$ Q: Y6 z0 Y+ V
  124.     /* DMA interrupt init */& |& l& w7 n7 o' _; d
  125.     /* DMA1_Channel1_IRQn interrupt configuration */4 x# Z' O2 d; b4 |) W
  126. & o/ ^% ?6 h$ {1 @* g
  127.     //HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0); //未使用中断功能,故注释 
    8 q. I( C  |& K0 p
  128.     //HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
    : M% F! {3 O: D/ l: \1 R6 y7 F
  129. & \1 K4 J6 \2 n* j1 B
  130. }3 |' `) x( k' Q1 [: F
  131. % U/ v& ?) d4 j. H$ h0 b
  132. /**
    # |5 r0 a: V" f/ i
  133.   * @brief GPIO Initialization Function2 O6 m2 C# a7 G
  134.   * @param None
    * G. ~" M; q6 c  n
  135.   * @retval None
    1 U/ I0 G) E! }& S' {
  136.   */
    0 F) D  C5 z% c7 t5 h0 R, R
  137. static void MX_GPIO_Init(void)
    6 G, V3 \" C" o1 I5 s5 G
  138. {. h% V* T! `- B0 r

  139. ; F3 ^5 G/ j" Y
  140.     /* GPIO Ports Clock Enable */
    " @& b. G9 e# z
  141.     __HAL_RCC_GPIOB_CLK_ENABLE();
    2 Q; |2 E) L% C& |
  142.     __HAL_RCC_GPIOA_CLK_ENABLE();7 p$ b7 c- J' x/ M( A% r
  143. % `+ ^* c- @: }# J
  144. }
复制代码

/ d( E- M: V; @+ b' }# z
) c7 u' V6 Q  a# ~' _3. 实验现象
3 `/ ?8 b, B7 `6 `# b编译并将程序下载到开发板中,连接串口助手并打开;
+ h8 H, T( e5 p/ g实验现象:每秒打印一次当前两个通道的 ADC 值及换算后的电压.# G4 @; m# A  E7 t; E, [

4 `6 A* x9 s( F* Y: p; i' n% \1 g8 k3 i
2021012908502456.png

5 I% r9 V# f( i- j
收藏 评论0 发布时间:2021-11-10 01:00

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版