目录
一、引言
二、新建工程
1、开始
2、芯片选型
3、配置主界面
4、引脚分配以及外设配置
4.1 RCC配置
4.2 调试接口配置
4.3 GPIO配置
5、时钟树的配置
6、工程管理
6.1 工程设置
6.2 代码生成设置
6.3 高级设置
7、生成工程
三、软件设计
四、结束语
硬件学习,始终是逃不开点灯。在这里,将以STM32L475VET6为例,创建一个STM32CubeMX的新工程文件,并且实现点亮LED。
如上一节《【STM32】STM32CubeMX软件的安装》所示,在安装完成STM32CubeMX软件之后,即可开始我们的创作。
首先启动STM32CubeMX软件,进入以下界面
新建工程我们一般选择基于芯片来创建新工程,当然如果你有官方的开发板也可以使用基于开发板来新建。
或者也可以直接选择File->New Project 来新建工程。
在芯片选择界面,CubemX给我们提供了很多查找方式,一般我们直接在搜索框选择即可。如果你对芯片比较熟悉,也可以根据筛选条件来一步一步选择。如下图所示,这里我选择了与我手上板子一样的STM32L475VETx,双击之后进入工程配置主界面。
配置主界面每一部分的功能如下所示
下图为引脚分配以及外设配置的主界面
类别栏
① System Core:用于配置GPIO、时钟源、中断系统以及系统相关的外设
② Analog:用于配置模/数和数/模转换外设
③ Timers:用于配置定时器和实时时钟外设
④ Connectivity:用于配置l2C、SPI和UART等连接外设
⑤ Multimedia:用于配置l2S等音频数据传输外设
⑥ Computing:用于配置CRC校验外设
⑦ Middleware:用于配置RTOS和GUI等中间件
需要配置RCC才能使用外部时钟源。我们选择RCC选项,
如上图所示,RCC配置界面有六个配置项,
High Speed Clock(HSE)用来配置 HSE
Low Speed Clock(LSE)用来配置 LSE
Master Clock Output 用来选择是否使能 MCO 引脚时钟输出
LSCO Clock Output 用来选择是否使能将低速时钟输出到外部 LSCO
SAI1 Extern Clock 用来配置是否使能外部 SAI1 时钟
SAI2 Extern Clock 用来配置是否使能外部 SAI2 时钟
因为这里我们只使用到 HSE,所以我们设置选项 High Speed Clock(HSE)的值为Crystal/Ceramic Resonator(使用晶振/陶瓷振荡器)即可。Bypass ClockSource (旁路时钟源),就是不使用使用晶振/陶瓷振荡器,直接通过外部提供一个可靠的 4-26MHz 时钟作为 HSE。
配置好后我们发现右边芯片引脚图相应的引脚就会由灰色变成绿色,表示已经占用。
我们选择SYS选项,因为我的板子上面是串行调试接口,所以这里选择串行总线。
在Timebase Source选项中设置的是与HAL 库延时函数 HAL_Delay关联的定时器。这里选择默认的即可。
因为我的板子上面的RGB灯分别接在了PE7、PE8、PE9。这里以PE7为例,所以在芯片引脚图上,找到PE7引脚,鼠标左键单击PE7,选择GPIO_Output
配置完成之后如下图所示
当然我们也可以给每个GPIO设置其引脚名称,右键PE7,选择Enter User Laber即可输入自定义引脚名称
设置完如下图所示
然后在左边的外设类别中选中GPIO,进行GPIO参数设置
在原理图上,LED为低电平时点亮,所以我设置GPIO初始电平为高电平,引脚模式位推挽输出,无上/下拉电阻,引脚速度低等。
至此,该工程的引脚以及外设配置已经完成,接下来进行时钟树的配置。
点击 Clock Configuration 选项卡即可进入时钟系统配置栏。
进入 Clock Configuration 配置栏之后可以看到,界面展现一个完整的 STM32L4 时钟系统框图。从这个时钟树配置图可以看出,配置的主要是外部晶振大小,分频系数,倍频系数以及选择器。在我们配置的工程中,时钟值会动态更新,如果某个时钟值在配置过程中超过允许值,那么相应的选项框会红色提示。
把系统时钟配置分为七个步骤,分别用标号①~⑦表示,详细过程为:
① 时钟源参数设置:HSE 或者 HSI 配置。这里我们选择 HSE 为时钟源,所以我们之前必须在 RCC 配置中我们开启 HSE。
② 时钟源选择:HSE、HSI 还是 MSI。这里我们配置选择器选择 HSE 即可。
③ PLL 分频系数 M 配置。分频系数 M 我们设置为 1。
④ 主 PLL 倍频系数 N 配置。倍频系数 N 我们设置为 20。
⑤ 主 PLL 分频系数 R 配置。分频系数 R 我们配置为 2。
⑥ 系统时钟时钟源选择:PLL,HSI,HSE 还是 MSI。这里毫无疑问,我们选择 PLL,选择器选择 PLLCLK 即可。
⑦ 经过上面配置以后此时 SYSCLK=80Mhz。经过上面的 7 个步骤,就会生成标准的 80MHz 系统时钟。AHB,APB1 和 APB2 总线时钟以及 Systick 时钟的最终来源都是系统时钟 SYSCLK。接下来我们只需要配置 AHB,APB1、APB2 和 Systick 的分频系数,就可以完全实现函数 SystemClock_Config 配置的时钟系统。
配置完成的时钟树如下图所示
如果在后续的工程中,对于低功耗有需求的,可以降低时钟频率来减少功耗,也可以改变分频/倍频系数来改变相应总线的时钟频率。
我们选择Project Manager,进入工程管理界面。
首先在Project选项卡中配置,这里主要设置工程名称、路径以及编译器等。
注:工程名称以及工程目录不允许出现中文,否则会报错。
选择Code Generator进入代码生成配置界面
在全部配置完成之后,点击即可生成工程文件,在生成完成之后出现下图提示界面。
我们选择Open Project即可直接打开工程文件。
因为我们在GPIO的配置中,设置的是GPIO初始电平为高电平,也就是LED默认为关闭状态,我们可以编写程序,使用HAL库的Delay函数来实现LED闪烁功能。
打开工程之后,打开main.c,在while(1)中编写程序,如下图所示
注意:如果由CubeMX所生成的工程,我们编写自己的代码需要在 USER CODE 提示块里面,如下所示
/* USER CODE BEGIN 3 */
/* USER CODE END 3 */
这样的话,后续我们需要在CubeMX软件中修改配置并生成工程,重新生成的工程不会把用户代码块里面的程序覆盖掉,而不在用户代码块中的代码则会直接覆盖掉。
至此,点灯环节已经完成,关于HAL库中GPIO操作的函数请参考《【STM32】HAL库开发之GPIO有关的函数》。
(未完待续......)