新建一个STM32的工程

一、SMT32开发方式

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

2、基于标准库(库函数的方式):使用ST官网提供的封装好的函数,通过调用这些函数间接地配置寄存器,ST对寄存器封装的比较好,所以这种方式既能满足对寄存器的配置,对开发人员也比较友好,有利于提高开发效率

3、基于HAL库的方式:可以用图形化界面快速配置STM32,这个比较适合快速上手STM32的情况,但是这种方式隐藏了底层逻辑

二、基于库函数的方式

1、需要准备一个STM32库函数的压缩包

2、新建一个基于标准库的工程

建立一个存放工程的文件夹,把所有32个工程都放在里面

打开keil5软件,选择【project】=>【New uVision Project】

 

 

弹出一个keil软件新建工程小助手,帮助我们快速新建工程,暂时不用这个小助手

3、添加工程的必要文件

STM32是内核和内核外围的设备组成,这个内核的寄存器描述和外围设备的描述文件不是在一起的,所以还需要添加一个内核寄存器的描述文件

工程必要文件就复制完成了

 4、将复制的必要文件添加到工程里

 首先添加一下启动文件,这个启动文件有很多分类,我们只能添加其中一个

 

选择md后缀是因为我们选择的是STM32F103,中容量产品

 5、在工程选项里添加上这个文件夹的头文件路径,不然软件找不到.h文件

6、新建一个main函数

在工程文件夹下,新建一个User文件夹,main函数就放在这个文件夹里

keil里,在Target这里右键,点击添加组

在main.c里,右键插入头文件,选择stm32发0x.h

写一个main函数(main函数是一个int型返回值,void参数的函数)

这个工程目前还没有添加STM32的库函数,所以现在还是一个基于寄存器开发的工程

三、通过配置寄存器完成点灯的操作

1、调节字体大小

 选择UTF-8编码格式,防止中文乱码的问题

 2、拿出STM32的最小系统板、STLINK和四根母对母的杜邦线

按照插针边上的标识,把3.3V、SWDIO、SWCLK、GND对应连接好,并将STLINK插在电脑上

插上电源后,这个板子上的电源灯应该会常亮,另一个连接在PC13口上的灯默认应该是闪烁状态,这是芯片里的一个测试程序

3、在keil5中,配置调试器

#include "stm32f10x.h"                  // Device header

int main(void)
{
	RCC->APB2ENR=0x00000010;
	GPIOC->CRH=0x00300000;
	GPIOC->ODR=0x00002000;	//全为0时PC13的灯亮起,ODR为2000时PC13灯灭了
	while	(1)
	{
		
	}
}

 四、为工程添加库函数

1、打开工程文件夹,新建一个【Library】文件夹,用来存放库函数

 2、keil里,在Target这里右键,点击添加组

打开Library,Ctrl+A选择全部文件,选择【Add】

 3、添加库函数头文件包含关系的相关文件

4、宏定义

头文件右键,打开文件

滑到文件最下面,看到条件编译语句,如果你定义了USE_STDPERIPH_DRIVER(使用标准外设)这个字符串,下面这个include conf.h语句才有效

 在Define栏目粘贴这个字符串,这样才能包含标注外设库,以及头文件路径User和Library路径也都添加上

 将Library向上调一下,将不用更改的文件夹放在最上面

 五、用库函数实现点灯的操作

不自动提醒的按照以下操作(或者按一下快捷键Ctrl+Alt+空格

 点击函数,右键跳到函数定义

#include "stm32f10x.h"                  // Device header

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);	//GPIOC的外设时钟就配置好了
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOC,&GPIO_InitStructure);
//	GPIO_SetBits(GPIOC,GPIO_Pin_13);	//将PC13号口置为高电平
	GPIO_ResetBits(GPIOC,GPIO_Pin_13);	//将PC13号口置为低电平
	while	(1)
	{
		
	}
}

六、总结

1、建立工程文件夹,Keil中新建工程,选择型号

2、工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹

这一步是为了添加工程文件准备的,建文件夹是因为文件比较多需要分类管理一下,需要用的文件夹一定要复制到工程文件夹里面来

3、工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里

在keil里方便管理文件,因为keil没法直接添加文件夹,所以要重复一下,在keil里建立分组,然后添加文件,这个添加文件是把所有的.h文件和.c文件都添加进来了,因为.h文件是不参与编译的,所以很多工程都不添加.h文件,但是添加.h文件比较方便经常打开看

4、工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹

因为Start、Library、User文件夹是自己建立的,keil软件它并不知道,所以要用自己文件夹里面的.h文件,就必须声明一下这个路径

5、工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER

使用库函数的条件编译,使用库函数就必须定义这个,另外其他工程在这里还声明了一个STM32F10X_MD的字符串,但是keil5新建工程后自动就声明好了,不需要额外声明了

6、工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run

这个就是选择调试器来进行下载的选项了,用STLINK就选择STLINK的那一项即可

工程框架

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/646021.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTTP协议、URL、HTTPS协议 ----- 讲解很详细

本章重点 理解应用层的作用, 初识HTTP协议 了解HTTPS协议 一、HTTP协议 1.认识url 虽然我们说,应用层协议是我们程序猿自己定的,但实际上,已经有大佬们定义了一些现成的,又非常好用的应用层协议,供我们直接参考使…

中国区 AWS 控制台集成 ADFS 登录

前言 本文将使用一台 Windows Server 2019 服务器实现自建 AD ADFS 环境集成到中国区 AWS 控制台进行单点登录. 参考文档: https://aws.amazon.com/cn/blogs/china/adfs-bjs/ 配置 AD 生产环境建议先给本地连接设置静态 IP 地址, 不设置也没事儿, 后面配置功能的时候会有 W…

excel表格写存神器--xlwt

原文链接:http://www.juzicode.com/python-tutorial-xlwt-excel 在 Python进阶教程m2d–xlrd读excel 中我们介绍了Excel表格的读取模块xlrd,今天这篇文章带大家了解Excel表格写存模块xlwt。他俩名字相近都以Excel的简写xl开头,rd是read的简写…

数字图像的几种处理算法

文章目录 1.二值化 2.海报化 3.灰度化 1)分量法 2)最大值法 3) 平均值法 4) 加权平均法 4.模糊化 1.二值化 二值化就是将图像划分成黑和白,通过设定一个标准(如果大于这个标准就设为白,如果小于这个标准,就设为黑&#x…

布鲁可冲刺上市:极其依赖第三方,多个授权将到期,朱伟松突击“套现”

“奥特曼”概念股来了。 近日,布鲁可集团有限公司(下称“布鲁可”)递交招股书,准备在港交所主板上市,高盛和华泰国际为其联席保荐人。据贝多财经了解,布鲁可的经营主体为上海布鲁可科技集团有限公司。 天眼…

Kiwi浏览器 - 支持 Chrome 扩展的安卓浏览器

​【应用名称】:Kiwi浏览器 - 支持 Chrome 扩展的安卓浏览器 ​【适用平台】:#Android ​【软件标签】:#Kiwi ​【应用版本】:124.0.6327.2 ​【应用大小】:233MB ​【软件说明】:一款基于开源项目 Chr…

【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt窗口 | 菜单栏 | QMenuBar的使用及说明 文章编号:Qt 学习…

Python 小游戏——贪吃蛇

Python 小游戏——贪吃蛇 文章目录 Python 小游戏——贪吃蛇项目介绍环境配置代码设计思路1. 初始化和变量定义2. 创建游戏窗口和FPS控制器3. 初始化贪吃蛇和食物的位置4. 控制贪吃蛇的方向和分数5. 主游戏循环 难点分析源代码呈现代码结果 项目介绍 贪吃蛇游戏是一款通过上下…

解析售后维修服务平台如何助力企业高效运营与决策

随着生活质量的不断提高,人们对于售后服务的要求也越来越多。因此,售后服务已经成为企业竞争力的重要组成部分。售后服务平台作为连接企业与消费者的桥梁,不仅关乎着消费者的满意度,而且直接影响着企业的品牌形象与市场地位。那么…

音视频学习规划

文章目录 概述闲聊点 小结 概述 最近在学习音视频,觉得还是要先写个提纲,给自己制定下学习路线及目标。先写下我的个人流程及思路。 ffmpeg的命令ffmpeg api播放器流媒体RTMP,HLS 闲聊点 先说下学习命令行吧,学习命令行是为了…

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第29课-会员制展厅

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第29课-会员制展厅 使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎&…

记一次安卓“Low on memory“崩溃问题

前言 最近再调人脸识别算法相关demo,发现调试期间总是偶发性崩溃,捕获不到异常的那种,看日志发现原因是Low on memory,一开始还疑惑 App内存不够应该是OOM啊,怎么会出现这种问题,百思不得其解,直到我打开了 Android s…

HTML+CSS+JS(web前端大作业)~致敬鸟山明简略版

HTMLCSSJS【动漫网站】网页设计期末课程大作业 web前端开发技术 web课程设计 文章目录 一、网站题目 二、网站描述 三、网站介绍 四、网站效果 五、 网站代码 文章目录 一、 网站题目 动漫网站-鸟山明-龙珠超 二、 网站描述 页面分为页头、菜单导航栏(最好可下拉&…

Web Server项目实战2-Linux上的五种IO模型

上一节内容的补充:I/O多路复用是同步的,只有调用某些API才是异步的 Unix/Linux上的五种IO模型 a.阻塞 blocking 调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停地去检查这个函数有没有返回&#xff0c…

前端---闭包【防抖以及节流】----面试高频!

1.什么闭包 释放闭包 从以上看出:一般函数调用一次会把内部的数据进行清除--但是这种操作却可以一起保留局部作用域的数据 // 优点:1、可以读取函数内部的变量 2、让这些变量始中存在局部作用域当中 2.闭包产生的两种业务场景:防抖、节流 2.1防抖 举…

PLC_博图系列☞R_TRIG:检测信号上升沿

PLC_博图系列☞R_TRIG:检测信号上升沿 文章目录 PLC_博图系列☞R_TRIG:检测信号上升沿背景介绍R_TRIG: 检测信号上升沿说明参数示例 关键字: PLC、 西门子、 博图、 Siemens 、 R_TRIG 背景介绍 这是一篇关于PLC编程的文章&a…

【微服务】springboot 构建镜像多种模式使用详解

目录 一、前言 二、微服务常用的镜像构建方案 3.1 使用Dockerfile 3.2 使用docker plugin插件 3.3 使用docker compose 编排文件 三、环境准备 3.1 服务器 3.2 安装JDK环境 3.2.1 创建目录 3.2.2 下载安装包 3.2.3 配置环境变量 2.2.4 查看java版本 3.3 安装maven …

Neural Networks and Deep Learning环境搭建

1.进入Anaconda prompt 2.创建虚拟环境 (1)最简单的创建 python 虚拟环境的命令是: conda create -n your_env_name # your_env_name 为你虚拟环境名(2)我在这里创建一个名为:deep_study的 python2.7版…

Outlook关闭垃圾邮件过滤的方法

Outlook关闭垃圾邮件过滤的方法 | LogDicthttps://www.logdict.com/archives/outlookguan-bi-la-ji-you-jian-guo-lu-de-fang-fa

解决vite打包只生成了一个css和js文件问题

文章目录 1. 打包遇到的问题2. 问题原因及修改3. 调整后再次打包🆗 1. 打包遇到的问题 今天整了一个项目,试了下打包,发下打包后只生成了一个css文件,和一个js文件, 这样肯定是不行的,因为这样这个文件的包…