【STM32】新建工程

news2024/11/17 1:50:09

学习来源:[2-2] 新建工程_哔哩哔哩_bilibili

目前STM32的开发主要有基于寄存器的开发方式基于标准库也就是库函数的方式基于HAL库的方式。本学习是基于库函数的方式。(各种资料去百度云下载)

1 建立工程文件夹

Keil中新建工程,选择型号

选择相应的芯片型号(STM32F103C8T6)

关掉工程小助手

2 在工程文件夹中新建文件

工程文件夹里建立Start、复制固件库里面的文件到工程文件夹;

2.1 STM32的启动文件

在工程文件夹里新建start文件夹

找到STM32的启动文件

\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm

\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\

stm32f10x.h是STM32的外设寄存器描述文件,作用和51单片机的REGX52.H一样,是用来描述STM32有哪些寄存器和它对应的地址的。

两个System文件主要是用了配置时钟的。STM32主频72MHz就是System中的函数配置的。

复制到Start文件夹中。

因为这个STM32是内核和内核外围的饺备组成的,所以添加内核寄存器的描述文件到Start文件下

\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport

2.2 将复制的文件添加到工程

添加启动文件(为什么选这个,后面会说)

剩下的.c和.h文件都要添加进来,结果如图

2.3 在工程选项中添加头文件的路径

添加start的路径

2.4 新建main函数

先在工程目录下添加User文件夹,再在界面新建User目录,添加c文件,将路径改到User下

#include "stm32f10x.h"                  // Device header

int main(void)
{
	while(1)
	{
	
	}

}

编译

这个工程目前还没有添加STM32的库函数,所以它还是基于寄存器开发的工程。(想使用寄存器开发STM32到这里就可以了,但是我们是基于库函数的学习)。

调编码格式(UTF-8)、字体、缩进

2.5 通过配置寄存器来完成点灯实验

【了解】

配置调试器

再点击设置按钮

勾上选项之后。我们下载程序后会立马复位并执行。这样方便些。

打开STM32的参考手册(STM32F10xxx参考手册)

(a)首先是RCC的寄存器,来使能GPIO的时钟,GPIO都是APB2的外设

RCC: Reset and Clock Control,即复位和时钟控制。

APB2 外设时钟使能寄存器(RCC_APB2ENR)

这一位就是使能GPIOC的时钟的

写1是打开时钟,即

RCC->APB2ENR = 0x00000010;

(b)需要配置PC13口的模式(端口配置高寄存器(GPIOx_CRH) (x=A..E))

CNF13和MODE13就是配置13号口的

CNF配置为通用推挽输出模式,MODE配置为输出模式。

其他全为0

GPIOC->CRH = 0x00300000;

(c)GPIO输出数据

测试代码

#include "stm32f10x.h"                  // Device header

int main(void)
{
	RCC->APB2ENR = 0x00000010;
	GPIOC->CRH = 0x00300000;
	GPIOC->ODR = 0x00000000;		// 低电平点亮
//	GPIOC->ODR = 0x00002000;		// 灭
	
	while(1)
	{
	
	}

}

需要不断查手册,来了解寄存器的功能。(不方便)

2.6 通过库函数实现点灯实验

在工程目录下新建Library文件夹,将下述文件夹下的所有文件粘贴到Library下(库函数的源文件和头文件)

\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src
\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\inc

结果如图

此时库文件还不能使用,需要再添加配置文件,将下述文件粘贴到User路径下,再在keil中将新加的文件加入

\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template

结果如图

最后需要一个宏定义

USE_STDPERIPH_DRIVER

将文件夹添加进来

代码步骤和配置寄存器是一样的

(1)配置时钟-RCC_APB2PeriphClockCmd

本质函数配置寄存器

(2)配置端口模式-GPIO_Init

两个参数,GPIO_TypeDef* GPIOx和GPIO_InitTypeDef* GPIO_InitStruct

GPIOx选择GPIOC即可;

GPIO_InitStruct是一个结构体

GPIO_Pin

GPIO_Mode

GPIO_Speed

测试代码

#include "stm32f10x.h"                  // Device header


int main()
{
	// 使能时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	// 配置端口模型
	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_SetBits(GPIOC, GPIO_Pin_13);       // 高电平  灭
	GPIO_ResetBits(GPIOC, GPIO_Pin_13);       // 低电平  亮
	
	GPIO_Init(GPIOC, &GPIO_InitStructure);
	while (1)
	{
		
	
	}

}

3 型号分类及缩写

前面选择启动文件的时候,选择后缀为md的文件。我们的型号是STM32F103,64k

4 总结新建工程

  • 建立工程文件夹,Keil中新建工程,选择型号
  • 工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹
  • 工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里
  • 工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹
  • 工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER
  • 工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run

5 工程架构

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高性能Mysql第三版学习(一)

学习目标: 高性能Mysql第3版 学习内容: MySQL架构与历史Mysql基座测试服务器性能Schema与数据类型优化创建高性能的索引查询性能优化Mysql高级特性Explain 学习时间: 周一至周五晚上 9点—晚上10点周六晚上9点-10点周日晚上9 点-10点 学习…

公众号留言功能还有可能开放吗?

为什么公众号没有留言功能?2018年2月12日,TX新规出台:根据相关规定和平台规则要求,我们暂时调整留言功能开放规则,后续新注册帐号无留言功能。这就意味着2018年2月12日号之后注册的公众号不论个人主体还是组织主体&…

初出茅庐的小李博客之C语言必备知识共用体

C语言必备知识共用体 共用体是一种构造数据类型,有时候也称之为联合体。 它的用途: 使几个不同类型的变量共占一段内存。 共用体举例 union 共用体名 { 类型标识符 成员名;类型标识符 成员名; };union data //共用体名字是data{ int i; …

面试题:什么是自旋锁?自旋的好处和后果是什么呢?

文章目录 什么是自旋自旋和非自旋的获取锁的流程 自旋锁的好处AtomicLong 的实现实现一个可重入的自旋锁示例自旋的缺点适用场景 什么是自旋 “自旋”可以理解为“自我旋转”,这里的“旋转”指“循环”,比如 while 循环或者 for 循环。“自旋”就是自己…

初学剪辑者找视频素材就上这6个网站

视频剪辑必备的6个素材网站,高清无水印,还可以免费下载,无版权限制,赶紧收藏起来! 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYxMjky 菜鸟图库网素材非常丰富,网站主要以设计类素材为主&#…

宝塔 Linux 面板安装一个高大上的论坛程序 —— Flarum

这个是很早搭建的版本,基于宝塔面板,比较复杂,如果想要简单的搭建方法,可以参看咕咕新写的这篇: 【好玩的 Docker 项目】10 分钟搭建一个高大上的论坛程序 购买腾讯云轻量应用服务器 待补充 登录服务器 待补充 BBR 加速脚本 BBR 加速脚本: BASH cd /usr/src &…

XML映射文件

<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"org.mybatis.example.BlogMapper&q…

Chatbot开发三剑客:LLAMA、LangChain和Python

聊天机器人&#xff08;Chatbot&#xff09;开发是一项充满挑战的复杂任务&#xff0c;需要综合运用多种技术和工具。在这一领域中&#xff0c;LLAMA、LangChain和Python的联合形成了一个强大的组合&#xff0c;为Chatbot的设计和实现提供了卓越支持。 首先&#xff0c;LLAMA是…

蓝牙运动耳机哪个好?蓝牙运动耳机排行榜前十名

​在运动中&#xff0c;音乐可以激发你的热情和动力&#xff0c;而一款好的运动耳机则可以让你更好地享受音乐。然而&#xff0c;市面上的运动耳机品牌和型号众多&#xff0c;质量参差不齐。所以&#xff0c;今天精选了5款市面上比较优秀的运动耳机给大家参考&#xff0c;是你运…

【开源】基于JAVA的车险自助理赔系统

项目编号&#xff1a; S 018 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S018&#xff0c;文末获取源码。} 项目编号&#xff1a;S018&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 车…

Vatee万腾的科技冒险:Vatee独特探索力量的数字化征程

在数字化时代的激流中&#xff0c;Vatee万腾以其独特的科技冒险精神&#xff0c;引领着一场前所未有的数字化征程。这不仅仅是一次冒险&#xff0c;更是对未知的深度探索&#xff0c;将科技的力量推向新的高度。 Vatee万腾在科技领域敢于挑战传统&#xff0c;积极探索未知的可能…

ThreeJs实现简单的动画

上一节实现可用鼠标控制相机的方式实现动态效果&#xff0c;但很多时候是需要场景自己产恒动态效果&#xff0c;而不是通过鼠标拖动&#xff0c;此时引入一个requestAnimationFrame方法&#xff0c;它实际上是通过定时任务的方式&#xff0c;每隔一点时间改变场景中内容后重新渲…

详解:什么是“智能合同管理”

未来已来&#xff0c;行业数字化进行的如火如荼&#xff0c;并逐步驶入深水区。合同是企业开展经营活动的重要文件&#xff0c;也是风险管控的核心地带&#xff0c;做好合同管理对企业运营效率的提升至关重要。近年来&#xff0c;合同管理已经跟随企业数字化的浪潮进入转型时期…

MySQL 及 SQL 注入

文章目录 前言什么是sql注入防止SQL注入Like语句中的注入后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Mysql &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现…

计算机体系结构概念总结

CH1 基本概念 课件补充 概念汇总 CH2 指令系统 课件补充 能够改变控制流的指令&#xff1a;分支、跳转、过程调用、过程返回 概念汇总 课后习题 CH3 流水线 课件补充 概念汇总 指令发射&#xff1a;指令从流水线的译码段进入执行段的过程称为指令发射。 向量处理机&#xf…

hdlbits系列verilog解答(exams/m2014_q4f)-47

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 实现以下电路&#xff1a; 二、verilog源码 module top_module (input in1,input in2,output out);assign out in1 & (~in2);endmodule三、仿真结果 转载请注明出处&#xff01;

AI赋能数据表设计

数据表设计软件用过多种&#xff0c;用Ai 设计表几年Ai大模型爆发之后提升了新的高度 用navicat 设计表就是在跟团队的人介绍这次功能的表结构时&#xff0c;没办法看备注&#xff0c;只能看英文字段&#xff0c;导致在比较复杂的表中&#xff0c;总是在表结构和图形结构中来回…

【计网 可靠数据传输RDT】 中科大笔记 (十 一)

目录 0 引言1 RDT的原理RDT的原理&#xff1a; 2 RDT的机制与作用2.1 重要协议停等协议&#xff08;Stop-and-Wait&#xff09;:连续ARQ协议: 2.2 机制与作用实现机制&#xff1a;RDT的作用&#xff1a; &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#x…

Leetcode—2824.统计和小于目标的下标对数目【简单】

2023每日刷题&#xff08;三十九&#xff09; Leetcode—2824.统计和小于目标的下标对数目 实现代码 class Solution { public:int countPairs(vector<int>& nums, int target) {int n nums.size();sort(nums.begin(), nums.end());int left 0, right left 1;i…

ASO优化之如何测试应用的屏幕截图

截取屏幕截图并上传到应用商店后&#xff0c;我们需要对其进行测试和优化&#xff0c;从而来获得更高的转化率&#xff0c;精美的图片有助于提高应用在商店的安装率。 1、定义目标受众。 战略性地决定测试哪些目标受众&#xff0c;可以通过年龄、性别、地点、兴趣等来定义我们…