74人参与 • 2024-08-06 • stm32
1.基于寄存器的方式、基于标准库也就是库函数的方式和基于hal库的方式。
2.基于寄存器的开发方式和我们的51单片机开发方式一样,是用程序直接配置寄存器,来达到我们想要的功能。这种方式最底层,最直接,效率更高一些。由于stm32结构复杂,寄存器太多,所以基于寄存器就不方便。
3.基于库函数的方式是使用st官方提供的封装好的函数,通过调用这些函数来间接的配置寄存器。由于st对寄存器封装的比较好所以这种方式既能满足对寄存器的配置,提高开发效率。最后一个基于hal库的方式可以用图形化界面快速配置stm32。这个对底层了解过浅,不建议使用。
文件夹 | 作用 |
bsp | 存放开发板扳级支持包驱动代码,如各种外设驱动 |
cmsis | 存放cmsis底层代码,如:启动文件(.s文件)等 |
system | 存放系统级核心驱动代码,如:sys.c \delay.c和usart.c等。 |
stm32f1xx_hal_drivers | 存放st提供的f1系列和hal库驱动源码 |
我们平时所写的led驱动、蜂鸣器驱动、esp8266驱动等。都是放在这个目录下面。
但由于咱这是工程模板,就先不考虑这些驱动了,所以这个目录就暂时为空就好,等后面用到什么外设在具体添加对应的文件即可。
复制到我们的工程下面
只留下这两个
进入score把下面两个删掉
再拷贝一个include到cmsis(用stm32cubemx生成这个include)
注意:点击generate code
注意:只需要下面的一些
记得该路径,因为它会自动把核心文件下载到这个系统盘里面
放到我们安装包路径下面,记得复制repository/
放空
官方固件包->project->stm3210e_eval-templates->inc
官方固件包->project->stm3210e_eval-templates->src
启动文件 | 对应的flash容量 | 说明 |
startup_stm32f103x6.s | flash<=32kb | 用于小容量f103系列芯片的启动文件 |
startup_stm32f103xb.s | 64kb<=flash<=128kb | 用于中容量f103系列芯片的启动文件 |
startup_stm32f103xe.s | 256kb<=flash<=512kb | 用于大容量f103系列芯片的启动文件 |
startup_stm32f103xg.s | 768kb<=flash<=1024kb | 用于超大容量f103系列芯片的启动文件 |
有小钥匙怎么办?
两个宏定义
use_hal_driver
stm32f103xb
点击setitngs
全部勾上
改文件内容
扳手
配成中文的环境
语法检测
魔法棒
cmsis(cortex microcontroller software interface standard)是一种用于cortex-m处理器的软件接口标准。它提供了一组通用的接口定义,用于访问处理器内核和外设功能,以简化嵌入式软件开发。cmsis包括核心(core)、dsp(digital signal processing)和rtos(real-time operating system)组件,帮助开发人员编写可移植的、高效的嵌入式软件。
### 区别:
- **标准库**:
- 通用性强,适用于各种平台和应用。
- 提供了通用的功能,如输入输出、内存管理等。
- **hal库**:
- 针对特定硬件平台,提供了对硬件的抽象接口。
- 简化了对硬件的操作,提供了更直接的硬件访问接口。
### 优点:
- **标准库**:
- 通用性强,适用于各种平台和应用。
- 提供了丰富的功能,方便开发人员快速开发应用。
- **hal库**:
- 提供了对硬件的抽象接口,简化了硬件操作。
- 可以更直接地访问硬件,提高了对特定硬件的开发效率。
### 缺点:
- **标准库**:
- 可能缺乏对特定硬件的直接支持。
- 在对硬件进行底层操作时,可能需要额外的编程工作。
- **hal库**:
- 针对特定硬件平台,不具备通用性。
- 可能会增加代码的复杂性,特别是在需要跨平台开发时。
ctrl+e
1.选中代码行,按下tab键
2.选中代码行
3.想返回
shift+enter
按着alt选择一列编辑
右击,选择open document
右击标准页,选择new horizeontal/vertical tab group
ctrl+f
回到汇编文件的位置
类型 | 字节 | 位 | stdint |
char | 1 | 8 | int8_t |
unsigned char | 1 | 8 | uint8_t |
short | 2 | 16 | int16_t |
unsigned short | 2 | 16 | uint16_t |
int | 4 | 32 | int32_t |
unsigned int | 4 | 32 | uint32_t |
long | 4 | 32 | |
unsigned long | 4 | 32 | |
long long | 8 | 64 | int64_t |
unsigned long long | 8 | 64 | uint64_t |
float | 4 | 32 | |
double | 8 | 64 |
(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;
}
#include <stdio.h>
#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
#include <stdio.h>
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);
}
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论