STM32读写IO时间测试

发布者:boczsy2018最新更新时间:2017-10-25 来源: eefocus关键字:STM32  读写IO  时间测试 手机看文章 扫描二维码
随时随地手机看文章

本文分别通过操作寄存器和调用库函数的方式,对比测试STM32读写IO时间。

硬件环境

主控芯片:STM32F103ZET6

外部晶振:8MHZ

系统主频:72MHZ

1.操作寄存器的方式读取IO

软件在线调试界面

STM32读写IO时间测试

示波器输出波形

STM32读写IO时间测试
分析:在while(1)中循环翻转PA3输出电平。

通过在线调试的方式,可以看出1条C语句:    GPIOA -> BSRR = 1<<3;   //PA3 输出高电平

    对应3条汇编指令:MOVS r0,#0x08         ;把立即数0x08传送给寄存器r0

                            LDR  r1,[PC,#8]   ;从地址(PC+8)处读取一个字到寄存器r1

                            STR  r0,[r1,#0x00] ;把r0中的低字节存储到地址(r1+0)处

由于Cortex-M3的大部分汇编指令均为单周期指令,理论上PA3输出高电平为3个时钟周期,

即3*(1/72)us = 42ns,经示波器实测输出高电平时间约为:42ns左右。

注意:示波器实测输出低电平时间明显比输出高电平时间长,原因每一次循环结束,都要进行新一次while循环判断,即while(1)判断也要浪费时间的,差不多8个指令周期左右。

2.调用库函数的方式读取IO

软件在线调试界面

STM32读写IO时间测试
示波器输出波形

STM32读写IO时间测试
分析:在while(1)中循环翻转PA3输出电平。

通过在线调试的方式,可以看出1条C语句: GPIO_SetBits(GPIOA , GPIO_Pin_3);  //PA3 = 1

         对应的汇编指令为:    MOVS   r1,#0x08

                                          LDR    r0,[pc,#12]

                 BL.W   GPIO_SetBits(0x080002FE)

    其中第3条汇编指令为跳转指令,即跳转到函数GPIO_SetBits()的地址处继续执行。

执行GPIO_SetBits(GPIOA , GPIO_Pin_3);  //PA3 = 1  所用的时间通过示波器可以测出来。

从示波器输出波形来看,波形周期为708ns,减去while(1)循环跳转指令110ns,则通过调用库函数输出高低电平用时约为300ns,为21个时钟周期,比直接操作寄存器多用时约260ns。


3.STM32中断时间测试

使能滴答定时器Systick,配置每1us产生一次中断,中断服务函数为空,测试从产生中断、保护现场、进入中断服务函数、到恢复现场所用时间。

软件在线调试界面

STM32读写IO时间测试
示波器输出波形

STM32读写IO时间测试

由示波器输出波形可以计算出保存现场、进入中断服务函数、恢复现场的时间为(475-195)约280ns,约为20个时钟周期。配置滴答定时器不同中断周期,经实测最小周期为1us时,即计数72个,能够正常进入中断,程序正常。若定时周期小于1us,则定时时间不准确,定时周期接近于1us,原因分析为定时时间太短,内核来不及响应中断。


关键字:STM32  读写IO  时间测试 引用地址:STM32读写IO时间测试

上一篇:STM32在线调试正常,上电运行不正常
下一篇:stm32自己总结如何正确创建一个工程

推荐阅读最新更新时间:2024-03-16 15:41

STM32 jtag调试程序时程序跑飞
开发环境:keil MDK V5.10 操作系统:windows 7(32位) 目标硬件:STM32F103C8 问题描述:在使用jtag对某软件进行调试的时候,KEIL可以正常的进行软件下载,一旦使用F5全速运行时,立即发现程序跑飞了,暂停后汇编代码显示“MOVS R0 R0”。程序跑飞的时候可以看到目标设备程序执行过程正常(灯正常闪烁,串口调试信息正常输出)。 问题原因:芯片的JTAG引脚被复用,在程序初始化阶段将JTAG引脚remap为了普通的IO引脚导致。 PS:在使用JTAG进行程序调试的时候,如果程序中开了看门狗,调试程序进行了单步调试的情况也可能导致JTAG无法正常使用,因为目标设备的看门狗不能因为单步执行
[单片机]
stm32快速学习4——串口发送字符
设定UART1时钟 设定发送脚功能 串口设置,使能 #include stm32f10x.h void RCC_Configuration(void); void GPIO_Configuration(void); void USART_Configuration(void); unsigned char str = A ; int main(void) { RCC_Configuration(); GPIO_Configuration(); USART_Configuration(); USART_SendData(USART1,str ); while(1); }
[单片机]
STM32的PWM的频率和占空比设定
在TEC控温项目中用到PWM的占空比来控制温度,这就需要占空比是连续可以变化的。 最开始也是到处找资料,找现成的例程,发现大家各说风云,最后还是没有建设性的结果。所以又请教了官方的固件库“STM32最新固件库v3.5”(存到百度网盘- 开发应用- stm32目录下了)呵呵,有现成的demo。开始好像是懂了也没有过多的去研究,也没有备份,就没去管他了。后来具体用的时候发现没有想象的那么简单,又倒腾了好久才搞清楚,问了不走弯路。这次决定用博客来记录一下现在的成果。配置文件如下: void TIME_ini(uint16_t Channel4Pulseset) { TIM_TimeBaseInitTypeDef TIM_Time
[单片机]
漫谈STM32的GPIO
简介:单片的输入输出不叫GPIO,仅仅是个io,稍微复杂点的就是串口,至于后面那些增强的1t的带da的单片机,都不属于入门学习范围.那些东西都是为了低成本而存在,对学习没有任何作用.只要初学者入门了,所有片内外设都非常简单的搞定.本文是一片基础学习文章.入门者的精神食粮. 理解gpio不仅仅是会配置寄存器,因为好多人根本不知道寄存器如何配置.如果不信的话那回答我这个问题,stm32的io频率到底该配置成多少Mhz? 上面这张图是来自stm32的中文版手册.我对这些模块进行了简单的标注.下面我就从外到内进行分析信号的流向以及每一部分存在/屏蔽的意义. 先看上半部分,就是io的I,input,输入功能.信号从io引脚流入,
[单片机]
漫谈<font color='red'>STM32</font>的GPIO
stm32 启动文件的选择
最近在网上看到一些关于STM32启动文件的问题帖,都是类似这样的问题: 随便选两个 startup_stm32f10x_ld、hd、md这3个启动文件有什么不同??? 官网固件库中的启动文件有啥区别,怎么选择? 搜索了论坛,也看了一下,有一些回答,但是都不太全或者不甚明了。其实我以前也不清楚,当然我是新手,只不过是个爱折腾的新手,因为我觉得,这个有必要弄清楚。一是启动文件在一个工程中有着不可取代的作用,二是对于STM32这个让人蛋疼而又强大的东东,经常是新手乱添加启动文件或者去找一下工程例子 依葫芦画瓢 的添加,试问你的MCU和人家工程例子的就是一样,换一款型号,要命 ?所有说,基于这些,我就说一说我的认识: 注意此处只针
[单片机]
<font color='red'>stm32</font> 启动文件的选择
存储器系统的非对齐访问
我是之前在试验STM32G031G8U6单片机内部FLASH读操作时候发现的这个问题:STM32F103的flash数据可以从任意地址读,而STM32G031G8U6就不行,读数据地址不对齐的话会死机, 关于什么是非对齐访问,可以参考下图1,来源于CM3权威指南CH5相关内容: 图1 先说结论: 1.Cortex-M0内核不支持****非对齐访问 2.Cortex-M3内核支持非对齐访问 3.intel i5支持非对齐访问 4 .是否支持对存储器的非对齐访问取决于具体使用的内核 本次试验的完成耽误了很久,因为最近一周我得新冠了,体质差得新冠了啥也做不了。以下记录了我的 实验验证过程,过程很长, 没
[单片机]
存储器系统的非对齐访问
STM32通过PWM控制电机速度
做STM32智能小车的实验中会用到定时器PWM输出,来改变直流电机的转速。分享本文了解如何通过PWM实现对电机速度的控制。 PWM控制电机速度的基本原理 PWM(Pulse Width Modulation),也就是脉冲宽度调制。 PWM中有一个比较重要的概念,占空比:是一个脉冲周期内有效电平在整个周期所占的比例。 为了实现IO口上电压的持续性变化,可以调节PWM的占空比。这也能够使外设的功率进行持续性变化,最终控制直流电机转速的快慢。如何调节PWM波形的输出就是重点。 上图中的ARR是我们给定时器的一个预装载值,CCRx的上下变化是产生PWM波的关键。我们假设ARR大于CCRx的部分输出为高电平(即t1-t2、t3-t4、
[单片机]
<font color='red'>STM32</font>通过PWM控制电机速度
STM32】FSMC 应用
【时间计算】 由公式:DATAST HCLK = tWRLW , DATAST= 15/13.8 ns = 1.08 ,取 1 。 再由公式((ADDSET + 1) + (DATAST + 1)) HCLK = max(tCYC, tCYC(READ)) ,即((ADDSET + 1) + (DATAST + 1)) HCLK = 66 ,算出 ADDSET = 66/13.8 - 3 = 1.7,这取 2 。 最后 得出 Address setup time: 0x1 Address hold time: 0x0 Data setup time: 0x2 。不知道这个设置是否有问题。
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved