初学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了。