首页 > 其他分享 >进阶阶段——STM32学习笔记(二)

进阶阶段——STM32学习笔记(二)

时间:2023-01-11 23:12:36浏览次数:39  
标签:文件 进阶 工程 笔记 STM32 添加 寄存器 外设 库函数

进阶阶段——STM32学习笔记(二)

1 新建工程

STM32 不推荐基于寄存器的方式开发,因为寄存器众多,开发难度大

推荐用标准库的方式或HAL库的方式开发

注意:STM32的程序是从启动文件开始执行的,需要从外部下载好标准库文件后直接加入到工程中。

新建工程的过程可以类比于装修土坯房的过程

1.1 整体步骤

image-20230111154658349

建立工程文件夹,在keil中新建工程project,选定开发芯片后,此时keil里的工程相当于一个土坯房,咱们需要在现在的土坯房里面装修。

即stm32是基于标准库(或者HAL库)开发的,所以咱们需要往已有的工程中添加必要文件才能用

1.1.1在project所在的文件夹里面添加stm32必要文件

1.添加stm32的启动文件startup_xx .s

image-20230111132537960

​ 打开下载来的官方标准库,在其中能找到启动文件

image-20230111132232759

2.添加外设寄存器描述文件(stm32F4XX.h) 和 配置时钟用的system文件

​ 外围设备寄存器描述文件(如stm32F4XX.h):

​ 其作用相当于reg52.h,描述stm32的寄存器和所在地址

image-20230111133701818

​ system.c和system.h文件用来配置时钟

image-20230111133628933

3. 添加内设寄存器描述文件(core_cmx.h core_cmx.c)

​ stm32 是由内核和内核外围设备组成,以上步骤添加完外围设备寄存器描述文件后,接下来添加内围设备寄存器描述文件

image-20230111134219050

​ 在标准库中找不到core_cm3.c之类的文件时,就可以不用添加,添加core_cm3.h文件就行

1.1.2 在keil软件界面的project中导入刚刚添加的stm32必要文件

左侧菜单栏只能添加的是 .c文件

需要在设置中增加添加.h文件夹的所在路径,才算完成添加.h文件

至此就可以进行寄存器方式开发,在此基础上添加以下库函数文件即可变成寄存器方式开发

hal库.h hal库.c

image-20230111145722137 image-20230111145739652 image-20230111145803679

接着加入以下两个文件

XXXX_it.h XXXX_it.c

image-20230111145821271 image-20230111145936064

注意添加完.c文件后,也要将.h头文件路径加进去

接着是很重要的一步:需要一个宏定义添加进去

image-20230111150609530

找到以下语句

image-20230111150645791 image-20230111150737354 image-20230111150835336

以上,库函数(标准库)方式开发的必要文件配置完毕

image-20230111151332764

在之后我们需要更改的是user中添加的文件来完成程序设计

image-20230111151429522

1.2 两种开发方式的对比

1.2.1 寄存器方式下的配置外设步骤

(跟把大象放进冰箱一样的步骤)

1.先使能时钟

根据外设所挂载的时钟频率总线类型APB1/APB2来RCC里面选择相应的使能寄存器,在使能寄存器中写入数据来使能外设(需要使用数据手册来查找)

2.初始化外设寄存器的值

3.输出外设寄存器的值

繁琐的点在于需要不断查找数据手册,了解寄存器每一个是干什么的,并给它赋值 转换为16进制 &|

无法单独给寄存器中的某一位赋值,所以寄存器赋值一定会影响到其他无辜的位值,可用&=或|=的方式来配置

1.2.2 库函数方式下的配置外设步骤

1.调用使能时钟的函数

image-20230111151923891

​ 此函数是来使能或失能挂载载APB2下的外设时钟

​ 此函数中已经包含&=或|=的运算,避免了像寄存器赋值一样伤及无辜

2.初始化外设寄存器的值

​ GPIO_init()GPIO初始化函数

​ 这其中会涉及到结构体配置,访问结构体成员,给它们赋值

3.输出高低电平函数

​ GPIO_SET

​ GPIO_RESET

1.3 工程架构

新建工程就是按照以下的工程架构来建立的

image-20230111155729606

程序在启动文件startup_xx.s中执行,启动文件中有复位中断和其他中断组成。

其中复位中断先调用Systeminit函数来配置时钟频率等初始化信息,然后才执行main主函数。而Systeminit函数在Systeminit.c/h文件中有定义,所以需要添加进工程中。另外,需要添加内外设寄存器描述文件进入工程才可以实现寄存器方式开发。

在此基础上,加入库函数.c/.h文件和库函数配置文件(描述各个库函数之间的关系)才能进行库函数开发。

启动文件中的其他中断则负责调用中断处理函数,而中断处理函数是在如stm32f10x_it.c/h文件中定义的,也需要添加进工程中。

至此土坯房装修完成,可以购入家具住人啦,安排一套潮汕功夫茶先~~啦啦啦

标签:文件,进阶,工程,笔记,STM32,添加,寄存器,外设,库函数
From: https://www.cnblogs.com/wu-jia-wei/p/17045152.html

相关文章

  • [概率论与数理统计]笔记:3.3 随机向量的函数的分布与数学期望
    3.3随机向量的函数的分布与数学期望离散型随机向量的函数的分布定义离散型随机向量\((X,Y)\)的分布为\[P\{X=x_i,Y=y_j\}=p_{ij},\quadi,j=1,2,\cdots,\]随机向......
  • 三角函数笔记
    Time:2023-01-1117:54:52视频地址:超全!三角函数、对数指数公式在考研中的运用1.三角函数的定义\(正弦:\sin\alpha=\frac{对边}{斜边};\qquad余弦:\frac{邻边}......
  • 牛客进阶题目:同步FIFO
    给定一个双端口RAM作为sFIFO的存储空间,所以可以一套端口读,另一套端口写。在sFIFO里维护读写指针各一个,作为DRAM的地址。判满判空采取扩1bit操作,只有这样才能标识反卷,指示......
  • MySql学习笔记-进阶03
          ......
  • 【学习笔记】差分约束
    1.算法介绍差分约束系统是一种特殊的\(N\)元一次不等式组,它包含\(N\)个变量\(X_1\simX_N\)以及\(M\)个约束条件,每个约束条件是由两个其中的变量做差构成的,形如......
  • 「笔记」manacher 算法
    目录写在前面简介算法流程复杂度证明写在最后写在前面才发现好久没写知识笔记了……神兵小将真好看,感觉好像年轻了十岁,有一种莫名的沉浸式的体验。还记得当年特别喜欢......
  • 算法学习笔记(53)——排序不等式
    排序不等式题目链接:AcWing913.排队打水让最磨叽的人最后打水。如图所示,第一个同学被等了6次,第二个同学被等了5次,以此类推...\[总时间=t_1\times(n-1)+t_2\t......
  • Python学习笔记-常用模块介绍--时间模块
    1.时间模块分为哪三种格式?1.时间戳2.格式化字符串3.结构化时间 2.时间的示例#1.时间戳---常用于运算的print(time.time())#2.格式化字符串---用于显示,方......
  • Python学习笔记-常用模块介绍--猴子补丁
    1.什么是猴子补丁?属性在运行时的动态替换,叫做猴子补丁(MonkeyPatch)【发音ˈmʌŋkipætʃ】是一种思想,应用于团队引用了公共模块,想丰富模块,就在入口打这种“猴子补......
  • 算法学习笔记(52)——Huffman树
    Huffman树题目链接:AcWing148.合并果子利用贪心的思想,每次从当前所有堆中,挑出最小的两堆合并即可。#include<iostream>#include<algorithm>#include<queue>usi......