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

STM32 学习(一)新建工程

本课程使用的stm32型号

 

 引脚定义,有FT能接5v,没有FT能接3.3v

启动配置

 第二种启动模式中,系统存储器中存放了一部分Bootloader程序,该程序可以接收串口的数据,然后刷新到主闪存中,这样就可以使用串口下载程序。

最小系统电路

能工作起来的最基本的电路,晶振 8M 赫兹通过锁相环倍频得到 72 hz;复位模块的 NRST 是低电平复位,当电路刚上电时,电容开始充电,此时 nrst 为低电平,而当电容充满电,由于电容的隔直功能,使得 nrst 电平逐渐升高。启动配置就是芯片上的跳线帽。

软件安装

新建工程

1. 找到启动文件

D:\Users\Desktop\embedded\STM32入门教程资料\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm

stm32f10x.h:描述芯片外围设备有哪些寄存器以及对应的地址。两个system文件主要用来配置时钟。 

2. 找到内核寄存器描述文件以及内核配置函数

D:\Users\Desktop\embedded\STM32入门教程资料\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport

3. 添加启动文件

启动文件的选择:

4. 添加头文件路径

5. 添加 main 函数

 

main.c 内容: 

#include "stm32f10x.h"int main(void)
{while(1){}
}

 

勾上 reset and run,这样下载程序后会立马复位并执行: 

6. 使用寄存器点灯

使能 GPIOC 的时钟: 

RCC->APB2ENR = 0x00000010;

配置 pC13 口的模式(pC13 即为 led 的端口),CNF13 配置为通用推挽输出模式,MODE13 配置为输出模式。

GPIOC->CRH = 0x00300000;

接下来就可以给 pC13 口输出数据了,ODR13 为 1,则 pC13 为高电平,反之则为低电平,因为我们需要 led 亮起,所以要使得 pC13 为低电平。

GPIOC->ODR = 0x00000000;

整体代码如下,烧录后可以看到 led2 亮起:

#include "stm32f10x.h"int main(void)
{RCC->APB2ENR = 0x00000010;GPIOC->CRH = 0x00300000;GPIOC->ODR = 0x00000000;while(1){}
}

7. 添加库函数

将库函数源码和头文件复制粘贴到 Library 目录下,然后在 keil 中导入:

 

还需要三个文件如下,conf 文件来配置函数库头文件的包含关系,两个 it 文件用来存放中断函数,粘贴到 User 目录下: 

添加宏定义 USE_STDPERIPH_DRIVER: 

8. 使用库函数进行点灯

代码如下:

#include "stm32f10x.h"int main(void)
{//RCC->APB2ENR = 0x00000010;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//GPIOC->CRH = 0x00300000;GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStruct);//GPIOC->ODR = 0x00000000;GPIO_SetBits(GPIOC, GPIO_Pin_13); // 设置pC13高电平//GPIO_ResetBits(GPIOC, GPIO_Pin_13); // 设置pC13低电平while(1){}
}

9. 工程架构 

复位中断,先调用 SystemInit,再调用 __main。

相关文章:

STM32 学习(一)新建工程

本课程使用的stm32型号 引脚定义,有FT能接5v,没有FT能接3.3v 启动配置 第二种启动模式中,系统存储器中存放了一部分Bootloader程序,该程序可以接收串口的数据,然后刷新到主闪存中,这样就可以使用串口下载程…...

ROBOGUIDE教程:FANUC机器人固定点焊焊接虚拟仿真

目录 概述 机器人系统创建 焊接工件模型创建 机器人抓手工具添加与工件安装 工作台添加与工件安装 固定点焊焊枪支架模型创建与组装 固定点焊焊枪添加与配置 机器人远程TCP标定(核心内容) 远程TCP手动测试 远程TCP指令介绍 机器人仿真程序编写 机器人示教编程 机…...

代码审计必要性探讨

1、背景 为了保证代码的质量,需要一系列的流程来进行保证: 今天要探讨的是代码审计的必要性。 2、代码审计 代码审计的做法多种多样,我理解必须解决以下问题 ,才可能有效: 核心:审计的本质是对比&#…...

SpringBoot-Shiro

Apache Shiro&#xff1a;https://shiro.apache.org/ 依赖 <dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.4.1</version> </dependency>ShiroConfig.java Configuratio…...

认识Docker

大家好&#xff0c;这里是七七&#xff0c;今天起开起我们的Docker技术篇&#xff0c;本文是介绍Docker的&#xff0c;不介绍如何使用和安装Docker&#xff0c;只是单纯的介绍Docker。 目录 一、历史 二、Docker究竟是什么 三、Docker的结构与特性 1、Docker仓库 2、Dock…...

uniapp的分包使用记录

UniApp的分包是一种将应用代码划分为多个包的技术。分包的核心思想是将不同部分的代码划分为不同的包&#xff0c;按需加载&#xff0c;从而提高应用性能。使用UniApp的条件编译功能&#xff0c;开发人员可以根据需要将代码划分为多个包。每个包都包含一组页面和组件&#xff0…...

JSON.stringify()

一、定义 JSON.stringify() 是一个 JavaScript 内置函数&#xff0c;用于将 JavaScript 对象或值转换为 JSON 字符串 二、语法 JSON.stringify(value, replacer, space); value&#xff1a;要转换为 JSON 字符串的 JavaScript 对象或值。 eplacer&#xff08;可选&#xff0…...

机器学习——损失函数

【说明】文章内容来自《机器学习——基于sklearn》&#xff0c;用于学习记录。若有争议联系删除。 1、简介 损失函数(loss function)又称为误差函数(error function)&#xff0c;是衡量模型好坏的标准&#xff0c;用于估量模型的预测值与真实值的不一致程度&#xff0c;是一个…...

C#多线程(补充)

C#多线程&#xff08;补充&#xff09; C# 多线程的补充在C#中使用多线程1. Thread类2. 线程池3. Parallel类4. Task类启动任务接收任务的返回值同步调用指定连续任务任务的层次结构 5. BackgroundWorker控件 C# 多线程的补充 在C#中使用多线程 1. Thread类 使用Thread类通过…...

关于苹果iOS 16:揭开伪装成飞机模式的隐形蜂窝接入漏洞的动态情报

一、基本内容 在日常生活中&#xff0c;网络威胁不断演变&#xff0c;给个人和组织带来了一系列重大挑战。网络犯罪分子使用的一种最常见的、最具破坏性的方法之一就是网络钓鱼。这种攻击方式通过电子邮件、短信或其他通讯渠道冒充可信实体&#xff0c;诱使个人泄露敏感信息&am…...

Python+OpenCV 零基础学习笔记(4-5):计算机图形基础+Python相对文件路径+OpenCV图像+OpenCV视频

文章目录 相关链接运行环境前言计算机图形OpenCV简单使用图形读取文件读取可能会出现的问题&#xff1a;路径不对解决方案其它路径问题解决方案 图像显示保存OpenCV视频视频素材如何获取&#xff1f;简单视频读取 相关链接 【2022B站最好的OpenCV课程推荐】OpenCV从入门到实战 …...

【C++篇】讲解Vector容器的操作方法

文章目录 &#x1f354;vector容器概念&#x1f339;操作方法⭐赋值操作⭐容量和大小⭐插入和删除⭐数据存取 &#x1f354;vector容器概念 vector 是 C 标准库中的一个容器&#xff0c;它提供了一种动态数组的实现。vector 容器可以存储任意类型的元素&#xff0c;并且可以根…...

桥接模式-举例

概叙&#xff1a;桥接模式用一种巧妙的方式处理多层继承存在的问题&#xff0c; 用抽象关联取代了传统的多层继承&#xff0c; 将类之间的静态继承关系转换为动态的对象组合关系&#xff0c; 使得系统更加灵活&#xff0c;并易于扩展&#xff0c; 同时有效控制了系统中类的个数…...

FreeBSD下安装Jenkins(软件测试集成工具)记录

简要介绍Jenkins 简而言之&#xff0c;Jenkins 是领先的开源自动化服务器。它使用 Java 构建&#xff0c;提供了 1,800 多个插件来支持几乎任何事情的自动化&#xff0c;因此人类可以将时间花在机器无法完成的事情上。 主要目的&#xff1a; 持续、自动地构建/测试软件项目。…...

数据结构学习 Leetcode474 一和零

关键词&#xff1a;动态规划 01背包 一个套路&#xff1a; 01背包&#xff1a;空间优化之后dp【target1】&#xff0c;遍历的时候要逆序遍历完全背包&#xff1a;空间优化之后dp【target1】&#xff0c;遍历的时候要正序遍历 目录 题目&#xff1a; 思路&#xff1a; 复杂…...

VS配置PCO相机SDK环境

VS配置PCO相机SDK环境 概述:最近要用到一款PCO相机,需要协调其他部件实现一些独特的功能。因此需要用到PCO相机的SDK,并正确配置环境。良好的环境是成功的一半。其SDK可以在官网下载,选择对应版本的安装即可。这里用的是pco.cpp.1.2.0 Windows,VS 2022 专业版。 链接: P…...

六、Redis 分布式系统

六、Redis 分布式系统 六、Redis 分布式系统6.1 数据分区算法6.1.1 顺序分区6.1.2 哈希分区 6.2 系统搭建与运行6.2.1 系统搭建6.2.2 系统启动与关闭 6.3 集群操作6.3.1 连接集群6.3.2 写入数据6.3.3 集群查询6.3.4 故障转移6.3.5 集群扩容6.3.6 集群收缩 6.4 分布式系统的限制…...

Unity相机跟随角色移动

相机跟随角色移动 使用LateUpdate()&#xff1b;方法&#xff0c;根据角色移动而进行跟随&#xff0c;固定角度&#xff0c;类似2.5D视角。 需要将相机放到一个空对象&#xff0c;将角度调节好&#xff0c;挂载组件&#xff0c;将角色对象放入组件中&#xff0c;调整moveTime设…...

Lua的垃圾回收机制详解

Lua 是一种轻量级的编程语言&#xff0c;广泛用于嵌入到其他应用程序中&#xff0c;尤其是在游戏开发领域。Lua 的内存管理机制采用了自动垃圾收集&#xff08;Garbage Collection&#xff09;的方法。以下是Lua内存管理的一些关键方面&#xff1a; 垃圾收集原理概述 Lua 使用…...

java设计模式学习之【解释器模式】

文章目录 引言解释器模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用表达式解析示例代码地址 引言 在我们的日常生活中&#xff0c;语言的翻译和理解是沟通的关键。每种语言都有自己的语法规则&#xff0c;而翻译人员和计算机程序需要理解并遵循这些规则来…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...

JDK 17 序列化是怎么回事

如何序列化&#xff1f;其实很简单&#xff0c;就是根据每个类型&#xff0c;用工厂类调用。逐个完成。 没什么漂亮的代码&#xff0c;只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...

41道Django高频题整理(附答案背诵版)

解释一下 Django 和 Tornado 的关系&#xff1f; Django和Tornado都是Python的web框架&#xff0c;但它们的设计哲学和应用场景有所不同。 Django是一个高级的Python Web框架&#xff0c;鼓励快速开发和干净、实用的设计。它遵循MVC设计&#xff0c;并强调代码复用。Django有…...

零基础在实践中学习网络安全-皮卡丘靶场(第十一期-目录遍历模块)

经过前面几期的内容我们学习了很多网络安全的知识&#xff0c;而这期内容就涉及到了前面的第六期-RCE模块&#xff0c;第七期-File inclusion模块&#xff0c;第八期-Unsafe Filedownload模块。 什么是"遍历"呢&#xff1a;对学过一些开发语言的朋友来说应该知道&…...

今日行情明日机会——20250609

上证指数放量上涨&#xff0c;接近3400点&#xff0c;个股涨多跌少。 深证放量上涨&#xff0c;但有个小上影线&#xff0c;相对上证走势更弱。 2025年6月9日涨停股主要行业方向分析&#xff08;基于最新图片数据&#xff09; 1. 医药&#xff08;11家涨停&#xff09; 代表标…...