案例库及相关资料下载链接:
链接:https://pan.baidu.com/s/1hsIibEmsB91xFclJd-YTYA?pwd=jauj
提取码:jauj
·ARM既指ARM公司,也指ARM处理器内核。
·ARM公司是全球领先的半导体知识产权(IP)提供商,全世界超过95%的智能手机和平板电脑都采用ARM架构。
·ARM公司设计ARM内核,半导体厂商完善内核周边电路并生产芯片。
·STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器。
·STM32常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等。
·STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器。
基于HAL库的开发需要在Keil MDK与STM32Cube MX上进行。
第一步:下载Keil MDK。
打开Keil MDK官方网站(https://www2.keil.com/mdk5)根据网站上的指引下载MDK安装的exe文件,在正式下载之前需要根据网站提示注册用户并填写必要的信息。
第二步:安装Keil MDK 5。
以管理员身份运行上一步下载的MDK安装程序,勾选同意用户协议(如下图)。
然后,选择Keil5的安装路径并填写用户信息。
随后进入Keil5安装进度条显示界面,等待安装完成点击“Finish”按钮,此后会自动弹出在线安装支持包的界面,因为我们会后续手动配置,所以直接关闭即可。
安装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,即可完成安装。
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即可。
使用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引脚相连
本小节以一个简单的工程(以点亮一个LED灯为例)介绍Stm32F103C8T6的Hal库工程开发模板。
在STM32CubeMX中工程初步建立(新建工程选择芯片型号)。
(设置HSE,LSE,MCO)。
HSE与LSE勾选晶振。
(PLL,SYSCLK,AHB,APB1,APB2)。
由于STM32F10的外部晶振是8Mhz所以这里写8。
进入锁相环时候选择器选择外部晶振并且由于该芯片的时钟主频是72Mhz要给PLLMul乘9。
系统时钟选择的时候选择来自外部晶振的时钟。
由于此刻时钟频率超过官方限制所以这里会爆红。
所以要在APB1 Prescaler这里分频,即可得到完整的系统时钟配置。
(以连接LED灯的IO为例介绍如何配置)
本次 工程设计是要让引脚为PC13的LED亮起来所以需要在芯片上找到引脚PC13然后控制GPIO口PC13为输出(设置完成后PC13应该变为绿色)。
在GPIO口这里设置LED的初始电平,输出速度和该LED的宏定义。
SYS由于是通过STlink仿真所以SYS设置为
3.6 生成工程代码(设置工程,MDK等,最后生成代码工程)。
生成过程如下:
Application Structure可以根据个人喜好来选择,选项中Advanced与Basic的区别如下:
其中Project name是自己取的工程名(不能取汉字),Project Location最好是在桌面建一个文档来存储。
Toolchain 选择MDK进行编译。
对于HAL库的支持包由于此工程很简单所以只需要copy需要的库函数即可。
而Generated files勾选第一个是为了分开.c与.h文件方便进行管理。
对工程进行保存,然后点击Generate Code进行代码生成
点击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口,这样的话重新生成代码,会对我们之前自己写的代码产生影响。