基于HAL库的学习

1.代码的移植

首先,新建一个文件夹,命名为01Template,在此文件夹下新建5个文件夹,分别命名为:CORE,HALLIB,OBJ,SYSTEM,USER。

然后,针对部分文件夹进行代码移植:(1)针对CORE,存放启动文件和关键头文件(图1.1.1);(2)针对HALLIB,存放HAL库的全部代码(图1.1.2),当然也可以只存放使用到的部分代码,比如使用最简单的跑马灯,可以只放stm32l4xx_hal_gpio.c(和.h);(3)针对OBJ,这里不移植代码,用于Keil;(4)针对SYSTEM,放置一些系统代码,比如时钟初始化、串口打印等(图1.1.3);(5)针对USER,放置非常关键的头文件的main函数(图1.1.4)

图1.1.1 CORE            图1.1.2 HALLIB             图1.1.3 SYSTEM          图1.1.4 USER

当然,这部分代码以后新建工程时可以直接copy使用了

2.在Keil中新建工程

首先,点击菜单Project –>New Uvision Project,然后将目录定位到刚才建立的文件夹01Template之下的USER之下,工程取名为Template 之后点击保存,工程文件就都保存到USER文件夹下面了。

然后,选择芯片STM32L496VETx,关闭Manage Run-Time Environment对话框,USER目录下将新增3个文件夹和3个文件(图1.2.1),其中有两个空白文件夹可以删除,因为它们的作用将被上文的OBJ代替。

3.将.c和.h文件加入工程

3.1:新建文件夹

首先,右键Target1,选择Manage Project Items,完成改名和新建文件夹的任务(图1.3.1)。注意,不需要建立OBJ的文件夹。

3.2:导入.c和.h文件

针对HALLIB,我们只需要导入.c文件。首先,右键01Template,选择Manage Project Items,选择HALLIB,点击Add Files,进入\HALLIB\STM32L4xx_HAL_Driver\Src,将所有的.c文件导入工程(图1.3.2)。当然,也可以只导入部分所需的文件。

针对CORE,这里我们需要导入CORE目录下的全部文件,点击Add Files,进入CORE目录,文件类型选All Files,导入全部文件(图1.3.3),含.h和.s文件。

针对USER和SYSTEM,都是只导入.c文件,见图1.3.4和图1.3.5。

图1.3.2 HALLIB                                                                          图1.3.3 CORE

图1.3.4 SYSTEM                                                                     图1.3.5 USER

3.3:设置头文件存放路径

首先,依次点击“魔法棒”,“C/C++”,Include path(头文件路径)后的三个点“…”,在弹出的页面点击虚线正方形“

”,三个点“…”。选取头文件所在的最深入路径(图1.3.6)。

                图1.3.7 全局宏定义                                              图1.3.6 头文件路径     

3.4:其他设置

添加全局宏定义:首先,依次点击“魔法棒”,“C/C++,”,在Define框键入“USE_HAL_DRIVER,STM32L496xx”(图1.3.7),注意不要输入双引号。

添加c99标准:首先,依次点击“魔法棒”,“C/C++,”,在此页面勾选“c99 Mode”。

处理烧录问题中的“Cortex-M4”:首先,依次点击“魔法棒”,“Debug”ST-LINK后的“settings”,“Flash Download”,勾选“Reset and Run。

4.工程编译

首先,使用OBJ存放编译后的中间文件,这一步我们依次点击“魔法棒”,“Output”“Select folder for objects…”,选择OBJ文件夹。

然后,在“Output”界面,(1)勾选“Debug Information”和“Create HEX File”,(2)取消勾选“Brows Information”。

接下来,将USER中的main.c的内容覆盖为:

#include "sys.h"
#include "delay.h"
#include "usart.h"
void Delay(__IO uint32_t nCount);
void Delay(__IO uint32_t nCount){
    while(nCount--) {};
}
int main(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;
    HAL_Init();                         //初始化HAL库
    SystemClock_Config();                //初始化系统时钟为80M
    __HAL_RCC_GPIOE_CLK_ENABLE();       //开启GPIOE时钟
    GPIO_InitStruct.Pin = GPIO_PIN_7;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;     //推挽输出
    GPIO_InitStruct.Pull = GPIO_PULLUP;                //上拉
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;    //高速
    HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
    while(1)
    {
        HAL_GPIO_WritePin(GPIOE, GPIO_PIN_7, GPIO_PIN_SET);     //PE7 置1
        Delay(0x7FFFFF);
        HAL_GPIO_WritePin(GPIOE, GPIO_PIN_7, GPIO_PIN_RESET);    //PE7 置0
        Delay(0x7FFFFF);
    }
}

然后,我们通过编译处理报错

(1)我们删除main.h中42行的 #include “stm32l475e_iot01.h”。

(2)在Keil删除HALLIB中的“stm32l4_hal_msp_template.c”和“stm32l4xx_hal_timebase_tim_template.c”。

5.修改中断优先级分组组号

在“stm32l4xx_hal.c”的188行,将入口参数NVIC_PRIORITYGROUP_4 修改为NVIC_PRIORITYGROUP_2。

      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值