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

STM32 学习笔记_2 下载,GPIO 介绍

下载

Keil 编译例程

编译两个按钮,一个向下是部分编译,两个向下箭头是全部编译。对于未编译文件两个按钮等效。

点击编译后,linking 是链接,结果里面的几个数据的意义代表大小:

数据类型占用Flash or SRAM说明
CodeFlash代码 (占用 FLASH 的大小)
RO-DataFlash只读数据,一般是指 const 修饰的数据
RW-DataFlash and SRAM初值为非0的可读可写数据
ZI-DataSRAM初值为0 的可读可写数据

前三项加起来是 FLASH 占用,后两个是 SRAM 占用。

双击项目名,会打开一个 .map 的文件,文件末尾也显示了上面各项的大小和 FLASH SRAM 占用大小。

基于寄存器的方式:和51单片机一样方法,程序直接控制寄存器,底层方法。但是 STM32 寄存器太多,不宜用此方法。

基于库函数:STM32 自己封装好的库函数。有利于提高开发效率。

基于 HAL 库的方式:可以通过图形化界面开发。但是隐藏了底层逻辑。

基于寄存器

我们用和 51单片机一样的方法新建工程文件后,是不能直接使用的。需要添加启动文件。

添加好启动文件和头文件后,新建 User 文件夹,代码模板如下:

#include "stm32f10x.h"                  // Device header
int main(){while(1){}
}

Configration 中编码设置为 UTF-8 防止中文乱码。

魔术棒-Debug-Use 改为 STLink 下载方式。右侧 Setting-Flash Download- 勾选 Reset and Run,这样每次下载后都会重新自动复位运行。

STLINK 接上对应线后应该是电源灯常亮,测试灯闪烁。

Build 并 Load 后,板子上的测试灯应该不闪烁了。因为程序中目前什么也没有。

下面尝试点亮灯。需要三个寄存器。

  1. RCC 寄存器。RCC 外设时钟使能寄存器翻阅手册可知是 APB2 的外设,在 RCC_APB2ENR 中配置。
image-20230131151014485

4 IOPC EN 使能即打开 GPIOC 时钟。即赋值:0000 0000 0001 0000=0x00000010

  1. PC13 口。MODE13 就是配置 PC13 口的。

CNF13 要设置为推挽输出模式,即00. MODE 要配置为输出模式,最大速度 50MHZ 11。所以寄存器赋值 0x0030 0000

image-20230131151852829
  1. 端口输出寄存器写入数据。13 号口设置为低电平点亮。即:0x00000000. 0x0000 2000 就会熄灭。
image-20230131152925336
#include "stm32f10x.h"                  // Device headerint main(){RCC->APB2ENR=0X00000010;GPIOC->CRH=0X00300000;GPIOC->ODR=0X00000000;while(1){}
}

可以看出,基于寄存器的程序编写非常麻烦!要不断的查手册,而且我们还不能影响到其他位,不能这样直接赋值,要通过 & | 确保其他位不受影响。

基于库函数

新建 Library 文件夹,添加老师给出的库函数文件。再在 MDK 中添加组。

再打开 STM32F10X.H 文件,其中有一句:

#ifdef USE_STDPERIPH_DRIVER#include "stm32f10x_conf.h"
#endif

也就是说我们要定义这个东西,才能包含这个头文件。再手动定义一下。

image-20230131154446413

记得还要 include path。有钥匙标志的是只读文件。

#include "stm32f10x.h"                  // Device headerint main(){//查询函数的通用方法:右键-转到定义查看,如果详细信息在注释里,复制注释关键词 crtl f 搜索。//enable clkRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//第一个参数:外设;第二个参数:新的状态。//set PC13 pinGPIO_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);//set e level of PC13GPIO_SetBits(GPIOC,GPIO_Pin_13);//high level//GPIO_ResetBits(GPIOC,GPIO_Pin_13);//low levelwhile(1){}
}

寄存器部分自己查找引脚写的内容在库函数中被封装,我们只需要查询使用。

启动文件具体选择哪个?STM32F100 是超值系列,选择带 VL 的启动文件,再根据 FLASH 大小选择 LD MD HD。STM32F101/102/103 选择 D 结尾的。STM32F105/107 选择 CL 的。

image-20230131202710800

总结新建工程套路:

  1. 新建 project,选择对应芯片型号。
  2. 新建 start library 文件夹,复制相关配置文件。
  3. 工程里新建对应的文件夹,添加相应配置文件。
  4. include relevant path 头文件。
  5. define 内定义 USE_STDPERIPH_DRIVER
  6. debug 中选择对应调试器(STLINK),settings-flash download-reset and run 勾选。

当然以后也可以建立自己风格的项目。

启动程序的原理:

image-20230131203440962

复位中断:程序入口。复位时启动,会调用 system_xx.c (我们的程序中是 init)和 main.c,然后就结束了。

其他中断也在其中被初始化。定义在 stm32f10x_it.c 中。自己如果想定义中断系统建议写在 stm32f10x.c 中的 PPP_IRQHandler 处。

init 设置微控制器的启动,初始化闪存接口等,仅在复位后需要调用。

然后自己写的用户文件也在紫色部分初始化。有利于程序模块化。

右侧是被动执行的资源。右上角:外设、内核外设。右下角:封装的库函数文件。conf 头文件包含了所有头文件,又被 stm32f10x.h 所包含。

GPIO 通用 IO

General Purpose Input Output.

可配置为8种输入输出模式。通常0~3.3V,部分引脚允许 5V。

串口下载

flymcu 软件。

配置如下,一定要一模一样(串口可以不一样)。我就因为低电平复位没看清一直没成功。

image-20230412215004208

F1 波特率最大可以460800. F4 可以是76800.

启动模式(M3 M4)

BOOT1 BOOT0 对应 x0:从主闪存存储器启动。

01:系统存储器开始启动(ISP 下载)。

11:内置 SRAM 开始启动。

image-20230412221036808

运行还是要配置成 x0 存到主闪存中。为什么我们的电路可以只连接一次 00 就能下载到主存储器中?

image-20230412221623258

如果不靠一键下载电路,我们就要像上面的步骤一样,先 01 再 x0。

DAP 下载

暂时先空一下。因为博主没有买仿真器。

相关文章:

STM32 学习笔记_2 下载,GPIO 介绍

下载 Keil 编译例程 编译两个按钮,一个向下是部分编译,两个向下箭头是全部编译。对于未编译文件两个按钮等效。 点击编译后,linking 是链接,结果里面的几个数据的意义代表大小: 数据类型占用Flash or SRAM说明Code…...

Centos搭建k8s

在CentOS 7上搭建Kubernetes集群 kubeadm官方文档 https://blog.51cto.com/zhangxueliang/4952945 前置步骤(所有结点) CentOS 7.9 物理机或虚拟机三台,CPU 内核数量大于等于 2,且内存大于等于 4Ghostname 不是 localhost&…...

Flutter Flex(Row Column,Expanded, Stack) 组件

前言 这个Flex 继承自 MultiChildRenderObjectWidget,所以是多子布局组件 class Flex extends MultiChildRenderObjectWidget {} Flex 的子组件就是Row 和 Column , 之间的区别就是Flex 的 direction 设置不同。 它有两个轴,一个是MainAxis 还有一个是交…...

《深入探讨:AI在绘画领域的应用与生成对抗网络》

目录 前言: 一 引言 二 生成对抗网络(GAN) 1 生成对抗网络(GAN)简介 2.使用GAN生成艺术作品的实现方法 3,生成图像 三 GAN在艺术创作中的应用 1 风格迁移 2 图像生成: 3 图像修复: 四 使…...

al文章生成-文章生成工具

ai文章生成器 AI文章生成器是一种利用人工智能和自然语言处理技术生成文章的工具。它使用先进的算法、机器学习和深度学习技术,深度挖掘和提取大量数据背后的信息,自主学习并合并新的信息,生成优质、原创的文章。 使用AI文章生成器的优点如下…...

【云原生之Docker实战】使用docker部署webterminal堡垒机

【云原生之Docker实战】使用docker部署webterminal堡垒机 一、webterminal介绍1.webterminal简介2.webterminal特点二、检查本地docker环境1.检查docker版本2.检查操作系统版本3.检查docker状态4.检查docker compose版本三、下载webterminal镜像四、部署webterminal1.创建安装目…...

《低代码PaaS驱动集团企业数字化创新白皮书》-IDC观点

IDC观点 大型集团企业应坚定地走数字化优先发展道路,加深数字化与业务融合 大型企业在长期的经营发展中砥砺前行,形成了较为成熟的业务模式和运营流程,也具备变革 管理等系统性优势。在数字化转型过程中,其庞大的组织架构、复杂的…...

LoRA 指南之 LyCORIS 模型使用

LoRA 指南之 LyCORIS 模型使用 在C站看到这个模型,一眼就非常喜欢 在经历几番挣扎之后终于成功安装 接下来,我们一起开始安装使用吧! 1、根据原作大佬的提示,需要安装两个插件 https://github.com/KohakuBlueleaf/a1111-sd-web…...

[C#]IDisposable

在C#中,继承IDisposable接口的主要作用是在使用一些需要释放资源的对象时,可以显式地管理和释放这些资源,以避免内存泄漏和其他潜在问题。 如果一个类继承了IDisposable接口,那么该类就必须实现Dispose方法。在该类的实例不再需要…...

ROS开发之如何使用RPLidar A1二维激光雷达?

文章目录0.引言1.创建工作空间2.获取rplidar_ros包并编译3.检查雷达端口4.启动launch显示雷达扫描结果0.引言 笔者研究课题涉及多传感器融合,除了前期对ROS工具的学习,还需要用雷达获取数据,进行点云处理。虽然激光雷达已经应用很广泛&#x…...

【谷粒商城之JSR303数据校验和集中异常处理】

本笔记内容为尚硅谷谷粒商城JSR303数据校验和集中异常处理部分 目录 一、简介 二、SR303数据校验使用步骤 1、引入依赖 2、给参数对象添加校验注解 常见的注解 3、接口参数前增加Valid 开启校验 三、异常的统一处理 四、分组解决校验 1、创建Groups 2、添加分组 …...

限流算法(计数器、滑动时间窗口、漏斗、令牌)原理以及代码实现

文章目录前言1、计数器(固定时间窗口)算法原理代码实现存在的问题2、滑动时间窗口算法原理代码实现存在的问题3、漏桶算法原理代码实现存在的问题4、令牌桶算法原理代码实现最后本文会对这4个限流算法进行详细说明,并输出实现限流算法的代码示…...

C++回溯算法---图的m着色问题01

C回溯算法---图的m着色问题 图的m着色问题是指给定一个图以及m种不同的颜色,尝试将每个节点涂上其中一种颜色,使得相邻的节点颜色不相同。这个问题可以转化为在解空间树中寻找可行解的问题,其中每个分支结点都有m个儿子结点,最底层…...

ESP32 分区表

ESP32 分区表 1. 分区表概述 ESP32 针对 flash 进行划分,划分为不同的区域用作不同的功能,并在flash的 0x8000 位置处烧写了一张分区表用来描述分区信息。 分区表可以根据自己的需要进行配置,每一个分区都有其特定的作用,可根据…...

JJJ-2 init_IRQ

void __init init_IRQ(void) {int ret;if (IS_ENABLED(CONFIG_OF) && !machine_desc->init_irq)irqchip_init();else // init_irq成员定义为imx6ul_init_irq,会走这个分支machine_desc->init_irq(); if (IS_ENABLED(CONFIG_OF) && IS_ENABLED…...

【NLP实战】基于Bert和双向LSTM的情感分类【下篇】

文章目录前言简介第一部分关于pytorch lightning保存模型的机制关于如何读取保存好的模型完善测试代码第二部分第一次训练出的模型的过拟合问题如何解决过拟合后记前言 本文涉及的代码全由博主自己完成,可以随意拿去做参考。如对代码有不懂的地方请联系博主。 博主…...

程序设计方法学

体育竞技分析 问题分析 体育竞技分析 需求:毫厘是多少? 如何科学分析体育竞技比赛? 输入:球员的水平 输出:可预测的比赛成绩 体育竞技分析:模拟N场比赛 计算思维:抽象 自动化 模拟&am…...

Hadoop之Yarn篇

目录 ​编辑 Yarn的工作机制: 全流程作业: Yarn的调度器与调度算法: FIFO调度器(先进先出): 容量调度器(Capacity Scheduler): 容量调度器资源分配算法&#xff1…...

Spring Cloud Nacos使用总结

目录 安装Nacos服务器 服务发现与消费 服务发现与消费-添加依赖 服务发现-配置文件 服务发现-注解 服务发现-Controller 服务消费-配置文件 服务消费-注解与Ribbon消费代码 服务消费-运行 配置管理 配置管理-添加依赖 配置管理-配置文件 配置管理-注解 配置管理-…...

目标检测框架yolov5环境搭建

目前,目标检测框架中,yolov5 是很火的,它基于pytorch框架,集成opencv等框架,项目地址:https://github.com/ultralytics/yolov5,对我来说,机器学习、深度学习才开始接触,本…...

超越SIFT?图像匹配实战对比:SIFT、ORB、SURF在无人机航拍图中的表现

无人机航拍图像特征匹配算法实战评测:SIFT、ORB、SURF横向对比 当无人机掠过城市上空,传回的航拍图像如何快速准确地完成拼接与匹配?特征提取算法的选择直接决定了三维重建的精度与效率。本文将基于真实无人机数据集,从工程实践角…...

ArcGIS Pro像素编辑器实战:5种高效影像处理技巧(附真实案例)

ArcGIS Pro像素编辑器实战:5种高效影像处理技巧(附真实案例) 遥感影像处理是GIS工程师日常工作中的重要环节,而ArcGIS Pro的像素编辑器就像一把精准的手术刀,能帮助我们对影像数据进行精细化处理。不同于传统的批量处理…...

从医院呼叫器到智能家居:用Multisim 14.2复刻经典八路呼叫器(附完整仿真文件)

从医院呼叫器到智能家居:用Multisim 14.2复刻经典八路呼叫器(附完整仿真文件) 在电子技术发展的历史长河中,经典电路设计往往蕴含着跨越时代的智慧。八路呼叫器作为数字电子技术的经典教学案例,其核心模块——编码、锁…...

[具身智能-170]:在具身智能的技术路径中,其中大小脑联合架构是务实的架构成为行业当下的共识,如果要学习大脑,需要学习哪些技术?已经学习的路径建议。

在具身智能的“大小脑”联合架构中,“大脑”主要负责高层级的语义理解、任务规划和决策,相当于机器人的“认知与思考中心”。要深入学习这一领域,你需要掌握一系列前沿的AI技术,并遵循一个循序渐进的学习路径。🧠 具身…...

统计了1000+计算机研究生的就业去向后,才知道就业差距这么大!

统计了1000计算机研究生的就业去向后,才知道就业差距这么大! ✦ 今天图图汇总整理了5所不同层次院校公布的计算机学院就业情况,信息包括但不限于就业率、就业单位、就业地域、毕业薪酬等,各位计算机考研人可以参考,在…...

Linux内核驱动开发避坑指南:wait_queue实战中那些容易踩的坑(附代码)

Linux内核驱动开发避坑指南:wait_queue实战中那些容易踩的坑(附代码) 在Linux内核驱动开发中,wait_queue(等待队列)是实现线程同步和资源管理的核心机制之一。它允许线程在条件不满足时进入休眠状态&#…...

PatreonDownloader:一键批量下载Patreon创作者内容的终极解决方案

PatreonDownloader:一键批量下载Patreon创作者内容的终极解决方案 【免费下载链接】PatreonDownloader Powerful tool for downloading content posted by creators on patreon.com. Supports content hosted on patreon itself as well as external sites (additio…...

vim-test 支持的 50+ 测试框架全览:从 JavaScript 到 Rust 的完整支持

vim-test 支持的 50 测试框架全览:从 JavaScript 到 Rust 的完整支持 【免费下载链接】vim-test Run your tests at the speed of thought 项目地址: https://gitcode.com/gh_mirrors/vi/vim-test vim-test 是一款让开发者以思维速度运行测试的 Vim 插件&…...

gte-base-zh中文Embedding工业化:CI/CD流水线实现模型版本灰度发布

gte-base-zh中文Embedding工业化:CI/CD流水线实现模型版本灰度发布 1. 项目背景与价值 在人工智能工程化落地的过程中,模型部署和版本管理一直是技术团队面临的挑战。特别是对于文本嵌入模型如gte-base-zh,如何在生产环境中实现平滑的版本升…...

自动缝纫机SolidWorks

在自动缝纫机的设计过程中,往往需要处理大量精密零件的协同工作,从送布机构、针杆组件到旋梭系统,每个部件的尺寸精度和装配关系都直接影响设备的运行稳定性和缝纫效果。而SolidWorks作为三维设计工具,在这一过程中扮演着关键角色…...