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

【STM32】STM32F103C6T6标准外设库

1、标准外设库获取

第一步,首先获取标准外设库,可以从官网进行下载。

https://www.st.com.cn/zh/embedded-software/stm32-standard-peripheral-libraries.html

根据自己的型号选择不同的系列,我这里选择是STM32F1系列

下载最新版本V3.6,点击获取版本后,需要进行登录账号,没有账号的话,可以填写邮箱,ST官方会通过邮件的方式自动发送下载链接,一般点击之后几分钟之内就会收到邮件,邮件里面点击链接进行获取软件。

2、标准库模板搭建

在标准库模块搭建之前,需要做好下面工作,keill安装不做过多介绍,pack包可以在keill在线安装,也可以通过官网下载安装,标准库第一步已经完成。

  • 已经安装好 Keil 软件
  • 已经安装好 STM32F1xx 的 Pack 包
  • 已经下载好 STM32F1xx 标准固件库

2.1、工程文件目录创建

  • Project:放工程文件,编译文件等。
  • Firmware:放 ARM 内核文件,标准外设库文件等。
  • Hardware:放开发板的硬件驱动文件。
  • User:放 main 函数,stm32f4xx_it 文件,systick 文件。
  • Doc: 放 readme.txt 文件,工程说明文件。

2.2、固件库移植

下载官方标准固件库之后,得到是是一个zip压缩文件,将文件解压。

然后将en.stsw-stm32054_v3-6-0\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries 文件夹下的内容全部拷贝到新建目录的Firmware 下

2.3、程序入口移植

找到我们的固件库的下载目录,将en.stsw-stm32054_v3-6-0\STM32F10x_StdPeriph_Lib_V3.6.0\Project\STM32F10x_StdPeriph_Template中的如下文件进行拷贝

将这些文件全部都拷贝到我们的新建目录User文件下

2.4、Keil工程相关配置

打开 keil,点击最上面的 Project 选项卡,选择 New uVision Project 选项新建一个工程

选择保存路径为我们刚才创建的文件夹下的 Project,文件名为 STM32Template,然后点击保存

现在我们工程创建好了,下一步选择对应芯片型号

确定所需芯片之后,弹出 RTE 的环境配置对话框,选择工程所需的组件,不用配置,点击取消

下一步分组创建,将相应文件添加到分组中

创建完分组左边项目览 如下图所示,Firmare中存放着我们的标准外设文件。根据需要进行添加,

需要注意,不同103的启动文件不一样,根据自己的型号进行选择,我这边是STMF103C6T6,32k内存,属于小容量芯片,选择startup_stm32f10x_ld.s

如何选择可以看这下面两个图片,了解自己的芯片内存大小选择合适的启定文件导入。

导入之后下一步进入工程配置

点击魔法棒,进入配置,在Target中选择V6.21。

output中勾选Browse infomation,勾选之后编译的时候自动生成hex文件。

在C/C++中按照如下图进行配置,include Path为文件路径,根据自己分组进行添加。

在Debug选择自己的烧录方式

2.5、增加延时函数

在User中增加systick.hsystick.c

/*!\file    systick.h\brief   the header file of systick\version 2016-08-15, V1.0.0, firmware for GD32F4xx\version 2018-12-12, V2.0.0, firmware for GD32F4xx\version 2020-09-30, V2.1.0, firmware for GD32F4xx\version 2022-03-09, V3.0.0, firmware for GD32F4xx
*//*Copyright (c) 2022, GigaDevice Semiconductor Inc.Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:1. Redistributions of source code must retain the above copyright notice, thislist of conditions and the following disclaimer.2. Redistributions in binary form must reproduce the above copyright notice,this list of conditions and the following disclaimer in the documentationand/or other materials provided with the distribution.3. Neither the name of the copyright holder nor the names of its contributorsmay be used to endorse or promote products derived from this software withoutspecific prior written permission.THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
OF SUCH DAMAGE.
*/#ifndef SYS_TICK_H
#define SYS_TICK_H#include <stdint.h>/* configure systick */
void systick_config(void);
/* delay a time in milliseconds */
void delay_1ms(uint32_t count);
/* delay decrement */
void delay_decrement(void);void delay_1us(uint32_t count);#endif /* SYS_TICK_H */
/*!\file    systick.c\brief   the systick configuration file\version 2024-01-15, V3.2.0, firmware for GD32F4xx
*//*Copyright (c) 2024, GigaDevice Semiconductor Inc.Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:1. Redistributions of source code must retain the above copyright notice, thislist of conditions and the following disclaimer.2. Redistributions in binary form must reproduce the above copyright notice,this list of conditions and the following disclaimer in the documentationand/or other materials provided with the distribution.3. Neither the name of the copyright holder nor the names of its contributorsmay be used to endorse or promote products derived from this software withoutspecific prior written permission.THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
OF SUCH DAMAGE.
*/#include "stm32f10x.h"
#include "systick.h"volatile static uint32_t delay;/*!\brief    configure systick\param[in]  none\param[out] none\retval     none
*/
void systick_config(void)
{/* setup systick timer for 1000000Hz interrupts */if(SysTick_Config(SystemCoreClock / 1000000U)) {/* capture error */while(1) {}}/* configure the systick handler priority */NVIC_SetPriority(SysTick_IRQn, 0x00U);
}/*!\brief    delay a time in milliseconds\param[in]  count: count in milliseconds\param[out] none\retval     none
*/
void delay_1ms(uint32_t count)
{delay = count*1000;while(0U != delay) {}
}//睡眠1us=1/1000ms
void delay_1us(uint32_t count)
{delay = count;while(0U != delay) {}
}/*!\brief    delay decrement\param[in]  none\param[out] none\retval     none
*/
void delay_decrement(void)
{if(0U != delay) {delay--;}
}

打开"stm32f10x_it.c"拉到最后,然后删除

2.6、程序代码修改

打开 main.c 文件,删除一些不必要的代码,加上系统时钟,剩余部分如下:

#include "stm32f10x.h"
#include <stdio.h>
#include "systick.h"int main(void)
{
//系统滴答时钟初始化
systick_config();while (1){}
}

在stm32f10x_it.h中添加头文件systick.h

3、测试程序

点亮PC13,每秒进行亮灭闪烁。

#include "stm32f10x.h"
#include <stdio.h>
#include "systick.h"//PC13 GPIO初始化void gpio_config() {//开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //开启GPIOC的时钟//使用各个外设前必须开启时钟,否则对外设的操作无效/*GPIO初始化*///定义结构体变量GPIO_InitTypeDef 	GPIO_InitStruct;//GPIO引脚,赋值为第13号引脚GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_13;//GPIO速度,赋值为50MHzGPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//GPIO模式,赋值为推挽输出模式GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;//将赋值后的构体变量传递给GPIO_Init函数GPIO_Init(GPIOC,&GPIO_InitStruct);}int main(void)
{//系统滴答时钟初始化systick_config();//GPIO初始化gpio_config();while (1){//引脚设置为低电平GPIO_ResetBits(GPIOC,GPIO_Pin_13);//延时1000msdelay_1ms(1000);//引脚设置为高电平GPIO_SetBits(GPIOC,GPIO_Pin_13);//延时1000msdelay_1ms(1000);}
}

4、问题与解决

1、STM32报错Error: L6218E: Undefined symbol assert_param

.\Objects\STMF103FC6T6.axf: Error: L6218E: Undefined symbol assert_param (referred from stm32f10x_gpio.o).

在C\C++设置一栏中输入USE_STDPERIPH_DRIVER使宏生效即可解决问题

2、../User/stm32f10x_it.c(136): error: call to undeclared function 'delay_decreme'

delay_decreme未定义,需要在stm32f10x_it.h中添加头文件systick.h

../User/stm32f10x_it.c(136): error: call to undeclared function 'delay_decrement'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]136 |         delay_decrement();

#ifndef __STM32F10x_IT_H
#define __STM32F10x_IT_H#ifdef __cplusplusextern "C" {
#endif /* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "systick.h"
/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */void NMI_Handler(void);
void HardFault_Handler(void);
void MemManage_Handler(void);
void BusFault_Handler(void);
void UsageFault_Handler(void);
void SVC_Handler(void);
void DebugMon_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);#ifdef __cplusplus
}
#endif#endif /* __STM32F10x_IT_H */

相关文章:

【STM32】STM32F103C6T6标准外设库

1、标准外设库获取 第一步&#xff0c;首先获取标准外设库&#xff0c;可以从官网进行下载。 https://www.st.com.cn/zh/embedded-software/stm32-standard-peripheral-libraries.html 根据自己的型号选择不同的系列&#xff0c;我这里选择是STM32F1系列 下载最新版本V3.6&a…...

【学习笔记】Windows GDI绘图(十一)Graphics详解(下)

文章目录 Graphics的方法Graphics.FromImageSetClip设置裁切区域IntersectClip更新为相交裁切区域TranslateClip平移裁切区域IsVisible判断点或矩形是否在裁切区域内MeasureCharacterRanges测量字符区域MeasureString测量文本大小MultiplyTransform矩阵变换 Graphics的方法 Gr…...

win10环境下nodejs安装过程

打开 https://nodejs.org/en/官网下载node.js 2.下载完成后的安装文件为node-v16.16.0-x64.msi&#xff0c;双击进行安装即可。 3.一直默认安装&#xff0c;记得可以更改安装路径 4.其他不用打勾&#xff0c;一直next&#xff0c;安装完成即可。 5.安装完成后&#xff0c;wi…...

亚信安慧AntDB:卓越的拓展性和灵活性

在当今这个信息爆炸的时代&#xff0c;企业对数据处理的需求不断增长&#xff0c;传统的数据库系统往往难以应对海量数据的存储和处理挑战。然而&#xff0c;随着亚信安慧AntDB的出现&#xff0c;解决这一难题的曙光终于出现在眼前。AntDB不仅仅具备了高吞吐、高并发、高性能的…...

【计算机毕设】基于SpringBoot的中小企业设备管理系统设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 在中小企业中&#xff0c;设备管理是确保生产和运营效率的重要环节。传统的设备管理通常依赖于手工记录和人工管理&#xff0c;容易导致数据不准确、…...

每日一练 - BGP配置中的认证方法

01 真题题目 在 BGP 配置中使用认证,应该如何配置? A.一对 BGP 对等体之间必频使用相同的 MD5 PASSWORD B.同一个 AS 内的所有路由器都必须使用相同的 password C.一台路由器上的所有 BGP 对等体都必频使用相同的 password D.一对 BGP 对等体之间必须使用相同的明文 passwo…...

人机交互中的阴差阳错

人机交互是一门研究系统与用户之间的交互关系的学问。它旨在设计和实现使人们能够与计算机系统进行有效交互的方法和技术。人机交互领域研究的热门话题之一就是人工智能。另一个热门话题就是增强现实&#xff08;Augmented Reality&#xff09;和虚拟现实&#xff08;Virtual R…...

个人网站建设方案书

个人网站建设方案书 一、项目背景 随着互联网的迅猛发展&#xff0c;个人网站已经成为展示个人能力、情感表达的重要平台。无论是个人品牌推广&#xff0c;还是个人作品展示&#xff0c;个人网站都能够为个人提供一个独特的展示空间。因此&#xff0c;建设一个个人网站已经成为…...

IIS7整合Tomcat9服务器,并搭建ASP+PHP+JSP完整运行环境

本文以Windows Vista系统为例&#xff0c;详细讲解IIS7整合Tomcat服务器&#xff0c;同时支持ASPPHPJSP三种Web动态网页技术的方法。 Vista系统自带的IIS版本为7.0&#xff0c;能安装的IE浏览器的最高版本为IE9。IE9也是Vue2前端框架支持的最低浏览器版本。 【准备工作】 去微…...

IT运维重难点剖析及应对策略

运维工作作为信息技术领域的重要组成部分&#xff0c;对于保障企业信息系统的稳定运行具有至关重要的作用。然而&#xff0c;在实际工作中&#xff0c;运维人员常常面临各种重难点问题&#xff0c;这些问题不仅影响运维效率&#xff0c;还可能对企业的正常运营造成不利影响。本…...

【Python学习】面向对象(OOP)

让我们从Python面向对象编程&#xff08;OOP&#xff09;的基础概念开始&#xff0c;逐步深入到继承、多态、特殊方法和运算符重载。 一、类和对象 什么是类和对象&#xff1f; - 类&#xff08;Class&#xff09;&#xff1a;类是创建对象的蓝图或模板。它定义了一组属性和方法…...

鸿蒙HarmonyOS实战—如何使用Video组件播放视频

1.视频播放 鸿蒙系统中&#xff0c;关于视频播放&#xff0c;可以使用上层视频组件Video。 参数如下 src 支持file:///data/storage路径前缀的字符串&#xff0c;用于读取应用沙箱路径内的资源。需要保证目录包路径下的文件有可读权限。 说明&#xff1a;视频支持的格式是&am…...

【Paddle2ONNX】为 Paddle2ONNX 升级自适应ONNX IR Version功能

1 简介 最近在浏览 Paddle2ONNX 的 Issues 时&#xff0c;我发现有用户需要让 Paddle2ONNX 支持导出的 ONNX 模型根据opset版本自适应 ONNX IR 版本&#xff0c;于是我动手添加了这个功能。 能否指定 IR representation的版本 Issue #1248 PaddlePaddle/Paddle2ONNX 2 什么…...

JS 中的DOM 操作

目录 概念Node接口NodeList接口,HTMLCollection接口ParentNode接口,ChildNode接口Document节点Element节点属性的操作Text节点和DocumentFragment节点CSS操作Mutation Observer API概念 D...

短剧出海怎么做?

短剧出海&#xff0c;即是指将制作的短剧内容推广到国际市场&#xff0c;吸引海外观众。以下是一些策略和步骤&#xff0c;可以帮助你实现这一目标&#xff1a; 研究目标市场&#xff1a;了解你想要进入的海外市场的文化、偏好和消费习惯。这包括语言、流行文化、媒体消费习惯等…...

【C++修行之道】类和对象(四)运算符重载

目录 一、 运算符重载 函数重载和运算符重载有什么关系&#xff1f; 二、.*运算符的作用 三、运算符重载的正常使用 四、重载成成员函数 五、赋值运算符重载 1.赋值运算符重载格式 传值返回和引用返回 有没有办法不生成拷贝&#xff1f; 2. 赋值运算符只能重载成类的…...

伯克希尔也被ST?

地球&#xff08;最&#xff09;贵股票突然闪崩&#xff0c;美股故障再次上演。昨晚齐刷刷一片的美股出现行情异常&#xff0c;伯克希尔、蒙特利尔银行、巴里克黄金等股票股价跌幅超过98%。其中&#xff0c;巴菲特旗下伯克希尔哈撒韦A类股股价更是暴跌99.97%&#xff0c;股价从…...

低代码和零代码软件时代质量管理(QM)和质量管理系统(QMS)

【前言】 质量控制过程的目的是为了确保产品的制造标准得到保持和改进。质量控制过程使公司能够满足客户的期望&#xff0c;同时确保产品质量的一致水平。采用这些标准创造了一种公司文化&#xff0c;鼓励所有员工努力实现高质量的生产标准。低代码和零代码软件可以成为质量控…...

JS跨页面或跨JS文件对变量赋值

JS跨页面或跨JS文件对变量赋值&#xff0c;这是很小的一个问题。 但问题虽小&#xff0c;却总觉得有点不够自然&#xff0c;不爽。 为什么呢&#xff1f;访问一个页面上的变量不是什么难事&#xff0c;比如用parent.变量名&#xff0c;或者windows名.变量名&#xff0c;都可以…...

xxe漏洞——无回显(ctfshow web374——378)

ctfshow——web374 <?php/* # -*- coding: utf-8 -*- # Author: h1xa # Date: 2021-01-07 12:59:52 # Last Modified by: h1xa # Last Modified time: 2021-01-07 13:36:47 # email: h1xactfer.com # link: https://ctfer.com*/error_reporting(0); libxml_disable_en…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...