[STM32系列]二、实现STM32 GPIO端口状态实现最大速度翻转

2023-11-01

[STM32系列]二、实现STM32 GPIO最快速度翻转


前言

在STM32F103系列应用过程中可能会遇到需要以最大速度翻转GPIO口的情况,查询网上资料得知IO口最大翻转速度位18MHZ,下面给出实现最大翻转速度的测试方法。


一、实验准备

本次实验对象是HK32F103RBT6,采用的测试GPIO端口位GPIOA,GPIO引脚为GPIO_PIN_15,由于该引脚比较特殊为JTAG引脚,所以在实验前需要失能JTAG功能,开启GPIOA端口和重映射时钟设置端口,配置IO端口的相关参数。

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIOA的基地址为0x40010800,BRR相对于GPIOA偏移为0x10,写“1”实现“置1”操作,BSRR相对于GPIOA偏移为0x14,写“1”实现“置0”操作。

二、测试

1.C语言翻转测试

首先使用C语言进行测试,代码如下

while (1)
 {
	GPIOA->BRR = 0x8000;	//高
	GPIOA->BSRR = 0x8000;	//低
 }

简单的两行代码实现 ,那么实际IO口输出速度是多少呢?示波器(衰减10倍)显示如下:
在这里插入图片描述
可见IO口速度在0级优化为6.5M,远没有达到18M,查看其汇编可见这两条语句被汇编成多条语句,限制了其速度。那么直接调用汇编速度会达到多少呢。

2.汇编翻转测试

主程序调用汇编定义函数如下,B指令实现无条件跳转至toggle标签

speed_test PROC
	EXPORT  speed_test
	LDR     R0,=0x40010800
	LDR     R1,=0x8000
toggle
	STR     R1,[R0,#0x10]
	STR     R1,[R0,#0x14]  
	B		toggle
	BX      LR
	ENDP	

这次IO翻转速度又是多少,示波器(衰减10倍)测量如下:

在这里插入图片描述
示波器显示18M,达到了目标的IO口翻转速度

总结

STM32在72MHZ运行下其IO口最大的翻转速度可达18M。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[STM32系列]二、实现STM32 GPIO端口状态实现最大速度翻转 的相关文章

  • 跟着野火学FreeRTOS:第一段(任务定义,切换以及临界段)

    在裸机系统中 系统的主体就是 C P U CPU CP U 按照预先设定的程序逻辑在 m a i n
  • 华为OD机试真题-部门人力分配-2023年OD统一考试(C卷)

    题目描述 部门在进行需求开发时需要进行人力安排 当前部门需要完成N个需求 需求用requirements 表示 requirements i 表示第i个需求的工作量大小 单位 人月 这部分需求需要在M个月内完成开发 进行人力安排后每个月的人
  • linux GPIO C API

    我有一个 powerpc 板 上面运行着 3 2 内核 使用 sysfs 访问 GPIO 按预期工作 例如 gt echo 242 gt sys class gpio export gt cat sys class gpio gpio242
  • Raspberry Pi RPi.GPIO 错误并带有威胁回调

    我被 Python 包中的 wait for edge 函数困住了RPi http sourceforge net p raspberry gpio python wiki Inputs 我为 GPIO 下降添加了多个事件检测 只要回调函数
  • mmap 比 ioremap 慢

    我正在为运行 Linux 2 6 37 的 ARM 设备进行开发 我正在尝试尽快切换 IO 引脚 我制作了一个小内核模块和一个用户空间应用程序 我尝试了两件事 使用以下命令直接从内核空间操作 GPIO 控制寄存器ioremap mmap G
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • 【C语言】数组

    一维数组的创建和初始化 数组是一组相同类型元素的集合 数组的创建 数组的创建方式 type t arr name const n type t 是指数组的元素类型 const n 是一个常量表达式 用来指定数组的大小 数组创建的实例 数组创
  • 华为OD机试真题-反射计数-2023年OD统一考试(C卷)

    题目描述 给定一个包含 0 和 1 的二维矩阵 给定一个初始位置和速度 一个物体从给定的初始位置触发 在给定的速度下进行移动 遇到矩阵的边缘则发生镜面反射 无论物体经过 0 还是 1 都不影响其速度 请计算并给出经过 t 时间单位后 物体经
  • Arm:objcopy 如何知道 elf 中的哪些部分要包含在二进制或 ihex 中?

    我正在开发一个项目 其中涉及解析arm elf 文件并从中提取部分 显然 elf 文件中有很多部分没有加载到闪存中 但我想知道 objcopy 到底如何知道要在二进制文件中包含哪些部分以直接闪存到闪存中 以arm elf文件的以下reade
  • for循环延时时间计算

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 之前做led点亮的实验 好像是被delay函数影响了 因为delay参数设置的不对
  • 嵌入式开发--STM32G4系列片上FLASH的读写

    这个玩意吧 说起来很简单 就是几行代码的事 但楞是折腾了我大半天时间才搞定 原因后面说 先看代码吧 读操作 读操作很简单 以32位方式读取的时候是这样的 data IO uint32 t 0x0800F000 需要注意的是 当以32位方式读
  • 核心耦合内存在 STM32F4xx 上可执行吗?

    尝试从 STM32F429s CCM 运行代码 但每当我命中 CCM 中的第一条指令时 我总是会遇到硬故障 并且 IBUSERR 标志被设置 该指令有效且一致 STM32F4xx 是否可能不允许从 CCM 执行 数据访问效果良好 alios
  • 通过JTAG恢复STM32 MCU磨掉的标记

    我有一块可能带有 STM32 MCU 的板 我想为该板制作定制固件 因为库存板有很多问题 不幸的是 电路板制造商很友善地磨掉了所有标记 有没有办法通过 jtag 获取设备 系列 ID 并将其交叉引用到型号 我能找到的一切都是关于获取芯片的唯
  • STM32 上的位置无关代码 - 指针

    我已成功在 STM32 上构建并运行位置无关的代码 向量表和 GOT 已修补 一切正常 但我对这样的代码有问题 double myAdd double x return x 0 1 double ptrmyAdd double myAdd
  • 从内核模块向用户空间通知 GPIO 中断[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有一段代码可以检测内核模块中的 GPIO 中断 现在 我正在寻找一种机制 在检测到来自内核模块的 gpio 中断时通知用户空间 任何与不同选项
  • STM32F0、ST-link v2、OpenOCD 0.9.0:打开失败

    我在用着发射台 http www ti com ww en launchpad about htmlgcc arm none eabi 4 9 2015q2 为 STM32F0 进行编译 现在我想使用该集合中的 arm none eabi
  • HAL_Delay() 陷入无限循环

    我被 HAL Delay 函数困住了 当我调用此函数 HAL Delay 时 控制陷入无限循环 在寻找问题的过程中 我发现了这个 http www openstm32 org forumthread2145 threadId2146 htt
  • 使用 STM32F0 ADC 单独读取不同的输入

    STM32F072CBU 微控制器 我有多个 ADC 输入 并且希望单独读取它们 STMcubeMX 生成样板代码 假设我希望按顺序读取所有输入 但我无法弄清楚如何纠正这个问题 这篇博文 http blog koepi info 2015
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d
  • Beaglebone Black 上的 GPIO

    我目前遇到了 Beaglebone black GPIO 引脚的问题 我正在寻找一种正确的方法来读取 C 中的 GPIO 引脚 p8 4 的值 如果我理解正确的话 我尝试使用一个库 该库使用了在引入设备树之前不支持的旧方法 我尝试寻找其他解

随机推荐

  • oVirt engine安装手册

    oVirt Engine安装需求 硬件需求 Resource Minimum Recommended CPU 双核CPU 四核或者多个双核CPU 内存 4G内存 不安装warehouse并且内存不被其他程序使用 16G 硬盘 25G可用空间
  • selenium 下载webdriver浏览器驱动

    自动化测试要自动调用浏览器时需要用到selenium模块 官网上的定义为 Selenium 通过使用 WebDriver 支持市场上所有主流浏览器的自动化 Webdriver 是一个 API 和协议 它定义了一个语言中立的接口 用于控制 w
  • Redis实战篇(二)查询缓存

    一 什么是缓存 缓存就是数据交换的缓冲区 是存贮数据的临时地方 一般读写性能较高 1 缓存的作用 降低后端负载 提高读写效率 降低响应时间 2 缓存的成本 数据一致性成本 代码维护成本 运维成本 二 添加Redis缓存 Resource p
  • 定时任务——@Scheduled注解做定时任务

    一 这是springboot中配置静态定时任务的注解 1 在启动类上面加上 EnableScheduling 注解开启定时任务 import org springframework boot SpringApplication import
  • 淘宝准点秒杀脚本

    阿里云服务器 云小站 专享特惠 云产品推荐 阿里云 推荐一个薅羊毛教程地址 程序工厂 脚本技术交流群 212796668 开始教程 准备软件 下载地址 python脚本运行环境 zip python脚本执行未安装库 Python工具类资源
  • 一种多级缓存的系统架构

    一种多级缓存的系统架构 下面这个也是比较常用的多级缓存的系统架构图 整体流程如上图所示 1 首先接入Nginx将请求负载均衡到应用Nginx 此处常用的负载均衡算法是轮询或者一致性哈希 轮询可以使服务器的请求更加均衡 而一致性哈希可以提升应
  • torch.autograd.detect_anomaly() 工具的使用(记录)

    先放上使用方法 import torch 正向传播时 开启自动求导的异常侦测 torch autograd set detect anomaly True 反向传播时 在求导时开启侦测 with torch autograd detect
  • 蓝牙BLE信道频率

    蓝牙信道规定在物理层 有以下几个特点 调制方式 GFSK 工作在2 4GHz ISM频段 频率范围 2 400 2 4835GHz ISM频段 Industrial Scientific Medical Band 主要开放给工业 科学和医用
  • 自动售货机(java版)

    SaleMachine java package tu public class SaleMachine private int countofBeer countofJuice countofCola countofFivecent co
  • 【脚本语言系列】关于Python统计分析statsmodel,你需要知道的事

    如何使用statsmodel 安装statsmodel 使用easy install或pip安装statsmodels easy install U statsmodels pip install U statsmodels 使用源代码安装
  • cocos2dx之Lua调用C++

    现在cocos2dx3 8自己封装了以前的toLua 比以前更好用了 先来看一下整体步骤 1 编写一个 ini文件 2 修改genbindings py脚本 3 执行genbindings py脚本 4 将生成的桥接文件加入工程 5 修改l
  • stream(流) iterator之一个例子

    The following two simple programs sort all strings read from the standard input and print them without duplicates by usi
  • Typora的简单入门使用教程

    安装篇 https typora io 下拉到最底处下载 下载完之后安装 一路next 使用篇 新建一个文本文档 将后缀名改为md 打开 注意 如果新建一个文本文档的后缀名被隐藏 可执行如下步骤以显示后缀名 1 使用快捷键windows e
  • Java兔子生兔子问题(递归法)

    Java兔子生兔子问题 递归法 该问题与上楼梯的问题一样 是从反方向思考推导递归公式 生兔子问题 问题描述 新诞生的兔子三个月后会每个月都会产小兔子 即 1 1 2 3 5 8 13 time 2022 05 19 param args p
  • 再谈 eBay 的扩展性最佳实践

    再谈 eBay 的扩展性最佳实践 网址 http www dbanotes net arch best practices for scaling websites lessons from ebay html 很多人都觉得 eBay 在
  • python图片风格迁移毕设_Python简单实现图像风格迁移

    下载W3Cschool手机App 0基础随时随地学编程导语 T T之前似乎发过类似的文章 那时候是用Keras实现的 现在用的PyTorch 而且那时候发的内容感觉有些水 于是我决定 好吧我确实只是为了写点PyTorch练手然后顺便过来水一
  • Spring Boot 配置定时任务

    本文目录 引言 1 注解的使用 2 cron 表达式介绍 各字段含义 特殊字符代表含义 常用 cron 表达式介绍 引言 项目开发中经常需要执行一些定时任务 比如 需要在每天凌晨时候 分析一次前一天的日志信息 Spring为我们提供了异步执
  • D - Dragon Balls Kattis - dragonballs

    题目链接 题意 交互题 就是提问系统不超过1000次然后找到n颗龙珠 但龙珠是1颗1颗找到的并不是1次全部找到 这样就很简单了 每次循环输出1个 0 0 然后找到与远点相聚为d的所有的点 然后在分别提问 直至系统输出0为止 题问是用cout
  • Qt槽函数识别发送的信号

    Qt是通过信号和槽的机制进行事件传递的 当有多个不同类型 或相同类型的物件的发送信号都通过一个槽来处理的时候 需要在槽中识别出这些信号然后做相应的处理 例如 在一个界面中有16个按钮 QPushButton 和4个 QRadioButton
  • [STM32系列]二、实现STM32 GPIO端口状态实现最大速度翻转

    STM32系列 二 实现STM32 GPIO最快速度翻转 文章目录 STM32系列 二 实现STM32 GPIO最快速度翻转 前言 一 实验准备 二 测试 1 C语言翻转测试 2 汇编翻转测试 总结 前言 在STM32F103系列应用过程中