打印
[应用相关]

STM32L4开发学习笔记-如何创建工程

[复制链接]
2282|34
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

版权声明:本文为博主原创**,未经博主允许不得转载。 https://blog.csdn.net/u011976086/article/details/85159987

版本:Keil V5.26.2.0  STM32CubeMX 5.0.0

一、介绍
具我目前了解有2种方式,一种是使用STM32CubeMX,另一种是使用keil mdk创建。使用STM32CubeMX生成的工程最后也需要使用keil or IAR等其它IDE打开使用,当然使用keil mdk 创建STM32L4工程也需要调用STM32CubeMX来生成一些初始化代码。在给F4开发时可以选择“Classic”而不是“STM32CubeMX”创建代码,使用“Classic”则自己创建初始化代码,可使用CMSIS-Driver,没有STM32CubeMX生成的软件框架。keil5使用STM32CubeMX生成代码的软件架构如图所示:





使用特权

评论回复
沙发
xiaoqizi|  楼主 | 2019-6-13 15:59 | 只看该作者
二、在Keil5中使用STM32CubeMX创建新工程

1.创建uVi工程 Project-->New uVision Project...,创建工程名和设置工程路径

2.选择目标设备,以选择STM32L431CBT6设备为例。



使用特权

评论回复
板凳
xiaoqizi|  楼主 | 2019-6-13 16:00 | 只看该作者
3.选择完后会显示 Run-Time Environment Manager 窗口,选择 Device 中的 STM32Cube HAL中的驱动文件,以选择USART为例,勾选后Output窗口会提示缺少相应的依赖,点击Resolve后,系统自己勾选上相应的依赖。

使用特权

评论回复
地板
xiaoqizi|  楼主 | 2019-6-13 16:03 | 只看该作者
4.选择完毕后,点击OK按钮会自动打开一个对话框来启动STM32CubeMX。点击启动按钮



使用特权

评论回复
5
xiaoqizi|  楼主 | 2019-6-13 16:03 | 只看该作者
5.配置相应的引脚和时钟等其它设置



使用特权

评论回复
6
xiaoqizi|  楼主 | 2019-6-13 16:03 | 只看该作者
配置时钟,可以选择HSE或者LSE,时钟树很形象,一看便知

使用特权

评论回复
7
xiaoqizi|  楼主 | 2019-6-13 16:04 | 只看该作者
6.生成代码



使用特权

评论回复
8
xiaoqizi|  楼主 | 2019-6-13 16:05 | 只看该作者
7.等待代码生成结束。Keil会自动显示更新工程窗口,选择OK确认更新



使用特权

评论回复
9
xiaoqizi|  楼主 | 2019-6-13 16:05 | 只看该作者
8.在生成的代码结构中,STM32CubeMX在项目中创建了一个名为“STM32CubeMX:Common Sources”的源组。这个组包含三个文件,其中包含允许插入用户定义的C代码的用户专用部分。



使用特权

评论回复
10
xiaoqizi|  楼主 | 2019-6-13 16:05 | 只看该作者
main.c 文件包含了HAL_Init()函数代码,配置和初始化了System Clock和Usart等使用到的外设。

stm32l4xx_it.c包含生成的中断处理程序。STM32CubeMX NVIC设置中的“Generate IRQ Handler”列允许控制是否应该生成中断处理函数调用。可以选择不生成中断函数。



在对比一些我们之前的Run-Time Environment Manager 窗口,系统为工程自动勾选上了一些相关依赖


使用特权

评论回复
11
xiaoqizi|  楼主 | 2019-6-13 16:06 | 只看该作者
9.接下来编译代码,不带RTOS的裸机工程就创建好了。

使用特权

评论回复
12
xiaoqizi|  楼主 | 2019-6-13 16:06 | 只看该作者
三、使用MDK中的RTOS
MDK中有丰富的中间件,包括RTX、File System、GUI、RL_TCPNet、RL_USB等其它中间件。其中自带的RTX实时操作系统丰富好用。RTX是ARM大佬针对自己Cortex系列内核开发出来的一套RTOS,对其做过特殊优化。中断切换速度是优于其它RTOS的。下面以使用RTX为例如何添加RTOS库到工程中。

在基于上面的裸机工程中,我做一些代码改变。


1.关闭SVC、Pend、SysTick中断。可以在Run-Time Environment Manager 窗口中,打开STM32CubeMX。


使用特权

评论回复
13
xiaoqizi|  楼主 | 2019-6-13 16:07 | 只看该作者
选择NVIC配置,关闭中断代码生成,然后再重新生成代码。注意:STM32CubeMX会弹出打开工程,选择不打开。



使用特权

评论回复
14
xiaoqizi|  楼主 | 2019-6-13 16:07 | 只看该作者

更新工程代码后,可以查看stm32l4xx_it.c文件是否还有SVC、Pend、SysTick中断函数。

在Run-Time Environment Manager 窗口中选择RTOS2



使用特权

评论回复
15
xiaoqizi|  楼主 | 2019-6-13 16:07 | 只看该作者
然后打开main.c文件,在USER CODE 包含里面,包含并添加cmsis_os2.h头。

/* USER CODE BEGIN Includes */

#include "RTE_Components.h"

#ifdef RTE_Compiler_EventRecorder

#include "EventRecorder.h"

#endif

#include "cmsis_os2.h"

extern void app_main (void* arg);

/* USER CODE END Includes */


使用特权

评论回复
16
xiaoqizi|  楼主 | 2019-6-13 16:08 | 只看该作者
更改HAL_GetTick()函数

/* USER CODE BEGIN 0 */

uint32_t HAL_GetTick (void) {

static uint32_t ticks = 0U;

uint32_t i;

if (osKernelGetState () == osKernelRunning) {

return ((uint32_t)osKernelGetTickCount ());

}

/* If Kernel is not running wait approximately 1 ms then increment and return auxiliary tick counter value */

for (i = (SystemCoreClock >> 14U); i > 0U; i--) { __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); }

return ++ticks; }

/* USER CODE END 0 */


使用特权

评论回复
17
xiaoqizi|  楼主 | 2019-6-13 16:08 | 只看该作者
添加一个任务函数

/* USER CODE BEGIN 2 */

#ifdef RTE_Compiler_EventRecorder

EventRecorderInitialize(EventRecordAll, 1);

#endif

SystemCoreClockUpdate();

osKernelInitialize(); // Initialize CMSIS-RTOS

osThreadNew(app_main, NULL, NULL); // Create application main thread

osKernelStart();

/* USER CODE END 2 */


使用特权

评论回复
18
xiaoqizi|  楼主 | 2019-6-13 16:08 | 只看该作者

创建一个app_main.c源文件,添加任务代码



    • #include "cmsis_os2.h" // ::CMSIS:RTOS2







    • void app_main (void const* arg) {







    • while(1) {







    • osDelay(1000);







    • }







    • }




使用特权

评论回复
19
xiaoqizi|  楼主 | 2019-6-13 16:09 | 只看该作者
编译工程,带RTOS的工程就创建好啦!当然也可以使用STM32CubeMX中的FreeRTOS。其实MDK也有FreeRTOS软件包,被封装成了CMSIS_RTOS2,目的是统一RTOS接口,方便用户使用MDK平台更容易迁移代码。另外不建议使用CMSIS-RTOS,此版本Keil不再维护支持。


使用特权

评论回复
20
heimaojingzhang| | 2019-7-5 10:05 | 只看该作者
和其他系列的其实没啥区别吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

85

主题

4090

帖子

3

粉丝