创建项目
STM32CubeMX的方便之一,就是为我们提供了该公司旗下所有类型的芯片,在所有开发平台上对应的默认程序。其中包含了各种设备的驱动准备等程序,开发者只需要关注自己的代码即可。非常适合初学者。
' U# I. k9 S( C* Q4 h! z* C; w
其中STM32CubeMX后,我们会看到欢迎界面。其中包含Open Project和New Project。我们现在要建立新的项目。因此果断选择New Project。由于我们选择的是官方开发板,因此可以直接针对开发板进行选择。点击创建项目界面中的Board Selecter,进入开发板选择模式。
# j& f2 G8 u2 i& d+ m
1 B1 j7 y+ [4 N) [2 Q
如上图所示,依次选择STMicroesectronics,Discovery,STM32L4(和你手中的开发板型号一致)。在下方筛选列表中,双击选择对应的芯片型号,我的芯片是STM32L476。
, R) g0 u! B# V" n$ r, \( G G
双击选择芯片型号后,进入如下图所示的界面。我们只需要通过Project->Generate Code来生成本开发板的标准项目代码即可。
) M$ b: t# w$ E7 N ^2 z
# }; }) U' l" i* j; F7 a" h
点击Project菜单,并选择Generate Code,进入项目代码生成界面。
0 n1 L$ W N8 I0 v9 K% |* ^
0 t. n2 L5 m$ \% Z- Q
输入项目名(第一行),选择项目保存目录(第二行),然后在第四行IDE选择中,选择自己使用的开发工具。由于我使用的是MDK5.0,因此,如下图所示进行了选择。点击OK即可。
0 q9 u5 ]1 l& F! B' o5 v. j, H1 u
打开项目并输入代码
在硬盘中,找到刚才生成的代码,在MDK-ARM目录中,双击uvprojx文件,打开MDK。然后在项目目录中的Inc目录,将main.h拖进MDK中打开。并编辑代码。
9 |2 d% H8 h# C3 Y& `
我们需要在这里定义一个控制LED的宏。如下图所示:
代码如下:
6 |$ T, D; q7 n$ i4 j& y
STM32CubeMX已经为我们生成好了对开发板进行初始化的代码,并做好了
/********************************/
#ifndef __LED_H
#define __LED_H
#define ON 1
#define OFF 0
#define LED(STA) (STA)?HAL_GPIO_WritePin(GPIOB, LD_R_Pin|M3V3_REG_ON_Pin,GPIO_PIN_SET):HAL_GPIO_WritePin(GPIOB, LD_R_Pin|M3V3_REG_ON_Pin,GPIO_PIN_RESET)
#endif
/********************************/
, h# g: h# E9 W" d& Q# h
6 F& C! ^' v: z! x5 w J2 ^4 |
通过宏,我们定义了一个简单的三元运算,通过STA来判断LED灯的开启状态,当STA为true时,开启LED灯。否则关闭LED灯。
# P0 ~( N. }1 {5 O
, n& u$ {4 W8 F! H2 R" S' D8 ?6 I
然后通过编辑器找到并打开Application/User中的main.c,编写逻辑代码。找到main函数,我们可以看到生成代码时,已经通过HAL_Init(); SystemClock_Config(); MX_GPIO_Init();三个方法,帮我们初始化好了开发板。我们只需要在后面来编写自己的逻辑代码即可。
5 _5 R. P) l$ p) D
/********************************/# W$ _9 q' A! X @2 @, ~ H. E, H2 {
uint8_t sta = ON;
uint16_t delay = 5000;
while (1)
{
LED(sta); // 设置LED状态
sta =!sta;
HAL_Delay(delay); // 等待delay秒
}
/********************************/
$ O! Y+ @6 V9 \7 Q5 j) |
如上代码所示,我们每隔5秒钟修改一次LED的状态。而主程序在无限循环。因此,LED灯会每个5秒点亮一次,并持续5秒后关闭。
4 m: V& R) ?) U; w5 q0 g" G. L# v