创建项目
STM32CubeMX的方便之一,就是为我们提供了该公司旗下所有类型的芯片,在所有开发平台上对应的默认程序。其中包含了各种设备的驱动准备等程序,开发者只需要关注自己的代码即可。非常适合初学者。
! c: ^6 J7 V7 ]
其中STM32CubeMX后,我们会看到欢迎界面。其中包含Open Project和New Project。我们现在要建立新的项目。因此果断选择New Project。由于我们选择的是官方开发板,因此可以直接针对开发板进行选择。点击创建项目界面中的Board Selecter,进入开发板选择模式。
7 y/ U1 d! _2 `$ X
5 _' E. t8 j0 J# }4 f# b3 A3 Z5 o5 H
如上图所示,依次选择STMicroesectronics,Discovery,STM32L4(和你手中的开发板型号一致)。在下方筛选列表中,双击选择对应的芯片型号,我的芯片是STM32L476。
5 K0 [- i! N" `8 [
双击选择芯片型号后,进入如下图所示的界面。我们只需要通过Project->Generate Code来生成本开发板的标准项目代码即可。
' T" L- E+ T* x ?
9 R, S/ p6 T8 J' S1 h9 ]
点击Project菜单,并选择Generate Code,进入项目代码生成界面。
0 _* N( d; ]6 |9 y: B& c
* C3 a+ a9 e0 r) v* e0 n
输入项目名(第一行),选择项目保存目录(第二行),然后在第四行IDE选择中,选择自己使用的开发工具。由于我使用的是MDK5.0,因此,如下图所示进行了选择。点击OK即可。
8 z! d8 y% m+ p" Q( B
打开项目并输入代码
在硬盘中,找到刚才生成的代码,在MDK-ARM目录中,双击uvprojx文件,打开MDK。然后在项目目录中的Inc目录,将main.h拖进MDK中打开。并编辑代码。
" D, W* O9 Y+ \6 S7 g1 E
我们需要在这里定义一个控制LED的宏。如下图所示:
代码如下:
+ g+ V* t8 a" v( W7 H( @/ C
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
/********************************/
6 a' Q0 ?$ R0 J
6 ^! k5 h0 b7 J( Y9 t
通过宏,我们定义了一个简单的三元运算,通过STA来判断LED灯的开启状态,当STA为true时,开启LED灯。否则关闭LED灯。
: I- V, r% v' ~. V0 s+ }) I- f/ t8 ~
3 j- _4 N1 `& n. n* V# U
然后通过编辑器找到并打开Application/User中的main.c,编写逻辑代码。找到main函数,我们可以看到生成代码时,已经通过HAL_Init(); SystemClock_Config(); MX_GPIO_Init();三个方法,帮我们初始化好了开发板。我们只需要在后面来编写自己的逻辑代码即可。
- E1 I9 q6 `) C; q6 ?
/********************************/
- O7 U4 |* }. E2 ^* {
uint8_t sta = ON;
uint16_t delay = 5000;
while (1)
{
LED(sta); // 设置LED状态
sta =!sta;
HAL_Delay(delay); // 等待delay秒
}
/********************************/
5 b" a; I$ p; A& |
如上代码所示,我们每隔5秒钟修改一次LED的状态。而主程序在无限循环。因此,LED灯会每个5秒点亮一次,并持续5秒后关闭。
, s8 ~0 v7 V0 F7 E$ D* Q: B