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

详细讲解STM32G4的软件工具和环境搭建

[复制链接]
gaosmile 发布时间:2020-3-4 16:57
一、开发环境相关软件包) |+ R! `! j. m; u9 _
STM32G4系列芯片是ST最新的推出的产品,与芯片、板卡配套的软件开发工具还有待逐步完善。目前我手边能获取到的软件开发环境的有STM32CubeIDE 1.1.0、KEIL 以及AC6。这几款开发工具都做了更新,各自的便利性对比如下,各位根据自己现有的系统环境进行相关程序的下载和搭建:" y+ Q7 C  G+ ~# M
1、 首先说STM32CubeIDE,最新的版本更新到1.1.0

/ ?/ }: t6 v- Z2 t  n5 P
www.ST.com 官网的Search中输入STM32CubeIDE,在“Tools & Software”,选择“STM32CubeIDE”,
微信图片_20200304164424.png

% M. @" Y  A8 M7 S4 k8 Z; X
进入下载页面。
微信图片_20200304164432.png

8 x7 a$ {: d% p2 S8 {, d' [
根据所使用的操作系统选择下载程序。
0 [( c: Z. j. Z6 C
微信图片_20200304164450.png

, _) e) i: \) z* c
这里分别有Debian系、通用Linux、以及RPM包的系统安装文件,也有macOS、Windows下的安装文件,根据各自所需的环境下载对应包。工具下载完毕后分别进行安装,安装界面略过。

7 U  z6 Q" f% J3 M4 }0 B
2、 如果是KEIL工具,就需要到 KEIL官网更新对应的工具开发包,下载地址链接:http://keilpack.azureedge.net/pack/Keil.STM32G4xx_DFP.1.1.0.pack ,如果下载太慢可以用其它下载工具进行下载,另外其它包如果缺失可以在STMCU.org论坛中,[Keil下载链接] 从keil的包下载非常慢,清单更新2019-10-28 帖子里根据对应地址下载最新的Keil包。
% P; d3 g7 @8 T6 H8 Q
3、Workbench for STM32(AC6) 是在Eclipse的开发环境,在官网http://www.openstm32.org 下载System Workbench for STM32(需要注册),下载界面如下:
微信图片_20200304164457.png

4 t  J# Y* w8 y. E" W1 l* [
目前最新的版本是:April 12, 2019 at 16:41:04 的V2.9。
" o# m/ Z- `) X& e6 g/ g' _* S! p

6 ?* V/ J: T  l  @% W8 x- Y
微信图片_20200304164505.jpg
  o) S" W( L8 N/ {# a" \, E
4、ST-LINK固件更新:
9 d$ t) x; g0 `- m' s( _
STM32G431RB开发板在将ST-LINK的主控芯片升级为STM32F723IEK6后,相应的ST-LINK固件也更新称为ST-LINK-V3E,ST官方提供的stsw-link007也做了相应升级,通过USB接口可直接升级板载固件。
' A# b2 s7 v/ Y0 k8 I$ b6 Q( U
该项目地址:http://www.st.com/en/development-tools/stsw-link007.html
6 b4 I$ H0 g  a8 ^9 W% i! y
二、软件的调试和Helloworld代码2 r; d  ~! ]/ i
以上几款软件相比之下,集成度最高还是STM32CubeIDE,插件的使用也是最新的;keil的包管理虽然方便但其在线更新比较慢,要下载对应的包手工升级,确实比较麻烦;Workbench for STM32(AC6)最后的版本更新在2019年4月,最新的G4xx开发包V 1.1.0的版本并不支持。  ], O, D! q, o+ ?
这里先用STM32CubeIDE开发HelloWorld验证一下相关包和软硬件环境,步骤如下:2 o) h" l/ H  [4 j' s
1、新建一个STM32 Project工程, New>>>>选择STM32 Project;
微信图片_20200304164513.png
  v* H/ s. E9 W7 l7 K8 @0 X
2、在系统Download MCU的列表清单后,进入CubeMX的页面;- G# b& N1 f+ r! i9 e$ t& A# G
微信图片_20200304164520.png
) j  l" M9 @* p, _9 G3 o1 Y
3、在CubeMX初始页面选择工程所需的MCU型号后,点击下一步:
/ Q2 |1 |- u% f% d
微信图片_20200304164527.jpg

, \3 \. {" C8 d6 @% e
4、输入工程名称:HelloWorld,后点击下一步:$ g0 Z1 p' n5 j7 U* b! F- V4 k6 t3 c6 ]
微信图片_20200304164534.png
注意:这里红框部分,如果没有自动找到对应版本的固件包,需要下载或手工制定固件包的下载目录(根据各自CubeMX的安装环境不同而不同):# R! f/ V2 _. O0 k* V* M0 e
微信图片_20200304164542.png
$ ]9 q7 q  ~& |2 O1 @3 x1 {2 T% u
5、在系统自动创建成功后,在打开关联透视图提示菜单中,点击“Yes”,带有Helloworld.ioc文件的STM32工程就建好了:) F3 A+ V6 S3 H% O
微信图片_20200304164549.png
(关联菜单)
7 a3 P4 u. O# W) v+ i( V. _
微信图片_20200304164555.png
(项目初始界面)! M. o' W0 I8 L: \  q
6、点击Helloworld.ioc后,能看到完美的嵌入到STM32CubeIDE的窗体中的CubeMX页面:
微信图片_20200304164602.jpg
5 v" e$ o- O! {9 T0 a7 g
7、选择所需功能组件的顺序如下:6 I% G! \! d# y( A4 O
1)RCC,选择晶振
微信图片_20200304164609.png
. M$ i& X5 E0 z0 E, K: O, V
2)因板子带时钟晶振,激活RTC时钟功能
微信图片_20200304164615.png

, E3 v$ b9 @' H. J' {  `- k" K
3)根据电路图得知,与ST-LINK3芯片关联的VCP(虚拟串口)是LPUART1低功耗串口1;
微信图片_20200304164622.png
0 `- l8 G* A7 s& L  u8 \+ _9 m( L
4)选择MCU对应的引脚PIN功能,如下图:引脚功能设置要参考Nucleo-G431RB的原理图:
微信图片_20200304164629.png
微信图片_20200304164635.png
5 P/ }; ?3 j6 N5 V$ \& j( [
微信图片_20200304164642.png
/ t% j, l( z, \: A$ N6 R( r
几个重要外设的原理图如上图,芯片的引脚功能选择入下图绿色部分:
: l9 y2 R/ u. {5 }9 }: a' `; Z, h% V5 h
微信图片_20200304164648.png
$ J- g1 a% P9 b. _/ r3 P: n- A1 \
5)相关的功能设置,如下:a、GPIO设置参数:
微信图片_20200304164655.png
4 Y( b1 ?, o5 e9 b) r$ [; n
b、串口参数设置:
微信图片_20200304164701.png
, V9 H' _' r, a$ b. @
c、RCC设置:
微信图片_20200304164707.png

! z) G3 a# {5 C. Y, b/ D. l
d、ST-LINK接口配置:
微信图片_20200304164714.png

  h; a( m5 m. F% ]/ l# s
e、中断配置:9 d; x, q  b, O/ L; f# x- _! z
微信图片_20200304164720.png
! m# L, e$ n& ]0 d4 h9 @# i( B. v
f、RTC时钟配置为LSE:
微信图片_20200304164725.png

: r. P7 D/ F) w3 W0 E1 c, n$ S
g、主频配置最大的170MHz
微信图片_20200304164732.png
# z: z2 t% ~- y; y3 g0 s7 r! ]
h、项目输出的内容一览,保存或关闭窗体,会自动生成相应代码
微信图片_20200304164739.png
6、在以下程序文件里添加代码:
微信图片_20200304164746.png
! ?4 n' B2 @! J6 b
main.h 添加的代码内容如下:
  • 6 p! ~+ x' i4 s+ G7 R* G! X
/* USER CODE BEGIN EM *///非中断延时枚举//分别延迟512、256、128、64、32、16、8、4、2、1、0enum Enum_Delay {  Delay_512 = 512,  Delay_256 = 256,  Delay_128 = 128,  Delay_64 = 64,  Delay_32 = 32,  Delay_16 = 16,  Delay_8 = 8,  Delay_4 = 4,  Delay_2 = 2,  Delay_1 = 1,  Delay_0 = 0};/* USER CODE END EM */……/* USER CODE BEGIN Private defines */#define ON   1   //定义ON#define OFF  0   //定义OFF
* ]+ g$ b* b1 e% q+ d
//设置亮灯和关
. u8 Z. e7 X! F: i! a; E1 y1 Q
#define LED(STA)  (STA)?HAL_GPIO_WritePin(LD2_GPIO_Port,LD2_Pin,GPIO_PIN_SET):HAL_GPIO_WritePin(LD2_GPIO_Port,LD2_Pin,GPIO_PIN_RESET)//闪亮LED#define ToggleLED  HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);/* USER CODE END Private defines */……
▲ 左右移动,查看完整代码

0 A% {: a! L$ ]% _; }' o5 k# ?
main.c

  • : C5 h! |9 X$ W0 x
/* USER CODE BEGIN PFP */void KeyPass(void);/* USER CODE END PFP *//* USER CODE BEGIN 0 */static enum Enum_Delay delay = Delay_512;//static uint32_t EXTI_Times = 0;volatile FunctionalState EXTI_State = DISABLE;/* USER CODE END 0 */……..
( R/ j7 c7 e. W( k& Q% i
int main(void){  /* USER CODE BEGIN 1 */  uint8_t sta = ON;  /* USER CODE END 1 */……% t3 T* V% ]" ]3 F! a+ {4 K7 J
/* Infinite loop */  /* USER CODE BEGIN WHILE */while (1) {printf("Hello World!!! Delay is %d\n",delay);    /* USER CODE END WHILE *//* USER CODE BEGIN 3 */LED(sta);  sta = !sta;  HAL_Delay(delay);}  /* USER CODE END 3 */……/* USER CODE BEGIN 4 */void KeyPass(void) {    switch (delay) {  case Delay_512: {    delay = Delay_256;    break;  case Delay_256: {    //延时重新循环512-->256-->128....1-->0-->512 循环  其余    delay = Delay_512;    break;  }    }}/** * GPIO中断回调函数 * @param GPIO_Pin */void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {    KeyPass();  }}#ifdef __GNUC__/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf * set to 'Yes') calls __io_putchar() */#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)#else#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)#endif /* __GNUC__ */+ `8 c0 H1 P+ Q% R9 U6 S' u
/** * @brief Retargets the C library printf function to the USART. * @param None * @retval None */PUTCHAR_PROTOTYPE{  /* Place your implementation of fputc here */  /* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */  HAL_UART_Transmit(&hlpuart1, (uint8_t *)&ch, 1, 0xFFFF);  return ch;}/* USER CODE END 4 */
▲ 左右移动,查看完整代码
7 P  T/ p+ ?# R3 h
编译后,连接开发板,在STM32CubeIDE中用Debug方式将代码下载到Nucleo-G431RB开发板中。: |. J/ w# q% r7 D" W
微信图片_20200304164753.png
9 v' F( e# G" ^- r
打开一个串口调试工具,打开串口后,能在串口工具中看见以下内容,开发板LD2灯伴随着串口信息跳动一闪一闪,当用户按键时LD2的闪烁频率进行转换,串口工具中跳动得数值也随着变化。
4 ^1 S* [  q9 H  I3 v0 W9 y+ m" @. h
8 h/ G% G9 y6 \3 x2 {  D5 ^; i) C
微信图片_20200304164759.png
(串口显示)
0 N- ~9 c" f& u  [6 }) n. v0 W+ e
微信图片_20200304164805.jpg 微信图片_20200304164812.jpg
(LED2交替闪烁)
$ F/ y+ Z9 I0 Z
开发环境和板子的搭配验证完成,实现可控、可编辑的,为后面的试验提供基础支撑。
  M! A) D1 N+ o% K0 C% f4 V# u) j
收藏 评论3 发布时间:2020-3-4 16:57

举报

3个回答
sagu 回答时间:2020-10-14 21:12:31
谢谢lz!
flyingtin 回答时间:2022-6-5 20:35:30
代码显示不全,请问下有附件可以下载嘛?
- M8 E, _" x) E
were are 回答时间:2024-5-17 22:19:36

flyingtin 发表于 2022-6-5 20:35
代码显示不全,请问下有附件可以下载嘛?

STM32G4板卡分享-软件工具及环境搭建 - 知乎 (zhihu.com)

原文

所属标签

相似分享

官网相关资源

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