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

[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。

  • 11
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值