当前位置: 首页 > news >正文

STM32单片机入门学习——第3-4节: [2-1、2]软件安装和新建工程

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做!

本文写于:2025.04.01

STM32开发板学习——第一节: [1-1]课程简介

  • 前言
  • 开发板说明
  • 引用
  • 解答和科普
  • 一、软件安装
  • 二、新建工程
  • 回顾
  • 总结

前言

   本次笔记是用来记录我的学习过程,同时把我需要的困难和思考记下来,有助于我的学习,同时也作为一种习惯,可以督促我学习,是一个激励自己的过程,让我们开始32单片机的学习之路。
   欢迎大家给我提意见,能给我的嵌入式之旅提供方向和路线,现在作为小白,我就先学习32单片机了,就跟着B站上的江协科技开始学习了.
   在这里会记录下江协科技32单片机开发板的配套视频教程所作的实验和学习笔记内容,因为我之前有一个开发板,我大概率会用我的板子模仿着来做.让我们一起加油!
   另外为了增强我的学习效果:每次笔记把我不知道或者问题在后面提出来,再下一篇开头作为解答!

开发板说明

   本人采用的是慧净的开发板,因为这个板子是我N年前就买的板子,索性就拿来用了。另外我也购买了江科大的学习套间。
   原理图如下
1、开发板原理图
在这里插入图片描述
2、STM32F103C6和51对比
在这里插入图片描述
3、STM32F103C6核心板
在这里插入图片描述

视频中的都用这个开发板来实现,如果有资源就利用起来。另外也计划实现江协科技的套件。

下图是实物图
在这里插入图片描述

引用

【STM32入门教程-2023版 细致讲解 中文字幕】
还参考了下图中的书籍:
STM32库开发实战指南:基于STM32F103(第2版)
在这里插入图片描述
数据手册

解答和科普

一、软件安装

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在线安装
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ST-link驱动安装
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
CH340驱动安装

二、新建工程

1、 开发STM32的形式为:基于寄存器的方式(太多太麻烦);基于标准库(库函数)和基于HAL库方式。
基于HAL库的方式可以用图形化界面快速配置STM32方便但不是底层。

固件库的文件
在这里插入图片描述
在这里插入图片描述
Libraries里面就是库函数的文件,建工程要用;
Project是官方提供的工程示例和模版,可以参考;
Utilities是STM32官方评估板的相关例程;
库函数的发布文档和使用手册。

新建工程
在这里插入图片描述
自动生成的文件夹
在这里插入图片描述

1、创立Start文件夹:

1.1文件从Libaries-CMSIS-CM3-DeviceSupport-ST-STM32F10x-startup-arm,这些就是STM32的启动文件,STM32的程序就是从启动文件开始执行的。
在这里插入图片描述
1.2在这里插入图片描述
然后startup文件夹同级的stm32f10x.h(STM32外设寄存器描述文件和51单片机RGEX52.H一样);这两个system文件是用来配置时钟的,STM32主频72MHz,就是system文件里的函数配置的。

1.3
STM32是内核和内核外围的设备组成的,所以还要加入一个内核寄存器的描述文件:DeviceSupport同级的Libaries-CMSIS-CM3-CoreSupport中的两个cm3就是内核的寄存器描述
在这里插入图片描述
这样工程的必要文件就复制完成了。
我们回到keil把刚才复制的文件添加到工程里面,把名字改为Start,添加现存的文件,首先添加一下启动文件,这个启动文件有很多分类,我们只能添加其中一个,我们所用的型号需要选择后缀为md.s的启动文件,剩下的C文件和H文件都要添加进来。
在这里插入图片描述
在这里插入图片描述
这样,我们Start文件夹里面的文件就添加好了,这里的文件都是STM32里最基本的文件,是不需要我们修改的,我们添加进来即可。小钥匙代表是只读文件。
最后还需呀添加上这个文件夹的头文件路径
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这是保证放在User文件夹下。
写main函数看是否成功
在这里插入图片描述
最后一行必须为空行,不然会报错。
在这里插入图片描述
这就完成一个基于寄存器开发的工程。
改变字体大小
在这里插入图片描述
字体格式UTF-8
在这里插入图片描述
配置调试器:
在这里插入图片描述
在这里插入图片描述
勾选后,我们下载程序后会立马复位并执行,这样方便一些,否则每次下载,还需要按一下板子上的复位键才能执行程序。
在这里插入图片描述
点击load就可以下载了。

完成基于寄存器完成点灯:
接下来配置寄存器,来点亮这个灯,打开STM32的参考手册,首先是RCC的一个寄存器,来使能GPIO的时钟,GPIO都是APB2的外设,所以在这个APB2外设时钟使能寄存器RCC_APB2ENR里面配置,
在这里插入图片描述
在这里插入图片描述
这一位写1,其他无关项都给0,那整个寄存器的二进制数据转化为十六进制,4位为一个数字,总共32也就是8位十六进制数:00000010。
配置时钟使能:
在这里插入图片描述
配置PC13口的模式:
在这里插入图片描述
无关为0;所以值为0x0030 0000
配置数据:
在这里插入图片描述
在这里插入图片描述
这个操作非常不好,就是除了PC13之外的位都配置成了0,这样就会影响到其他端口的原有配置,如果要做到只配置PC13而不影响其他位,就需要进行&=和|=操作。

HJ开发板寄存器点亮LED灯

#include "stm32f10x.h"                  // Device header



int main(void)
{
	RCC->APB2ENR=0x00000004;	//使能GPIOA
	GPIOA->CRL=0x00000003;		//调试GPIOA0
	GPIOA->ODR=0x00000000;		//亮
	
	while(1)
	{
	}

}

生成HEX文件,串口下载
在这里插入图片描述

STM32点灯
在这里插入图片描述

在寄存器版本上完成库创建
在工程文件夹下创建Library文件夹,
2、Library存放库函数:打开固件库Libaries-STM32F10x_StdPeriph_Driver(标准外设驱动)-src中的文件,其中misc是内核的库文件,其他的就是内核外的外设库函数
打开固件库的inc文件夹,这些是库函数的头文件,继续ctrl+A全选
在这里插入图片描述
然后放到Library文件夹下,和添加Start一样,在Keil软件中加入。
在这里插入图片描述
3、User文件夹: 打开固件库文件夹,打开Project-STM32Template,选择main、stm32f10x_conf.h和两个it结尾的文件,conf文件是用来配置库函数头文件的包含关系的,还有用来参数检查的函数定义,这是所有库函数都需要的
两个it文件是用来存放中断函数的。
在这里插入图片描述
最后还需要一个宏定义:
在这里插入图片描述
如果你定义了USE_STDPERIPH_DRIVER这个字符串,下面这个 #include "stm32f10x_conf.h"语句才有效
在这里插入图片描述
这样才能包含标准外设库,也就是库函数。
下面的头文件路径也不要忘了
在这里插入图片描述
这样基于库函数的工程就建好了
Library里面的库函数也都是只读文件不需要更改,需要更改的是User组里面的文件。
在这里插入图片描述
在这里插入图片描述
文件创建成功,库函数也是间接的配置寄存器,所以他们的步骤也是一样的,首先是使能时钟,
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

#include "stm32f10x.h"                  // Device header

int main(void)
{
	
//	RCC->APB2ENR=0x00000004;
//	GPIOA->CRL=0x00000003;
//	GPIOA->ODR=0x00000000;		//灭
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);		//使能GPIOA的时钟
	GPIO_InitTypeDef  GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;				//通用推挽输出
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;						//配置那个端口
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;				//速度时钟
	GPIO_Init(GPIOA, &GPIO_InitStructure);						//整体配置GPIO
	
	GPIO_SetBits(GPIOA,GPIO_Pin_0);								//GPIOA0高电平
//	GPIO_ResetBits(GPIOA,GPIO_Pin_0);							//GPIOA0低电平
	
	while(1)
	{
		
	}

}

控制灯的亮灭

回顾

首先是新建工程里面的启动文件,我们新建工程的第一个加的就是启动文件,要根据芯片型号来选择,分为以下的内容。
在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述
1、创立Start文件夹:文件从Libaries-CMSIS-CM3-DeviceSupport-ST-STM32F10x-startup-arm,这些就是STM32的启动文件,STM32的程序就是从启动文件开始执行的。
然后startup文件夹同级的stm32f10x.h(STM32外设寄存器描述文件和51单片机RGEX52.H一样);这两个system文件是用来配置时钟的,STM32主频72MHz,就是system文件里的函数配置的。
STM32是内核和内核外围的设备组成的,所以还要加入一个内核寄存器的描述文件:DeviceSupport同级的Libaries-CMSIS-CM3-CoreSupport中的两个cm3就是内核的寄存器描述
然后回到keil添加:

2、Library存放库函数:打开固件库Libaries-STM32F10x_StdPeriph_Driver(标准外设驱动)-src中的文件,其中misc是内核的库文件,其他的就是内核外的外设库函数
打开固件库的inc文件夹,这些是库函数的头文件,继续ctrl+A全选
3、User文件夹: 打开固件库文件夹,打开Project-STM32Template,选择main、stm32f10x_conf.h和两个it结尾的文件,conf文件是用来配置库函数头文件的包含关系的,还有用来参数检查的函数定义,这是所有库函数都需要的
两个it文件是用来存放中断函数的。
工程文件复制完成
在keil创建三个组:Start、Library、User、添加文件;
Start文件添加带md.s,然后选择其他的.c.h文件,选择并添加
Library是all files Ctrl+A全选
User也是一样all files Ctrl+A全选
文件添加完成
打开魔术棒按钮,打开工程选项,选择C/C++,在Include Paths栏,把我们自己建的文件夹路径都添加进来:Start、Library、User
在Define一栏中写下:USE_STDPERIPH_DRIVER
USE使用_STD标准_PERIP外设_DRVER驱动
最后选择Debug,调试器选择ST-LINK,设置Flash Download 勾选上Rest and Run,这样工程就配置好了。
把main文件删除写上自己的main函数,加上头文件,写上main函数。
注意最后一行要是空行,不然会警告。

在这里插入图片描述
首先是Startup启动文件:这个是程序执行最基本的文件,是用汇编写的,这个复位中断是整个程序的入口,当STM32上电复位或者按下复位键之后,程序就会进入复位中断函数执行,复位中断函数主要就做了两件事情,第一个是调用Systemlnit函数,第二个是调用main函数,不会结束所以在main函数的最后,一定是一个死循环。
在这里插入图片描述
在这里插入图片描述
设置微控制器的启动,初始化嵌入式闪存接口,锁相环,更新系统内核的时钟变量,下面的note写的是这个函数仅在复位后需要调用,下面就是配置的,帮我们配置好,还启动了其他的中断,达到条件就会自动执行。

中断函数的定义就是在STM32fx_it里面,自定义的中断建议写在这,不过我们在那用,写在哪里。
在这里插入图片描述
当然我们可以自己封装函数。
到此为止。这个工程结构主动执行的部分就介绍完了。
右边是被动执行的东西了,相当于STM32的资源,我们在主函数或者中断函数就可以调用这些资源,
库函数调用
在这里插入图片描述
conf.h是包含了所有的库文件的头文件,又因为stm31f10.h包含了conf.h,所以只需要包含一个stm31f10.h文件就行了,就可以调用库函数了。

在这里插入图片描述

总结

本节课主要是学习了如何安装所需的软件和创建一个工程,基于寄存器和标准库的不同,其本质都是操作寄存器,要经过配置,start可以满足启动就可以寄存器配置,但是不方便,要查寄存器手册还要计算,&=和|=。所以又学习了如何创建库。
1、创立Start文件夹:文件从Libaries-CMSIS-CM3-DeviceSupport-ST-STM32F10x-startup-arm,这些就是STM32的启动文件,STM32的程序就是从启动文件开始执行的。
然后startup文件夹同级的stm32f10x.h(STM32外设寄存器描述文件和51单片机RGEX52.H一样);这两个system文件是用来配置时钟的,STM32主频72MHz,就是system文件里的函数配置的。
STM32是内核和内核外围的设备组成的,所以还要加入一个内核寄存器的描述文件:DeviceSupport同级的Libaries-CMSIS-CM3-CoreSupport中的两个cm3就是内核的寄存器描述
然后回到keil添加:

2、Library存放库函数:打开固件库Libaries-STM32F10x_StdPeriph_Driver(标准外设驱动)-src中的文件,其中misc是内核的库文件,其他的就是内核外的外设库函数
打开固件库的inc文件夹,这些是库函数的头文件,继续ctrl+A全选
3、User文件夹: 打开固件库文件夹,打开Project-STM32Template,选择main、stm32f10x_conf.h和两个it结尾的文件,conf文件是用来配置库函数头文件的包含关系的,还有用来参数检查的函数定义,这是所有库函数都需要的
两个it文件是用来存放中断函数的。
工程文件复制完成
在keil创建三个组:Start、Library、User、添加文件;
Start文件添加带md.s,然后选择其他的.c.h文件,选择并添加
Library是all files Ctrl+A全选
User也是一样all files Ctrl+A全选
文件添加完成
打开魔术棒按钮,打开工程选项,选择C/C++,在Include Paths栏,把我们自己建的文件夹路径都添加进来:Start、Library、User
在Define一栏中写下:USE_STDPERIPH_DRIVER
USE使用_STD标准_PERIP外设_DRVER驱动
最后选择Debug,调试器选择ST-LINK,设置Flash Download 勾选上Rest and Run,这样工程就配置好了。
把main文件删除写上自己的main函数,加上头文件,写上main函数。
注意最后一行要是空行,不然会警告。
最后实现了点灯。
我是使用的串口下载,要这样选择同事下载前按一下复位按钮。

在这里插入图片描述

相关文章:

  • Netty——心跳监测机制
  • 【Java 优选算法】哈希表
  • 基于springboot+vue的动漫交流与推荐平台
  • Zookeeper经典应用场景实战
  • 【GPT入门】第29课 对比不同的langchain ReAct代理的思考过程
  • C嘎嘎类里面的额函数
  • 一文详细讲解Python(详细版一篇学会Python基础和网络安全)
  • 安卓Q以下自定义文字的字体
  • LVGL Dropdown和Calendar详解
  • 机器学习 第一章 绪论
  • 算法 | 蜣螂优化算法(DBO)在无人机路径规划中的应用(附matlab源码)
  • 单机快速部署开源、免费的分布式任务调度系统——DolphinScheduler
  • VuePress 和 Docusaurus的对比
  • C# System.Net.IPAddress 使用详解
  • docker的与使用
  • TLC vs QLC六大关键差异【续】
  • 简单粗暴,用浏览器调试端口绕过Selenium/Playwright/Puppeteer检测
  • 数据结构【链表】
  • 冒泡排序:经典算法的深度解析与TypeScript实现
  • NullByte: 1靶场渗透
  • 开发商交房需要提供哪些证书/兰州seo公司