完整的手把手带你创建STM32工程(HAL库)
创始人
2024-11-13 21:40:30
0

一.STM32开发方式

1.基于STM32开发方式

1.基于寄存器的方式、基于标准库也就是库函数的方式和基于HAL库的方式。

2.基于寄存器的开发方式和我们的51单片机开发方式一样,是用程序直接配置寄存器,来达到我们想要的功能。这种方式最底层,最直接,效率更高一些。由于STM32结构复杂,寄存器太多,所以基于寄存器就不方便。

3.基于库函数的方式是使用ST官方提供的封装好的函数,通过调用这些函数来间接的配置寄存器。由于ST对寄存器封装的比较好所以这种方式既能满足对寄存器的配置,提高开发效率。最后一个基于HAL库的方式可以用图形化界面快速配置STM32。这个对底层了解过浅,不建议使用。

1.2记得解压CH340,以及ST-LINK驱动安装

 1.3 ST-KINK接线以及使用

1.4为什么使用CH340

1.5下载Cube固件包(STM官网)

 

 1.6项目工程文件夹

 1.7Drivers文件夹

文件夹作用                                         
BSP存放开发板扳级支持包驱动代码,如各种外设驱动
CMSIS存放CMSIS底层代码,如:启动文件(.s文件)等
SYSTEM存放系统级核心驱动代码,如:sys.c \delay.c和usart.c等。
STM32F1XX_HAL_Drivers存放ST提供的F1系列和HAL库驱动源码

 1.8 BSP文件夹

我们平时所写的LED驱动、蜂鸣器驱动、ESP8266驱动等。都是放在这个目录下面。

但由于咱这是工程模板,就先不考虑这些驱动了,所以这个目录就暂时为空就好,等后面用到什么外设在具体添加对应的文件即可。

复制到我们的工程下面

 

 只留下这两个

进入Score把下面两个删掉

 

 再拷贝一个include到CMSIS(用STM32CubeMX生成这个include)

注意:点击GENERATE CODE

注意:只需要下面的一些

1.9 STM32CubeMX软件安装

 记得该路径,因为它会自动把核心文件下载到这个系统盘里面

  放到我们安装包路径下面,记得复制Repository/

2.0 SYSYEM文件夹

2.1 STM32F1XX_HAL_Driver文件夹

2.2 MIddlewares、Output、Projects

放空

2.3 Users

官方固件包->project->STM3210E_EVAL-Templates->inc

官方固件包->project->STM3210E_EVAL-Templates->src

2. 开始新建工程

2.1建立文件

 

2.2打开KEIL

 3.找对路径在下面建立一个文件夹

4.常用编译按钮

3.添加工程必要文件

3.1建立启动文件

3.1.1添加文件

 

3.1.2为什么选择不同型号的启动文件
启动文件                    对应的FLASH容量                说明                             
startup_stm32f103x6.sFlash<=32KB用于小容量F103系列芯片的启动文件
startup_stm32f103xb.s64KB<=Flash<=128KB用于中容量F103系列芯片的启动文件
startup_stm32f103xe.s256KB<=Flash<=512KB用于大容量F103系列芯片的启动文件
startup_stm32f103xg.s768KB<=Flash<=1024KB用于超大容量F103系列芯片的启动文件
3.1.3 user头文件

3.1.4 Drivers/SYSTEM

3.1.5 官方的Drivers/STM32FXX_HAL_Driver

 有小钥匙怎么办?

4.配置魔法棒和扳手

4.1 Target

4.2  output


4.3 Listing

4.4 C\C++

两个宏定义

USE_HAL_DRIVER

STM32F103xB

4.4.1添加头文件路径

 

4.5 DEBUG选择STLink

 点击setitngs

全部勾上

4.6 Utilities 选项卡

改文件内容

4.7魔法棒配置和扳手的配置

扳手

配成中文的环境

语法检测

魔法棒

 

4.8下载

4.9 什么是CMSIS

CMSIS(Cortex Microcontroller Software Interface Standard)是一种用于Cortex-M处理器的软件接口标准。它提供了一组通用的接口定义,用于访问处理器内核和外设功能,以简化嵌入式软件开发。CMSIS包括核心(Core)、DSP(Digital Signal Processing)和RTOS(Real-Time Operating System)组件,帮助开发人员编写可移植的、高效的嵌入式软件。

4.10 标准库和HAL库的区别、优点和缺点如下:

### 区别:
- **标准库**:
  - 通用性强,适用于各种平台和应用。
  - 提供了通用的功能,如输入输出、内存管理等。
  
- **HAL库**:
  - 针对特定硬件平台,提供了对硬件的抽象接口。
  - 简化了对硬件的操作,提供了更直接的硬件访问接口。

### 优点:
- **标准库**:
  - 通用性强,适用于各种平台和应用。
  - 提供了丰富的功能,方便开发人员快速开发应用。

- **HAL库**:
  - 提供了对硬件的抽象接口,简化了硬件操作。
  - 可以更直接地访问硬件,提高了对特定硬件的开发效率。

### 缺点:
- **标准库**:
  - 可能缺乏对特定硬件的直接支持。
  - 在对硬件进行底层操作时,可能需要额外的编程工作。

- **HAL库**:
  - 针对特定硬件平台,不具备通用性。
  - 可能会增加代码的复杂性,特别是在需要跨平台开发时。

5.MDK5的使用技巧

5.1找括号的范围

Ctrl+e

5.2缩进

1.选中代码行,按下Tab键

2.选中代码行

 3.想返回

SHift+Enter

5.3快速编辑一列

按着Alt选择一列编辑

5.4快速打开头文件

右击,选择Open  document

5.5快速拆分窗口

右击标准页,选择New horizeontal/vertical tab group

5.6查找替换的功能

CtrL+F

6.MDK调试配置

6.1优化等级,有时候写代码时候,比如for循环,啥也不做,占用CPU时间。不希望优化掉,所以设置为0

6.2下载Debug,配置

6.3 STLINK之前配置过了,不用再配置了。看我之前博文

6.4Utilities

 6.5 进入仿真调试里面

 6.6开始仿真

 6.7打断点、失能断点、全部是能断点。

6.8遍历整个程序,到断点停止 

 6.9断点就是程序运行到这里便停止,红色是当前程序运行的位置,绿色是光标的位置

6.10 步进按钮,按一下进一下,碰见函数就进封装的函数体内。

6.11 跳出步进按钮

6. 12 运行到光标的位置

6.13 复位按键

回到汇编文件的位置

 6.14 停掉按钮

7.C语言的回顾

7.1数据类型

类型字节Stdint
Char18int8_t
unsigned char18uint8_t
short216int16_t
unsigned short216uint16_t
int432int32_t
unsigned int432uint32_t
long432
unsigned  long432
long long 864int64_t
unsigned  long long 864uint64_t
float432
double864

7.2宏定义

(1)宏定义是预处理用的,提高代码可读性

#define high 1 #define low  0  int main(){      printf("high=%d",high);     printf("low=%d,low");      return 0; }

7.3typedf给复杂的数据类型起名

typedef unsigned int Size;  int main(){     size a=10;     printf("a=%d\r\n",a);     return 0; }

7.4#if、#elif、#else、#endif、#ifdef,是为避免重复编译

#include  #define chd  int main(void){     printf("hello word\r\n"); #ifdef chd     printf("888\r\n"); #endif     return 0; }

他们其实和if判断一样,如果为真,则继续进行;如果不为真;则继续,继续判断下边。

#if 1 printf("111\n"); #elif 1 printf("222\n"); #else printf("333\n"); #endif

8.结构体

#include   struct student{char gender;int age;float score}; typedf struct student{char gender;int age;float score} stu;  int main(void){     stu a;     struct student b;      b.gender='c';     b.age=18;     b.score=100;     printf("age=%d,gender=%c,score=%.2f\r\n",b.age,b.gender,b.score);  }

相关内容

热门资讯

我来教你/游戏推荐牛牛房卡出售... 复仇者联盟是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:33290...
微信炸金花链接怎么买房卡/牛牛... 炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:8488009许多玩家在游戏中会购买房卡来享受...
科技实测!牛牛房卡怎么购买先锋... 科技实测!牛牛房卡怎么购买先锋大厅/新道游/正规房卡链接在哪购买Sa9Ix苹果iPhone 17手机...
推荐一款!金花房卡是正规的青鸟... 您好!微信青鸟大厅大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(青鸟大厅)大厅介绍:...
正规平台有哪些,斗牛房间怎么创... 今 日消息,海贝之城房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...
安卓系统不升级的坏处,安卓系统... 亲爱的手机用户们,你是不是也遇到了这样的烦恼:安卓系统的更新通知总是跳出来,但你却总是犹豫不决,担心...
正规平台有哪些,金花房卡专卖店... 正规平台有哪些,金花房卡专卖店乐游联盟/正规房卡平台有哪些乐游联盟是一款非常受欢迎的游戏,咨询房/卡...
微信群上炸金花房间链接怎么开/... 炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:33903369许多玩家在游戏中会购买房卡来享...
科技实测!游戏微信牛牛房卡龙马... 微信游戏中心:龙马大厅房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或相关小程...
重大通报,牛牛房卡代理天龙大厅... 重大通报,牛牛房卡代理天龙大厅/房卡在哪里购买Sa9Ix苹果iPhone 17手机即将进入量产阶段。...
微信金花房卡链接使用方法/微信... 牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:15984933许多玩家在游戏中会购买房卡来享受...
微信群炸金花房间怎么开/神牛大... 炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:55051770许多玩家在游戏中会购买房卡来享...
我来教你/金花房卡专卖店豌豆互... 今 日消息,豌豆互娱房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...
玩家攻略,牛牛充值房卡九游联盟... 九游联盟房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3、根...
IA解析/游戏推荐牛牛房卡出售... IA解析/游戏推荐牛牛房卡出售新全游/飞鹰互娱/微信链接房卡批发价新全游/飞鹰互娱是一款非常受欢迎的...
微信链接炸金花房卡怎么买/新海... 炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:8488009许多玩家在游戏中会购买房卡来享受...
在哪里买炸金花房卡便宜又好玩/... 金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡来享...
科技实测!金花房卡是正规的九哥... 微信游戏中心:九哥联盟房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或相关小程...
推荐一款!金花微信链接市场价格... 推荐一款!金花微信链接市场价格表乐乐大厅/微信链接房卡充值购买Sa9Ix苹果iPhone 17手机即...
推荐一款!金花房间怎么创建新超... 您好!微信新超圣/樱花大厅大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(新超圣/樱花...