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

STM32F103C8T6学习笔记1--新建工程模板

1、简介

STM32是一系列由STMicroelectronics(瑞士意法半导体)公司设计和生产的32位微控制器产品线。这些微控制器基于ARM Cortex-M内核,并具有高性能、低功耗和多种外设接口的特点。STM32处理器被广泛应用于各种嵌入式系统领域,包括工业控制、消费电子、汽车电子、物联网等。

STM32处理器系列有多个型号,包括STM32F0、STM32F1、STM32F2、STM32F3、STM32F4、STM32F7、STM32L0、STM32L1、STM32L4等。不同型号的STM32处理器具有不同的性能和功能特点,以适应不同应用场景的需求。

STM32处理器采用了丰富的外设接口,包括多个通用输入输出(GPIO)引脚、通用定时器(TIM)、通用串行总线(USART、SPI、I2C)、模拟到数值转换器(ADC)等。这些外设接口可以连接到各种外部设备,从而实现不同应用的功能要求。

此外,STM32处理器还提供了丰富的开发工具和软件支持,包括集成开发环境(IDE)、编译器、调试器等。开发者可以使用这些工具进行应用程序的开发、调试和部署。

总的来说,STM32处理器是一种功能强大、灵活性高的32位微控制器,适用于各种嵌入式系统应用。它具有低功耗、高性能和丰富的外设接口,以及完善的开发工具和软件支持。

2、新建工程模板

(1)库函数开发方式

由于STM32F103C8T6芯片的寄存器众多,名字难记,因此不再适合寄存器方式开发,而采用固件库的形式开发,就是底层对寄存器的操作通过函数封装,我们只需要记住函数的功能即可,当然对于初学者,函数名字也不是太好记,不过用的多了,自然就记住了。

我们先建立一个工程模板,将固件库资料拷贝到工程模板里。

(2)Keil5新建工程

选择器件

这个新建工程小助手页面直接叉掉即可。

工程就新建好了。

(3)相关固件库文件拷贝到工程目录下Start文件夹

a、在工程模板目录里面新建一个文件夹start,存放STM32的启动文件。将\工程模版\STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm下面所有的文件都复制到Start里面

b、将\工程模版\STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x下面的stm32f10x.h(内核外围设备的寄存器地址头文件)、system_stm32f10x.c、system_stm32f10x.h(系统时钟配置文件)这三个文件也复制到Start里面

c、将工程模版\STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport里面的内核的寄存器描述及配置文件也复制到Start文件夹里面。

(4)keil MDK工程资源管理器

将Target1下面的SourceGroup1改名为Start,添加前面的文件到该Start下。

添加下面6个文件到Start下。注意启动文件startup开头的文件的名字后缀不要选错,启动文件只能有一个。

将头文件路径添加MDK工程配置里面,点击魔术棒。

(4)User文件夹放置main函数

按照在工程目录建Start的方式,建User。

(5)编译工程

在main函数里面插入头文件"stm32f10x.h"  

3、通过操作寄存器来点亮LED

以上模版只是添加了内核启动文件,时钟、内核头文件,尚未添加固件库,可以通过操作寄存器来进行开发。

(1)配置STlink下载方式,就是将asf(AXF文件是一种ARM交叉编译器生成的可执行文件格式,用于嵌入式系统开发。它包含了可执行程序的机器指令、数据以及其他相关的调试信息。AXF文件可以被加载到ARM处理器上运行。在ARM开发中,AXF文件通常会通过调试工具进行调试和分析。)加载到芯片内在线调试。也可以同时生成hex二进制文件。

(2)点亮LED灯的代码(PC13输出低电平点亮)

#include "stm32f10x.h"                  // Device headerint main()
{RCC->APB2ENR=0x00000010;//打开GPIOC的时钟GPIOC->CRH=0x00300000;   //配置GPIOC13的输出模式为推挽输出50MHzGPIOC->ODR=0x00000000;  //点亮PC13灯while(1){}
}

(3)仿真图现象

4、添加库函数

(1)Library文件夹

新建Library文件夹存放库函数文件。

将\工程模版\STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\

Libraries\STM32F10x_StdPeriph_Driver\src下面所有的C文件复制到Library文件夹

将\工程模版\STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\

Libraries\STM32F10x_StdPeriph_Driver\inc下面所有的H文件复制到Library文件夹

(2)添加Library文件夹到工程目录

(3)将配置文件、中断文件复制到User文件夹

将工程模版\STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Project\

STM32F10x_StdPeriph_Template里面的配置文件、中断文件复制到User文件夹内,并在keil里面添加到工程中。

将stm32f10x.h里面的USE_STDPERIPH_DRIVER,放到工程配置选项里。

5、操作库函数熄灭LED

#include "stm32f10x.h"                  // Device headerint main()
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);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_WriteBit(GPIOC,GPIO_Pin_13,Bit_SET);while(1){}
}

6、建立System文件夹存放用户自定义函数

(1)将延时函数复制到System文件夹

(2)将System文件夹包含到工程文件中

(3)添加文件到工程文件管理器

(4)编写LED(PC13)灯闪烁代码

#include "stm32f10x.h"                  // Device header
#include "delay.h"  int main()
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);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);delay_init();while(1){GPIO_WriteBit(GPIOC,GPIO_Pin_13,(BitAction)0);delay_ms(50);GPIO_WriteBit(GPIOC,GPIO_Pin_13,(BitAction)1);delay_ms(50);}
}

在Proteus仿真图或者硬件上测试即可。

最后可以删除工程模板里面的固件库文件夹,以后每次新建工程不需要再做了,只要复制这个文件夹即可。

 

相关文章:

STM32F103C8T6学习笔记1--新建工程模板

1、简介 STM32是一系列由STMicroelectronics(瑞士意法半导体)公司设计和生产的32位微控制器产品线。这些微控制器基于ARM Cortex-M内核,并具有高性能、低功耗和多种外设接口的特点。STM32处理器被广泛应用于各种嵌入式系统领域,包…...

RK3568平台开发系列讲解(内存篇)Linux 内存优化

🚀返回专栏总目录 文章目录 一、如何正确采集 Linux 内存可用空间二、系统内存优化参考步骤2.1、优化 Linux Kernel module 所占用的内存空间2.3、将 Wi-Fi built-in kernel2.4、优化 Linux 文件系统所占用的内存空间2.5、上层优化2.6、客户定制优化2.6.1、对具体客户的具体产…...

企业数字化转型实施中的挑战与解决方案:架构引领的战略路径

在企业推动数字化转型的过程中,通常会面临复杂的挑战。随着技术的不断演进和业务环境的变化,企业架构(Enterprise Architecture, EA)成为帮助企业应对这些挑战的关键工具。通过提供一个全面的战略蓝图,EA使企业能够在保…...

《数字图像处理基础》学习05-数字图像的灰度直方图

目录 一,数字图像的数值描述 1,二值图像 2,灰度图像 3,彩色图像 二,数字图像的灰度直方图 一,数字图像的数值描述 在之前的学习中,我知道了图像都是二维信息&…...

【漏洞复现】某平台-QRcodeBuildAction-LoginSSO-delay-mssql-sql注入漏洞

《Java代码审计》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484219&idx1&sn73564e316a4c9794019f15dd6b3ba9f6&chksmc0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene21#wechat_redirect 《Web安全》h…...

Centos安装ZooKeeper教程(单机版)

本章教程介绍,如何在Centos7中,安装ZooKeeper 3.9.3版本。 一、什么是ZooKeeper ? Apache ZooKeeper 是一个分布式协调服务,用于大型分布式系统中的管理和协调。它为分布式应用提供了一个高性能的通信框架,简化了开发人员在构建复杂分布式系统的任务。ZooKeeper 能够解决一…...

A011-基于SpringBoot的视频点播系统设计与实现

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装视频点播系统软件来发挥其高效地信息处理的作用&#xff0c…...

云原生+AI核心技术&最佳实践

以下内容是我在陕西理工大学2023级人工智能专业和网络专业的演讲内容,分享给大家。 各位老师、同学们,大家好啊!能在这里跟大家一起聊聊咱们计算机专业那些事儿,我真的觉得超级兴奋! 首先,自我介绍一下&am…...

【Android】Service

文章目录 1.service2.startService3.bindService4.区别 1.service 在Android开发中,Service 是一个可以在后台长时间运行的组件,用于执行耗时操作或执行那些不需要与用户界面直接交互的任务。Service 不依赖于用户界面,即使用户切换到其他应…...

2-142【软件无线电原理与应用作业】基于matlab的圆形阵列的波束形成进行仿真

【软件无线电原理与应用作业】基于matlab的圆形阵列的波束形成进行仿真,具有14页文档。假设发射信号载频为1GHz,圆形阵列半径为0.8米,在圆周上均匀布置30个阵元。1.画出指向0度的方向图。2.如果目标在0度,有一不相干的干扰信号在3…...

在目录中按扩展名分类文件(python学习)(11.1)

# -*- coding:utf-8 -*- # FileName :SortBySuffix.py # Time :2024/11/1 15:13 # Author :liyiwei# Python脚本按扩展名在目录中对文件进行排序 import os from shutil import movedef sort_files(directory_path):# 遍历指定目录下的所有文件和文件夹for filename i…...

【网络安全 | 漏洞挖掘】逻辑漏洞+无限制爆破实现业务瘫痪

未经许可,不得转载。 文章目录 前言正文前言 目标:target.com,是一个为设计团队服务的工作平台。 该程序允许用户创建账户并组建团队,指定的领导者担任管理员。团队类型包括: 1、免费团队:限于一个项目,最多三份文件。 2、学生团队:项目和文件无限制,学生可免费获…...

【WRF工具】MPAS(多尺度预测模型)-输出WRF初始和横向边界条件

【WRF工具】MPAS(多尺度预测模型)-输出WRF初始和横向边界条件 MPAS概述模型概述主要特点 使用MPAS输出WRF初始和横向边界条件参考 从WPS的v3.9版本开始,metgrid.exe程序能够从 跨尺度预测模型(The Model for Prediction Across Sc…...

分数阶傅里叶变换与信息熵怎么用于信号处理?

天马行空的理解与思考方式:分数阶傅里叶变换与信息熵怎么用于信号处理? ChiX-Y 快速学习,快速尝试,快速失败 已关注 35 人赞同了该文章 这篇文章希望能写的有趣,同时有质量,学习就是要多维度多角度&…...

web3.0 开发实践

优质博文:IT-BLOG-CN 一、简介 Web3.0也称为去中心化网络,是对互联网未来演进的一种概念性描述。它代表着对现有互联网的下一代版本的设想和期望。Web3.0的目标是通过整合区块链技术、分布式系统和加密技术等新兴技术,构建一个更加去中心化…...

【华为HCIP实战课程三十】中间到中间系统协议IS-IS路由渗透及TAG标识详解,网络工程师

一、路由泄露 1、默认情况Level 1不会学到Level2的明细路由,L2可以学到L1的明细路由 2、FIB数据转发,路由负载,通过随机数据中的五元组hash,hash值决定数据走哪条链路 R1设备ping和telnet通过抓包查看走的都是S1/0/0接口 抓包进行过滤;ip.a…...

大模型论文精华-20241104

工具而不是对等:框架如何影响人们对 Teams 中 AI 代理的看法 研究问题 随着人工智能技术的发展及其在团队环境中日益广泛的应用,人们对于如何理解和评价AI代理的态度和看法变得尤为重要。该研究关注于探讨不同框架下人们对AI代理的感知差异&#xff0c…...

mac ssh 连接 linux 服务器

生成 SSH 密钥对 打开终端: 你可以通过 Spotlight 搜索 “Terminal” 打开终端。 生成密钥对: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 手动复制公钥(可选) 如果 ssh-copy-id 命令不可用&#xff0…...

逻辑卷建立

逻辑卷 lvm逻辑卷即为:logical volume manager逻辑管理卷,是linux系统下管理硬盘分区的一种机制,lvm适合于管理大型存储文件,用户可以动态的对磁盘进行扩容 作用 lvm:linux系统的一个重要的存储技术 不同的硬盘的不…...

算法深度剖析:前缀和

文章目录 前言一、一维前缀和模板二、二维前缀和模板三、寻找数组的中心下标四、除自身以外数组的乘积五、和为 K 的子数组六、和可被 K 整除的子数组七、连续数组八、矩阵区域和 前言 本章将深度剖析前缀和,以及总结前缀和模板。 前缀和是一种在算法和数据处理中…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

【51单片机】4. 模块化编程与LCD1602Debug

1. 什么是模块化编程 传统编程会将所有函数放在main.c中&#xff0c;如果使用的模块多&#xff0c;一个文件内会有很多代码&#xff0c;不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里&#xff0c;在.h文件里提供外部可调用函数声明&#xff0c;其他.c文…...