【STM32教程】第一章 构建STM32F10x Hal库工程的开发环境详解

案例库及相关资料下载链接:

链接:https://pan.baidu.com/s/1hsIibEmsB91xFclJd-YTYA?pwd=jauj 
提取码:jauj 

1 认识硬件环境

1.1 ARM简介

·ARM既指ARM公司,也指ARM处理器内核。

·ARM公司是全球领先的半导体知识产权(IP)提供商,全世界超过95%的智能手机和平板电脑都采用ARM架构。

·ARM公司设计ARM内核,半导体厂商完善内核周边电路并生产芯片。

1.2 STM32简介

·STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器。

·STM32常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等。

·STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器。

2 软件开发环境准备

基于HAL库的开发需要在Keil MDK与STM32Cube MX上进行。

 

 

2.1 Keil MDK安装

第一步:下载Keil MDK。

打开Keil MDK官方网站(https://www2.keil.com/mdk5)根据网站上的指引下载MDK安装的exe文件,在正式下载之前需要根据网站提示注册用户并填写必要的信息。

第二步:安装Keil MDK 5。

以管理员身份运行上一步下载的MDK安装程序,勾选同意用户协议(如下图)。

 

然后,选择Keil5的安装路径并填写用户信息。

 

 

随后进入Keil5安装进度条显示界面,等待安装完成点击“Finish”按钮,此后会自动弹出在线安装支持包的界面,因为我们会后续手动配置,所以直接关闭即可。

2.2 安装STM32Cube MX

安装STM32CubeMX必须具备的条件

(1)JRE(Java Runtime Environment):JAVA运行环境。

(2)STM32CubeMX软件:生成初始化代码的地方。

(3)HAL库 PACK包:F0、F1、F3、H7等Cortex内核,都需要对应的PACK包安装。

第一步:安装JAVA JRE

64位JRE官网下载链接: (https://www.java.com/en/download/manual.jsp)

(1)勾选“更改目标文件夹”,点击“安装”。

 

(2)点击“更改(C)...”修改目标路径地址(也可以不用修改)。

 

 (3)等待安装完成(20s左右的时间),关闭界面。

 

第二步:安装STM32CubeMX

(1)官网下载安装包:www.st.com/stm32cubemx,选择“Get Software”。

 

 (2)选择对应的STM32CubeMX版本信息,本用例使用STM32CubeMX-5.3.0版本实测。

备注:不想在官网下可以在百度云盘下载如下提供STM32CubeMX(V6.1.1)云盘下载地址:

百度网盘链接: https://pan.baidu.com/s/1hsIibEmsB91xFclJd-YTYA?pwd=jauj 

提取码:jauj

(3)打开STM32CubeMX-5.3.0安装包,点击“Next”。

 

 (4)同意协议“I accept the terms of this license agreement.”,点击“Next”。

 

 (5) 勾选第一个即可,第二个选项是是否同意ST公司收集你的个人使用信息等。

 

(6)选择要安装的目录,点击“Next”。

 

(7)弹窗 Warning,点Yes即可。

备注:这句话意思是安装本软件可能会与文件夹之前文件冲突,导致文件夹之前文件丢失是否继续  点Yes继续即可。

 

(8) 默认设置,点击“Next”即可。

 

 (9)等待安装完成,点击“Next”。

 

(10)安装完成后,点击Done,即可完成安装。

 

2.3 安装STM32 HAL库

STM32 HAL固件库是Hardware Abstraction Layer的缩写,中文名称是:硬件抽象层。HAL库是ST公司为STM32的MCU最新推出的抽象层嵌入式软件,为更方便的实现跨STM32产品的最大可移植性。HAL库的推出,可以说ST也慢慢的抛弃了原来的标准固件库,这也使得很多老用户不满。但是HAL库推出的同时,也加入了很多第三方的中间件,有RTOS,USB,TCP / IP和图形等等。

和标准库对比起来,STM32的HAL库更加的抽象,ST最终的目的是要实现在STM32系列MCU之间无缝移植,甚至在其他MCU也能实现快速移植。

并且从16年开始,ST公司就逐渐停止了对标准固件库的更新,转而倾向于HAL固件库和 Low-layer底层库的更新,停止标准库更新,也就表示了以后使用STM32CubeMX配置HAL/LL库是主流配置环境;

HAL库,有在线安装、离线安装两种方式。这里实测在线安装方式(离线安装方式请自行lookup)。

(1)打开STM32CubeMX 软件,点击右上角“Help”,选择“Manage  embedded  saftware packages”

 

(2)如下所示的选择型界面,勾选所需的HAL库,本教程开发的STM32F103C8t开发板作为演示,选择的则为STM32F1 —>STM32Cube MCU Package for STM32F1 Series 1.8.5版本。

 

 (3)安装完毕后,点击右下角的Close即可。

2.4 St-Link V2使用

使用St-Link V2之前需要安装驱动,不然电脑无法操作单片机。驱动安装方法参考文章:http://t.csdn.cn/HnLK8

安装好驱动后需要用杜邦线按照以下规定来连接。

st-link与stm32板相连,需要遵照:

1) SWDIO与TMS引脚相连

2) GND与GND脚相连

3) SWCLK与TCK引脚相连

4) 3.3V VCC与板子上的3.3V引脚相连

 

3 构建模板工程的详细步骤

本小节以一个简单的工程(以点亮一个LED灯为例)介绍Stm32F103C8T6的Hal库工程开发模板。

3.1 STM32CubeMX新建工程

在STM32CubeMX中工程初步建立(新建工程选择芯片型号)。

 

 

3.2 时钟模块配置

(设置HSE,LSE,MCO)。

HSE与LSE勾选晶振。

 

3.3 时钟系统配置

(PLL,SYSCLK,AHB,APB1,APB2)。

由于STM32F10的外部晶振是8Mhz所以这里写8。

 

进入锁相环时候选择器选择外部晶振并且由于该芯片的时钟主频是72Mhz要给PLLMul乘9。

 

系统时钟选择的时候选择来自外部晶振的时钟。

 

由于此刻时钟频率超过官方限制所以这里会爆红。

 

所以要在APB1 Prescaler这里分频,即可得到完整的系统时钟配置。

 

3.4 GPIO引脚配置

(以连接LED灯的IO为例介绍如何配置)

本次 工程设计是要让引脚为PC13的LED亮起来所以需要在芯片上找到引脚PC13然后控制GPIO口PC13为输出(设置完成后PC13应该变为绿色)。

 

在GPIO口这里设置LED的初始电平,输出速度和该LED的宏定义。

 

3.5 Cortex内核配置(SYS(Debug)配置,NVIC(优先级分组))。

SYS由于是通过STlink仿真所以SYS设置为

 

 

3.6 生成工程代码(设置工程,MDK等,最后生成代码工程)。

生成过程如下:

Application Structure可以根据个人喜好来选择,选项中Advanced与Basic的区别如下:

 

其中Project name是自己取的工程名(不能取汉字),Project Location最好是在桌面建一个文档来存储。

Toolchain 选择MDK进行编译。

 

对于HAL库的支持包由于此工程很简单所以只需要copy需要的库函数即可。

而Generated files勾选第一个是为了分开.c与.h文件方便进行管理。

 

对工程进行保存,然后点击Generate Code进行代码生成

 

 

3.7 编写用户程序(main.c文件预留的位置编写代码)。 

点击Open Project 打开生成的代码会直接跳转到Keil MDK不用像库函数开发那样手动新建工程(如下图所示)。

 

尝试进行一次编译如果没有Warning和ERROR则自动生成代码没有问题。

 

然后点击魔术棒点Debug,仿真器选择STlink然后点Settings在flash Download中勾选Reset and Run。

 

 

然后对main.c进行编程点亮一个LED,对于用STM32CubeMX生成的初始代码,我们手写的代码有固定区域:STM32CubeMX生成的main.c代码中USER CODE BEGIN与USER CODE END 之间的区域就是手写代码的区域。(如下图标红框出的区域就是我们可以手写代码的区域。)

 

由于引脚初始设置为高电位,只需要将电平拉低即可点亮LED。代码如下。

// 代码样式示例

/* USER CODE BEGIN WHILE */

while(1)

{

    /* USER CODE END WHILE */



    /* USER CODE BEGIN 3 */

    HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET);

}

/* USER CODE END 3 */

未编译下载之前面包板如图所示:

 

编译下载如下图所示:

 

每次代码修改之后都要先编译然后下载。

点亮LED如下图所示:

 

    如果我们想重新点亮另外的灯,就需要在STM32CubeMX上重新设置IO口而重新设置之后我们手动添加的代码会保留下来,这个时候对IO口的宏定义非常重要。例如:我们用PA0端口来点亮一个LED只需要把PA0给设置为输出,然后将PC13的宏定义给PA0,这样就能将点的灯替换掉。(如下图所示)

 

而对于一个工程,如果不是替换IO口那么对于IO口的宏定义要保证不同,不能出现一个宏定义对应多个IO口,这样的话重新生成代码,会对我们之前自己写的代码产生影响。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值