初学STM32CubeIDE

 

一、关于安装

安装已经有好多人说过了,我就不重复。

 

二、认识界面

初初打开软件,自动打开“Information Center”就是信息中心。我们点击“Read STM32CubeIDE Documentation”,再点击“STM32CubeIDE Qiuck Start Guide”就是快速启动手册。

 

简单介绍一下。

Note: workspace and project names must contain only ascii characters. This is also valid for the path to the workspace. 

 

注意:项目要用ascii字节。工作空间名也要用ascii字节。

工作空间就是一个文件夹,用于作为STM32CubeIDE的存放暂时文件和记录文件的地方。

 

三、建工程

工程不用建在工作空间中。我喜欢各软件的工程集中放一起,再区分一个个软件专用的工程文件夹。

菜单“File”-“New”-“STM32 Project”或者“Start new STM32 project”链接,则启动新建工程。

工程的第一步:选择芯片,可以通过左则输入型号,快速选出;或者通过下拉框的过滤,最后选定型号。

工程的第二步:项目的名字,还的选项。名字不要用中文,要用ascii。选项默认就可以,用C语言,输入单片机程序。

工程的第三步:这里我也看不明白,点“Finish”(完成)就好了。

 

建工程前和后比较卡,这是在下载。

 

四、设定时基

看看电路图,我发现晶振两块,一块是8MHz,另一块是32.768KHz。那么对应高速时钟是来自晶振8MHz。低速时钟是来自晶振32.768KHz。

那么我点开“System Core”,选中“RCC”。


HSE 选“Crystal/Ceramic Resonator”(晶振)。

LSE 也选“Crystal/Ceramic Resonator”


“BYPASS Clock Source”意思是指线输入路时钟源。

 

我再点击上栏“Clock Configuration”时钟配置。


LSE的连接Input frequency可以填入32.768

HSE的连接Input frequency可以填入8

HCLK填入72,跳出Clock Wizard,这是时钟向导,是否自动调整其它时钟源。点“OK”。


 

五、设定GPIO

点击上栏“Pinout&Configuration”。

看看电路图,我要找LED灯,我发现都上拉的。那么GPIO设成推挽,初值为高电平就好了。

我的电路图中,LED连接电阻再接到GPIO。LED2接PE5,LED3接PB5。那么我接芯片图放大(滚轮),移动(抓取),找GPIO。在PE5点击GPIO_Output。在PB5点击GPIO_Output。

 

再到System Core下拉项,点击GPIO。那么Configuration下面就有GPIO了。点击分隔条,让GPIO Mode and Configuation栏放大。再点表单项。


LED2接PE5
PE5设置GPIO_Output:
GPIO output level = High
GPIO mode = Output Push Pull (推挽)
GPIO Pull-up/Pull-down = No pull-up and no pull-down (不上拉,也不下拉)
Maximum output speed = Low (低速转换电平)
User Label = LED2



Label很好用,代码里会用Label显示。

 

GPIO Pull-up/Pull-down设成开漏 (Output Open Drain) 也可以。

Maximum output speed是开关的速度,对于LED这个速度不用太快,所以慢也可以,快也可以。

 

好了,我只要做一个闪灯的Hellow World。

 

顺便说说按扭。


上拉的按扭接PA0,设置

PA0置成GPIO_Input

GPIO mode = Input mode

GPIO Pull-up/Pull-down = Pull-down (下拉)

User Label = Key0

 

下拉的按扭接PE4,设置

PE4置成GPIO_Input

GPIO mode = Input mode

GPIO Pull-up/Pull-down = Pull-up (上拉)

User Label = Key1


点击保存。则提问,是否生成代码,点“Yes”。

注意,如果已经在main.c和main.h写了自己的代码,会被擦掉。所以要备份好。

最好是设好脚就不去改了。否则要备份。

 

六、代码

在“Project Explorer”下点开“Src”看到main.c,双击打开它。

这已经多了两行:

void SystemClock_Config(void);

static void MX_GPIO_Init(void);

下面也有它们的函数体,都是自动生成的。

我们自己加入代码,要在“USER CODE”

 

 

在/* USER CODE BEGIN PFP */和/* USER CODE END PFP */之间加入函数定义体。

在/* USER CODE BEGIN 0 */和/* USER CODE END 0 */之间加入函数定义体。

 

例如:

/* USER CODE BEGIN PFP */
void TurnOnLED(int flag);
void TurnOffLED(int flag);
/* USER CODE END PFP */
 
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void TurnOnLED(int flag)
{
switch(flag)
{
case 2:
HAL_GPIO_WritePin(LED2_GPIO_Port, LED0_Pin, GPIO_PIN_RESET);
break;
case 3:
HAL_GPIO_WritePin(LED3_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);
break;
}
}
 
void TurnOffLED(int flag)
{
switch(flag)
{
case 2:
HAL_GPIO_WritePin(LED2_GPIO_Port, LED0_Pin, GPIO_PIN_SET);
break;
case 3:
HAL_GPIO_WritePin(LED3_GPIO_Port, LED1_Pin, GPIO_PIN_SET);
break;
}
}
/* USER CODE END 0 */

节选,主程序中。。。。。。

 

while (1)
  {
/* USER CODE END WHILE */
 
/* USER CODE BEGIN 3 */
  TurnOnLED(2);
  HAL_Delay(300);
  TurnOffLED(2);
 
  HAL_Delay(1000);
 
  TurnOnLED(3);
  HAL_Delay(300);
  TurnOffLED(3);
 
  HAL_Delay(1000);
  }
/* USER CODE END 3 */

好啦代码写好,

 

七、Debug和Release

默认是Debug,我想想直接Release好了。我上机试。

点击菜单“Project”-“Build Configuration”-“Set Active”-“Release”

再点编译:“Project”-“Build Project”

 

问题来了,STM32CubeIDE会生成ELF。而不是HEX

 

八、Elf to Hex

用Keil的工具,在Keil\ARM\ARMCC\bin\fromelf.exe

我要建一个bat

代码:(输入LED.elf,输出LED.hex)


fromelf.exe  --i32combined --output="LED.hex" "LED.elf"
pause

这就行了,不过fromelf.exe不能拷走,拷贝就没用了。网上有另一个工具,可以搜一搜“Elf to Hex”

 

LED.elf拷到上面说的方件夹,改好bat文件的输入输出名称。保存,关闭。

双击这个bat,就生成hex了。