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

【经验分享】STM32G0-NUCLEO测试

[复制链接]
STMCU小助手 发布时间:2021-12-9 10:26
G0的介绍! j5 a, }, [8 ?0 e
G0是ST新推出的系列,我手上的是ST官方送出的STM32G070RB-NUCLEO板,在峰会上有幸获得。拿到这个板子的第一反应是觉得,它跟STM32F103RB长得好像啊,但一看原理图才发现,G0满满的IO口,IO的占用率高了好多.。% c/ t0 ]& j6 H1 N+ \$ ^

7 h9 C2 S. h. |, t3 A
20190721155641195.png
' n8 k% d7 W) a! @* n

) X, G* H' r- j# {/ `: H% ^安装好STM32CubeMX之后,打开一看,IO的复用也很多,片上外设很丰富,对于普通的控制使用,完全没问题。内置有64K的ROM和128K的flash,对于跑一些UCOSIII 或者RT_Thread等RTOS毫无压力,当然了,emwin这种GUI就算了。官板上,板载STlink,可以很方便的下载,且带有串口,连接的是G0的USART2,使用A2,A3复用。板载一个用户LED和一个用户按键,还有一个复位按键。" I' D% o8 N' j$ W8 x  }  L1 L
任何板子都从点灯开始
( \; I8 [0 |+ C' B) n* F4 p+ c3 i9 F
开始建立项目并点亮第一个灯3 f7 s  D4 a! t% M( C
通过配置STM32CubeMX,配置好时钟等外设之后,从原理图上,可以找到LD4接的是A5这个引脚。通过在STM32CubeMX上将该引脚配置为推挽输出模式,点解生成代码即可。STM32CubeMX使用的是HAL库,所以要让LD4交替闪烁,我们使用HAL库上的API
6 m: G5 g& ]% J1 C
  1. HAL_GPIO_TogglePin()
复制代码

. N" c! M0 p' @  Z8 ^8 C使用这个API函数,再使用
! M1 S  A& [1 q6 o
  1. HAL_Delay(500),
复制代码

+ w$ M0 p! P+ r7 `3 n% I则LD4可以以500MS的时间交替闪烁。而这整个过程,只要熟悉了STM32CubeMX,都可以很快建立好工程并实现控制效果。( o# ?- K; h9 z$ P. g' b

: i7 b9 y/ `, |配置ADC
. O5 T" `+ H$ E# ?通过STM32CubeMX,配置A1,A2两个管脚,复用为ADC功能。ADC的配置程序如下:
' t7 o# l5 _( T+ q
7 K; Q! p+ Y2 u" Y0 {
  1. void adc1_init(void)
    3 i( n5 Q; n- ^
  2. {0 f8 h) d1 y7 r" O' s7 G
  3.     GPIO_InitTypeDef GPIO_Init;
    : G% j7 u* v& p  o% \" j. X
  4.     __HAL_RCC_GPIOA_CLK_ENABLE();" v0 d0 W$ d% C9 G  E# o
  5.     __HAL_RCC_ADC_CLK_ENABLE();  //开启ADC时钟# `1 r! c, \& h) x4 g# r

  6. , \8 q8 f7 \9 Y0 [# ?: }' i
  7. GPIO_Init.Pin = GPIO_PIN_0|GPIO_PIN_1;
    4 h; M. d- t# E0 ^) `
  8. GPIO_Init.Mode = GPIO_MODE_ANALOG;" h: l4 n; u; J
  9. GPIO_Init.Pull = GPIO_NOPULL;
    / ~$ c) M- d$ P* C
  10. HAL_GPIO_Init(GPIOA, &GPIO_Init);
    ' ]0 P' h' l1 h) K) ~2 H
  11. 6 w' |+ q7 k  A- Z! ]) j
  12. hadc1.Instance = ADC1;         
    9 U: M9 V4 K" v" N! S
  13. hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;   //4分频 64/4= 16MHz- j1 P/ s* V) H
  14. hadc1.Init.Resolution = ADC_RESOLUTION_12B;             //12位模式  j* ?% ?9 h7 w2 Q' ]
  15. hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;             //右对齐8 V- Z& c2 t0 b" B) p' x4 s
  16. hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;             //ADC扫描模式  非  [( [" M. E/ o3 X4 E
  17. hadc1.Init.EOCSelection = DISABLE;                      //关闭EOC中断/ n! I. y; U: R8 }
  18. hadc1.Init.LowPowerAutoWait = DISABLE;                  //低功耗自动等待模式8 H8 b1 E+ ]: s9 Y0 I
  19. hadc1.Init.LowPowerAutoPowerOff = DISABLE;              //低功耗自动掉电模式3 f3 q6 F, B; O' s9 ?* F
  20. hadc1.Init.ContinuousConvMode = DISABLE;                 //关闭连续转换
    $ x4 m9 c2 c7 s+ i5 `
  21. hadc1.Init.NbrOfConversion = 2;2 _9 P  \- Y/ U. W: ]7 P
  22. hadc1.Init.DiscontinuousConvMode = DISABLE;
    : T8 O8 B8 n, c3 W1 T) g
  23. hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
    % S6 k+ r% }& \' d
  24. hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;; k' ~0 [& A8 x( a6 J
  25. hadc1.Init.DMAContinuousRequests = DISABLE;* _- j- Z7 f8 s, X3 Y$ {5 Z
  26. hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
    - a' Z7 H8 ~" n2 g
  27. hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_1CYCLE_5;
    * {: r9 Z+ P; n! @
  28. hadc1.Init.SamplingTimeCommon2 = ADC_SAMPLETIME_1CYCLE_5;8 H2 c. _+ E2 ?9 l( z. j  x$ \
  29. hadc1.Init.OversamplingMode = DISABLE;, T* g$ c: k% e2 w) @" q' `
  30. hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH;
    ( T9 }6 `' D% ~( z# J
  31. + Q* d3 V) x/ M) t, A6 Y# Z4 F2 h; F
  32. if (HAL_ADC_Init(&hadc1) != HAL_OK)
    ; N2 R6 L) l7 D
  33. {/ x) t1 I3 o+ C( E
  34.       Error_Handler();
    4 H- z2 h& T2 w, r
  35.     }% Q* w: H5 h! T5 t' U4 O) e. e
  36. }
复制代码

- {6 J+ L$ w: U& T' X而ADC的读取函数,另外编写,) D2 d4 T; H* ]- p$ v
! R& Q: D4 E8 o8 ~6 b' }3 z1 B
  1. uint16_t ADC_GET(uint32_t adc_ch) 3 ^! y" m4 O2 `% O! A& j* J3 \
  2. {
    8 u# S5 H* R$ B0 j7 L+ J
  3.     ADC_ChannelConfTypeDef sConfig;
    . I! a' h# k! s) e8 V# `

  4. $ ~, |5 x4 F: h3 Y2 O
  5.     sConfig.Channel = adc_ch;( ]0 D& V( w$ Z! ~
  6.     sConfig.Rank = ADC_REGULAR_RANK_1;
    2 _4 r2 j% l4 l9 m
  7.     sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_2;# h: ^+ [; a& B# x, i

  8. 1 N: p1 W( y  D/ x: v
  9.     HAL_ADC_ConfigChannel(&hadc1, &sConfig);5 b& d- d, f! `3 H0 `

  10. 4 b9 d+ w- D2 A+ r% w" v* E8 q2 }( b
  11.     HAL_ADC_Start(&hadc1);8 v/ z5 [7 U- k! t* X
  12.     HAL_ADC_PollForConversion(&hadc1,10);% O' s* `( U( W8 @  s& ~
  13. ! d% K: d- I  q' r3 T
  14.     return HAL_ADC_GetValue(&hadc1);
    . i: N7 D+ R; T: m! F, ~  D
  15. }
复制代码
! E4 L, D% k: O

; \: b) \& f" I, a最后讲程序烧写进去之后,将会发现一件很神奇的事情,; z6 d+ t/ ^/ b; Y( ^# ~
  \' y4 g: |5 G, `- V+ x
20190729163347613.png
' u) K% X3 P) U; W& q( q; v

6 S0 M8 N& F4 w: R8 {, _会出现这样的情况。原因在于ADC初始化两个通道需要比较长的时间,而慢慢地会回归到正常值。在使用STM32F103ZET6的时候并没有出现这种情况。但是在STM32F429IG上也有过这种情况的出现,因此本虫认为G070RB的ADC功能并没有F1系列的好用。( ^; A/ e5 v3 ]3 {
$ C1 e' I% b% n/ f0 X8 n4 }

* i4 k9 x: B0 C2 V
收藏 评论0 发布时间:2021-12-9 10:26

举报

0个回答

所属标签

相似技术帖

官网相关资源

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