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

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

[复制链接]
STMCU小助手 发布时间:2021-11-10 01:00
1. 使用 CubeMx 创建 ADC 工程8 V. _* y; o' `
打开 CubeMx 软件,选中我们此次使用的单片机型号 STM32G030F6P6 ,点击 StartProject.& @6 P/ A: y* ^4 f
4 x/ G8 G# Q( }% T0 b
先配置一下串口,用来打印相关信息7 f$ N* C6 f& h

& N. i' d( B, `4 ]" F! K
20210129082956474.png
0 j$ K1 t- I$ G# F* o* s
. H3 {  U  Z/ M* f
再来配置 ADC0 O, q; Q% Z/ m9 k. t8 f

2 ~, _$ B( f: f
20210129083334250.png
6 C+ v. W6 B1 A2 i9 Z3 g! W6 N

! @, ^& u0 F" v5 k
20210129083449121.png
' Y5 n* ?2 r6 v4 M" t( [1 x
5 F" |- b1 T  G; S1 e: x: R8 m
配置DMA$ v! T9 m$ @! j1 _' j
20210129085309510.png
9 E+ H& R# r  K$ j

( q. M  E; e$ u. m* l; s3 Y( [PS:DMA 需要要配置成循环模式,否则只填满一次缓存数组后就停止工作,需要重调用启动 DMA 的函数.* L! x4 v0 K' d! E9 g1 C
+ ~( U+ t. U; Z/ |6 e
配置时钟
/ b4 \6 N" `: L9 ^$ y: ^8 x: r8 V3 |2 g2 r4 ]/ [  @
2021012908370231.png
" _5 z/ n9 g( @
9 C3 l# b* f) f7 n0 E/ r
ps:本实验使用内部高速时钟,未使用外部晶振,主频设置为最大的64MHZ.
4 |! s  [4 I5 v: W+ l! Z+ x, @& o9 b' q  e! F; t  s
配置工程相关选项7 F3 f% U0 h" G: U6 J

" v6 g+ X$ d0 p
20210129083821567.png

7 i3 E; L& f1 ]2 k. W5 _. {; w
' h9 p& b7 x: t配置完成后点击右上角 GENERATE CODE完成工程的创建0 i+ Z& @0 l# z; z8 P1 C

7 C: ]8 I: R, M- u. G  S2. 编程
2 }! n5 t8 {5 n6 ~2.1 串口相关的代码
+ s, N: \( Q3 f; k0 [# a因打印相关信息需要使用 printf ,需要包含 stdio.h 的头文件,且需要重新设 fputc 的函数9 `0 L7 ]/ ]6 V* D) V
  1. /* Includes ------------------------------------------------------------------*/1 L% ]) f% i" Z* r# X1 n& j: h
  2. #include "main.h"% y! d7 P+ I# e7 L+ `

  3. - q  T! ]4 l" l* n# f( z
  4. /* Private includes ----------------------------------------------------------*/' D% O- \4 O: {: q
  5. /* USER CODE BEGIN Includes */% ^+ x- R, B& K/ V3 z
  6. #include "stdio.h"
    ! I  ]2 M* L0 Y1 c
  7. /* USER CODE END Includes */& c5 f( o+ D8 }3 Q: `, k
  8. , t2 s7 v; \4 p" D) d* P
  9. /* Private typedef -----------------------------------------------------------*/. R& u" z/ ~# h' U1 G% K, \
  10. /* USER CODE BEGIN PTD */: D& E( N3 F* g. m2 W% p
  11. 0 y2 u' Y3 x; ?- ~2 C* }8 Y
  12. /* USER CODE END PTD */
    2 v8 L: s' [3 K8 I! e) m% ]
  13. : m! b/ X! e( A7 C
  14. /* Private define ------------------------------------------------------------*/0 s# D  L# V& K( t* L$ _/ r
  15. /* USER CODE BEGIN PD */6 l- f% v7 Y& U- {4 X# L' I! s
  16. /* USER CODE END PD */
    4 L9 p1 u! h1 G8 E, U2 H  `

  17. " k9 F1 n/ s& ?! j3 U5 X- ^
  18. /* Private macro -------------------------------------------------------------*/% {' f& h( Z. Q; i" [
  19. /* USER CODE BEGIN PM */% b3 [/ c' t9 s* L6 H

  20. ( \- d4 v5 s6 |& p4 z
  21. /* USER CODE END PM */
    - L# \4 y3 `9 T& u" X7 ^
  22. 4 B; V  g& B! k
  23. /* Private variables ---------------------------------------------------------*/
    2 M4 C5 |& o3 G* b' U8 ^7 B
  24. ADC_HandleTypeDef hadc1;
    $ e* ~; U+ h4 @$ F5 w
  25. DMA_HandleTypeDef hdma_adc1;0 v! [( e% H, A% E
  26. & B" V' ~9 z1 U) q
  27. UART_HandleTypeDef huart1;
    ! {. k- w$ r( z3 I7 t7 a
  28. / M7 k3 h( {8 x/ M& ~+ n% |$ X2 J: _
  29. /* USER CODE BEGIN PV */
    2 z& h" D- k% Z* e1 R

  30. ; k& M- G% M3 q# b& t4 L! Q6 V, L
  31. /* USER CODE END PV */
    : e/ u( c* S3 A
  32. % {- X" `9 k8 X  w% r
  33. /* Private function prototypes -----------------------------------------------*/
    & r5 [2 O- I+ b6 `# W% `! |. _( I
  34. void SystemClock_Config(void);
    0 S% B+ g" y+ p  h, W; |
  35. static void MX_GPIO_Init(void);6 C( K. t# _# H1 t, y. O
  36. static void MX_DMA_Init(void);
    + _" q6 b  E$ ]9 c/ q  q/ Z
  37. static void MX_ADC1_Init(void);4 C+ W3 W7 j+ K0 H
  38. static void MX_USART1_UART_Init(void);1 ]0 A+ t9 Z3 ^
  39. /* USER CODE BEGIN PFP */+ k1 y  l6 Q2 x0 w4 X3 `" H' O: J2 e
  40. ) m$ `* C, X4 @' v: c* q( [
  41. /* USER CODE END PFP */
    $ N3 l+ X) r  m' I! Q
  42. 8 ^3 e  o. B5 Z1 O
  43. /* Private user code ---------------------------------------------------------*/
    , i, M, Y1 y! L! Y( F5 X; N
  44. /* USER CODE BEGIN 0 */& G0 B6 D, t$ A+ H$ |2 I
  45. __IO uint16_t adcCovValueBuff[30][2] = {0};        //存放ADC的值 2通道  每个通道存放30个值,由DMA循环写入5 Z8 S+ k+ k9 d0 u: [
  46. uint16_t adcAverageBuff[2] = {0};        //对每个通道30个ADC值取平均值0 J, o9 M2 l! n; u

  47. " X' k! g/ I% ~% }# P3 w
  48. % }: L% }1 p; J& N8 k/ P
  49. #ifdef __GNUC_
    : f" }9 T0 N! w
  50. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)5 |8 K% z; l# X8 K' a/ B+ w
  51. #else
    9 r) u1 r# ]8 k5 N2 S' d1 w
  52. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)9 }. p/ N$ P( H/ _' W
  53. #endif6 g' Z: _7 q% `# V# t1 G' J/ N" `7 @
  54. PUTCHAR_PROTOTYPE5 c- Y& L/ Y: w& M9 u
  55. {
    ; W- x& m9 [2 I/ I2 t
  56.     HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 0xFFFF);3 C6 r5 ~! ?, u

  57. - ]/ J4 C: C% J; ~/ }4 F* e  c
  58.     return ch;. Y7 G4 L8 g5 }( b
  59. }
    ' o5 L; P. H& m( r& _/ q% s

  60. 2 z2 `( `, B$ q' i9 i! W6 u# H
  61. /* USER CODE END 0 */
复制代码
* t$ L; C# Z1 l  G

3 G' l( f4 Z3 x3 L2.2 main 函数
7 u# ?, U$ d" ]4 G  C+ W' u1 r9 u
  1. /**) Z( F9 d. }0 j: s5 A1 C
  2.   * @brief  The application entry point.
    # J2 M- g) C3 |9 G4 B" s' v
  3.   * @retval int. Z8 k" Z/ l2 Q: w6 p6 Y
  4.   */* J3 U) G4 A/ U8 Z1 f% [" t9 Y$ j. o
  5. int main(void)" I5 B! A6 p: g" Y2 Y
  6. {8 q% C, c+ G6 `3 M6 q9 {
  7.     /* USER CODE BEGIN 1 */2 v9 d1 L$ S1 d( k  F2 n2 z6 X
  8.     float votage = 0;
    9 `$ `& F5 F# G& U3 F0 z
  9.     uint32_t sum = 0;! j1 @2 E6 z0 x; I
  10.     /* USER CODE END 1 *// @6 d7 c& [0 D7 y& ?

  11. 2 i, M1 G+ ~# K
  12.     /* MCU Configuration--------------------------------------------------------*/
    8 L0 f% w1 i2 x. h- o) B
  13. 9 [" p6 v! ~4 _  b) Q4 f
  14.     /* Reset of all peripherals, Initializes the Flash interface and the Systick. */$ `' Z$ x: T- d# w0 r3 B
  15.     HAL_Init();/ z9 I* l1 e# B5 o9 M8 q: f" K
  16. ( T5 a7 R7 T6 w0 |7 m2 y/ ]& f- @6 Z2 L
  17.     /* USER CODE BEGIN Init */
    5 J0 z3 O2 `5 V# H& l
  18. / k# h8 p2 B5 y) h8 l
  19.     /* USER CODE END Init */
    # @! z: H+ _" [/ s7 Y* T. |5 V

  20. / Y$ J9 O" x' p: Y
  21.     /* Configure the system clock */- K" P  Q6 _5 X, s+ f+ ]
  22.     SystemClock_Config();9 Q& j, ^- I0 f6 z

  23. : L& ^/ h6 ~3 b9 I. e9 A5 }7 m
  24.     /* USER CODE BEGIN SysInit */
    ( [0 ~1 t. U# h" \

  25. ! O2 K2 g0 J. I% B5 r: b% C$ b
  26.     /* USER CODE END SysInit */
    + X2 @0 \& J' q' H0 P/ l4 l
  27. 8 X% M- i' j+ w. R* k7 z
  28.     /* Initialize all configured peripherals */, A; @& g: A: Y# d& q
  29.     MX_GPIO_Init();
    9 i' ]- c# g2 D9 s% t
  30.     MX_DMA_Init();
    % F3 @1 R. A& P/ [2 x7 k" V! q) n
  31.     MX_ADC1_Init();
    # [0 J5 s3 \) B1 |9 B9 ?
  32.     MX_USART1_UART_Init();# N3 Q$ E2 W  e: o% D4 m
  33.     /* USER CODE BEGIN 2 */6 A% j, s$ n) g! {
  34.     printf("stm32g030f6 adc demo...... \n");
    4 x* m, w4 p7 `
  35.     HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adcCovValueBuff, 60);9 h* v% N/ d/ a% z
  36.     /* USER CODE END 2 */
    1 g) _: s  p" o" V& E$ `

  37. 6 u) z9 j& e+ c/ v( C, l" B1 {
  38.     /* Infinite loop */
    ; P/ O. K: s* w3 i* s6 \
  39.     /* USER CODE BEGIN WHILE */0 H- r/ y& U9 {
  40.     while(1)
    ; x8 d) o, x8 d3 h/ W# C5 {
  41.     {
    6 j( V& t" K( j& o/ b. }( E$ N
  42.         for(uint8_t i = 0; i < 2; i++)" L- X* j, \9 P4 h, G
  43.         {( j7 A; j" I" H. {+ p# d5 k1 ~
  44.             for(uint8_t count = 0; count < 30; count++)$ W. x7 |  _1 U$ p5 s
  45.             {$ d6 C" U9 s+ Y2 B! L' J: k) L
  46.                 sum += adcCovValueBuff[count];/ ~% }) u" n- o  V' T* h9 `
  47.             }; x( A0 a; Y/ H' @3 T, W; y
  48.             adcAverageBuff = sum / 30;
    1 J" t: Q- x6 D7 h. d
  49.             sum = 0;: ]1 u3 ~! B  X6 F
  50.         }) W9 ^( X% [! H# r: i8 r
  51. 5 k* a( o( m7 z4 K( `
  52.         printf("---------------------------------------- \n");: c) b6 s5 l, i, G6 I/ e
  53.         printf("ADC Channel01 Value:0x%04X \n", adcAverageBuff[0]);
      w9 u3 X* l: B  i& ?! f
  54.         votage = (float) adcAverageBuff[0] / 4096 * (float)3.3;7 Q: k' Q$ I1 ]1 b% F$ R& \$ ~$ v
  55.         printf("ADC Channel01 Voltage:%f V \n", votage);
    $ m" s: h- r6 J
  56.         printf("ADC Channel02 Value:0x%04X \n", adcAverageBuff[1]);
    , c3 B( U! h6 i
  57.         votage = (float) adcAverageBuff[1] / 4096 * (float)3.3;
    ) I* L7 r7 o9 d
  58.         printf("ADC Channel02 Voltage:%f V \n", votage);% H2 x' ]! X# U4 j1 b% A8 \
  59.         printf("---------------------------------------- \n");/ J) r6 C$ T! b: q, `- h& r0 ^
  60.         HAL_Delay(1000);7 D$ R1 G  [5 B6 @; A; E5 m
  61.         /* USER CODE END WHILE */
    $ Z$ w" [- E5 c* r

  62. 8 n( E: M0 {5 g
  63.         /* USER CODE BEGIN 3 */
    # L4 L% I# ?4 _
  64.     }/ S2 {) _' l4 v1 g  D
  65.     /* USER CODE END 3 */
    % ]) G* i* l2 e+ c) M( Z
  66. }
复制代码

* Z" U/ Z$ v' m2 m& Q; u5 P0 E2.3 外设的初始化函数; R% \6 x' O: f2 y
外设的初始化函数都是由 CubeMx 生成的,因为我们只用 DMA 搬运数据,未使用 DMA 的中断功能,故初始化 DMA 时可将中断配置函数注释。
9 H* A: ?4 t$ X, h0 P/ u4 W; u
7 F8 _& V+ J, @) k+ b$ g
  1. /*** h, X' z  Y9 F! \) x
  2.   * @brief ADC1 Initialization Function
    9 g; ]9 x; b; c8 q5 |3 Y3 D
  3.   * @param None" Y- S+ R5 D7 o3 N" M4 m
  4.   * @retval None2 d- s5 Y3 g1 k  ^9 Z
  5.   */, Z3 G7 L  {3 _
  6. static void MX_ADC1_Init(void)
    / x% C/ L" z$ N) H  l
  7. {
    8 G7 t" F# H2 F. S
  8. # i- U) O  P) w1 q1 R
  9.     /* USER CODE BEGIN ADC1_Init 0 */- I% U5 `  [# U: Z- K! W7 q
  10. ; ~0 |6 i9 P* X0 t! K* |
  11.     /* USER CODE END ADC1_Init 0 */" V2 [; M9 k3 \: k9 c; N: I
  12. $ t$ `+ B' I% A3 e0 l* K# _( x3 j
  13.     ADC_ChannelConfTypeDef sConfig = {0};8 h! ]' c+ b. U" q. ?  p& m
  14. ' ?0 |) Y  p% Y) N8 t1 r0 s9 Z& }, J
  15.     /* USER CODE BEGIN ADC1_Init 1 */
    " f0 k$ a: R# g3 c

  16. : ^6 C  J3 w0 K  k! U
  17.     /* USER CODE END ADC1_Init 1 */
    8 A; p& C3 \$ p) @% e4 l. ?, ~
  18.     /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)" ?, {5 m) N) n" d
  19.     */
    4 h4 `# D* X' q, x2 A' d
  20.     hadc1.Instance = ADC1;
    / k* A, _6 h  \& _; ~; Z# @, I
  21.     hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;* E1 ]* K1 r* @8 S$ {) Q
  22.     hadc1.Init.Resolution = ADC_RESOLUTION_12B;
    4 O+ e3 [4 `0 y& J5 D
  23.     hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;3 U7 \2 e9 x5 a2 v; k- R9 g8 N
  24.     hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
    5 n, I# ~1 N" W( y- u2 I/ h* l6 s
  25.     hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
    5 U9 I  ~+ D* e: w! ^
  26.     hadc1.Init.LowPowerAutoWait = DISABLE;) Q" I* @1 w, D( k1 o
  27.     hadc1.Init.LowPowerAutoPowerOff = DISABLE;
    2 p" |' T1 y- B8 n5 z9 ?
  28.     hadc1.Init.ContinuousConvMode = ENABLE;
    6 W0 [3 |9 C2 u/ ?  O
  29.     hadc1.Init.NbrOfConversion = 2;1 o6 X5 ^; j0 U1 E. E( I. i
  30.     hadc1.Init.DiscontinuousConvMode = DISABLE;
      z( ~7 C7 I# P5 c7 G
  31.     hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;: Z9 r( ^" R% B' o' b9 A
  32.     hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
    / R8 W7 X* V8 |0 N/ \
  33.     hadc1.Init.DMAContinuousRequests = ENABLE;* f0 _7 n: |" s4 R9 d1 X
  34.     hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
    6 J0 \* z& R8 H! g6 _* p% C6 J
  35.     hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_12CYCLES_5;
    ) N/ j( R; L( q  |$ N3 a
  36.     hadc1.Init.SamplingTimeCommon2 = ADC_SAMPLETIME_12CYCLES_5;$ D: M  d! D$ \  ^7 I; E
  37.     hadc1.Init.OversamplingMode = DISABLE;
    , _( D# v/ [, H& {
  38.     hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH;" j! w! T' _6 G7 ]6 C4 D
  39.     if(HAL_ADC_Init(&hadc1) != HAL_OK)2 O2 N3 z7 v- N+ P7 v
  40.     {; X3 Z* I( R) W7 J
  41.         Error_Handler();
    9 H3 o; |% l5 @7 v, i! w
  42.     }
    . }1 I2 c+ T7 v
  43.     /** Configure Regular Channel" I* h9 u/ `5 {+ A( i6 L
  44.     */7 C% n5 d3 O+ R  b
  45.     sConfig.Channel = ADC_CHANNEL_7;6 {/ ~: L% {: ?7 N: I; U: {
  46.     sConfig.Rank = ADC_REGULAR_RANK_1;( f' Y+ @" ~' A# w, f0 V
  47.     sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1;' X1 U& d) j0 s# o! a% p" V* D
  48.     if(HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
    # y: j) D2 E8 K1 J
  49.     {6 v6 y9 Q% ^0 g5 D5 ~, t. x* B$ a
  50.         Error_Handler();
    6 T- s: X6 m9 r1 o' Y
  51.     }
      H+ s+ _. i, `! M( _* h  M! D
  52.     /** Configure Regular Channel5 W% [% f& a4 e/ |
  53.     */' [$ N( T* N1 v: F
  54.     sConfig.Channel = ADC_CHANNEL_8;
    % o4 F' _4 ^: c& e- l' k) Z- _
  55.     sConfig.Rank = ADC_REGULAR_RANK_2;$ Z) B( K+ s2 k. z! z
  56.     sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_2;% d) A) D6 V3 \7 K8 ^3 Y/ v5 R
  57.     if(HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
      X, o. x+ F" C1 g8 Z4 O& @6 |
  58.     {- n& n8 A! c8 P0 B; s
  59.         Error_Handler();4 Z) O, y& m% B$ {" m
  60.     }' |" Z- K" L" I
  61.     /* USER CODE BEGIN ADC1_Init 2 */2 U$ i; o5 I5 d" |* x- i. B/ ~

  62. + M3 P$ U6 C" M1 {  Z
  63.     /* USER CODE END ADC1_Init 2 */3 l4 R5 o4 k2 A5 M& Y9 V

  64. % B. @6 K! U9 V9 g4 D& G9 ~! P
  65. }: w& f- `. W" J4 M7 v

  66. , @9 A$ h+ J& a  D, f; Q9 c2 k
  67. /**3 d/ I) h* I2 L
  68.   * @brief USART1 Initialization Function& s, N" Q) U2 h/ O% |9 [! S6 B
  69.   * @param None- }+ Y" H5 K: _8 i7 Y0 z
  70.   * @retval None4 b- y) U- E; p+ N. Q; I
  71.   */
    # G5 p0 ?5 h2 L! R
  72. static void MX_USART1_UART_Init(void)1 a+ [8 a5 ^% W4 v( V
  73. {
    0 u7 e9 K8 T6 R
  74. ( U+ Q. T) k, y, Y
  75.     /* USER CODE BEGIN USART1_Init 0 */
    1 v* d9 S3 p9 n8 C% U
  76. # R6 x7 \; p% s: L! ?0 ?( L
  77.     /* USER CODE END USART1_Init 0 */4 U2 P# f# B/ h( [1 D) M" v* c

  78. # N. b6 d9 L+ K! b3 K3 @6 Q! H
  79.     /* USER CODE BEGIN USART1_Init 1 */$ l- B6 s& f3 q. T7 G# K9 h

  80. . z9 U5 o4 C1 D9 R7 l
  81.     /* USER CODE END USART1_Init 1 */
    8 X$ X! B. }$ {% }# ~5 y
  82.     huart1.Instance = USART1;5 i4 i: ~& ~* C. I
  83.     huart1.Init.BaudRate = 115200;" S  z9 k  s, y8 O, p6 e. C' `
  84.     huart1.Init.WordLength = UART_WORDLENGTH_8B;
    # A& P" ]6 }. E
  85.     huart1.Init.StopBits = UART_STOPBITS_1;$ K2 F$ m( @5 n8 h0 `5 w: ^
  86.     huart1.Init.Parity = UART_PARITY_NONE;4 J; L' l& @4 N6 Y6 F
  87.     huart1.Init.Mode = UART_MODE_TX_RX;
    , J3 y3 ]" a& B  ^0 a8 {. R
  88.     huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
    - V, U& [0 a4 Z7 c& \$ g  B
  89.     huart1.Init.OverSampling = UART_OVERSAMPLING_16;) i" d2 X. V4 ~5 Q7 T
  90.     huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;  k$ x8 h  A" O2 T' G
  91.     huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;5 n% d& Q. a; `1 u
  92.     huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
    4 e6 v/ g0 a6 x3 W) ~& s
  93.     if(HAL_UART_Init(&huart1) != HAL_OK)
    9 E1 L# Y. c( b& t  O5 E
  94.     {
    . D6 v) H0 @- [6 y7 `
  95.         Error_Handler();
    ; f$ ^2 m. d- O, e% d( s5 \8 A
  96.     }! i) ^% Y) c$ [' ]2 r
  97.     if(HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
    8 H1 o; Y3 i& V. m
  98.     {+ c) s* g3 J) p8 t6 a: G
  99.         Error_Handler();
    - i8 l1 l* n/ m* r9 h
  100.     }
    - @0 |1 P  E. T) F
  101.     if(HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
    7 o" s( @- [" K5 K* C
  102.     {
    5 J; J- F4 T6 \# `$ F
  103.         Error_Handler();& R, }4 t! U. T
  104.     }
    0 w0 V$ R3 e# M& R
  105.     if(HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)! k/ ?7 ?* _5 \' s' p
  106.     {0 Y3 j+ [( g, j8 F) V, F
  107.         Error_Handler();
    ( T5 L5 l4 M4 K
  108.     }
    3 W, ^. t1 e1 \7 X' E
  109.     /* USER CODE BEGIN USART1_Init 2 */
    + F  ]4 L+ W5 Y

  110. , D. `# V/ W: v( K& W9 `$ I* @
  111.     /* USER CODE END USART1_Init 2 */) G7 B& y. J/ M7 ?0 N' i! L. C

  112.   l; |4 K! `& K6 x
  113. }2 x' R1 }% u2 s6 `1 V

  114. ; |- k0 w5 {* [3 r6 G! Z
  115. /**" z3 _/ n) Y/ W8 t
  116.   * Enable DMA controller clock6 _$ b: j% X7 Q9 j
  117.   */
    + m2 ?4 ]0 J3 u7 I# r
  118. static void MX_DMA_Init(void)$ O# C. a4 I6 y5 t# b
  119. {
      ^4 o9 K* ]6 J
  120.   z6 c2 i: |: U# G; O
  121.     /* DMA controller clock enable *// m0 K& ]9 _% t0 N
  122.     __HAL_RCC_DMA1_CLK_ENABLE();
    2 H1 E; j, H4 h. [0 x, E
  123. 4 i7 @+ j! s; }) L* m- i
  124.     /* DMA interrupt init */& s! H5 O: {% V( W1 r8 @. I8 z
  125.     /* DMA1_Channel1_IRQn interrupt configuration */- t9 c1 z/ H( W

  126. 1 R! Z2 h7 V+ _
  127.     //HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0); //未使用中断功能,故注释 ( I1 x% t& q$ O  U% j
  128.     //HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
    % D% o6 c' ]) w2 \

  129.   x6 V7 E' H7 L( U, d. {2 S
  130. }5 m3 [9 A9 A" p0 @

  131. 9 j' T( B* f: A$ Q+ S$ a
  132. /**- `' S+ n) D0 \4 B$ X4 {3 N* m8 i
  133.   * @brief GPIO Initialization Function: b. j, a0 M/ V' n* t
  134.   * @param None
      m' u+ ^/ \0 W7 F
  135.   * @retval None6 }, z4 z: U0 E, R8 J* k
  136.   */
      v( H( u, ^9 i; b0 c  ^$ w
  137. static void MX_GPIO_Init(void)
    ( s$ e# k) L4 \
  138. {! Y, l% g' c$ u1 c4 N' m

  139. 6 H) W  u" {5 A2 C; L7 v
  140.     /* GPIO Ports Clock Enable */
    # e4 d" G; Y8 h
  141.     __HAL_RCC_GPIOB_CLK_ENABLE();, L0 M( `5 q" E% ?
  142.     __HAL_RCC_GPIOA_CLK_ENABLE();
    7 r5 i2 a1 @/ J# t
  143. & ^  d+ h8 ?4 q% a, t$ i& E) W! c# k
  144. }
复制代码

, f! _% ?2 p$ M! Q) P. a; i* O6 l! T1 g  v  i
3. 实验现象4 R# B6 G3 D: c  Y& o
编译并将程序下载到开发板中,连接串口助手并打开;
, S9 ]6 a/ Q3 Y5 y实验现象:每秒打印一次当前两个通道的 ADC 值及换算后的电压.0 E2 _* D' \( D) o% K% F1 R9 N% @! ~
0 h. t/ G! L8 H) E- p, ]7 C& z' H

8 Y3 s; e: e, v% X2 a" N) J- M8 B
2021012908502456.png

9 ~# ~, X% O. n, _9 ~
赞 收藏 评论0 发布时间:2021-11-10 01:00

举报

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