51什么是单片机的工作频率有什么测频率的办法,范围10-50KHZ,误差<1%,每秒测三次测频法每秒测1次,已经排除。

导师任务安排要做基于STM32的PTP同步實验。在网上发现了linuxPTP的项目该项目实现了普通时钟和边界时钟。


为了使用PTP预期接口的内核网络驱动程序必须支持软件或硬件时间戳功能

然后查看网卡的支持项,我这里网卡只支持软件时间戳

STM32F407作为从时钟实现了PTP通信和时间矫正
以下由STM32从时钟串口发送回来的数据,可以看箌时钟偏差

这次是针对NUCLEO_L552ZE_Q开发板的第三次评测貼上次的帖子介绍了如何在Windows平台上搭建开发环境,既然环境已经准备好了接下来我们就要开始动手写程序测试了(写程序是不会写的,这辈子都不会写程序的因为有STM32CubeMX),是的STM32CubeMX把基本的程序框架都写好了,对于基本的测试只需敲几行字母就行了,真是懒人的必备囧哈哈。

废话不多说相信许多玩过什么是单片机的工作频率的朋友都知道,拿到一款什么是单片机的工作频率写程序的第一步无非就昰GPIO口的输出输入功能,输出功能就是点亮一盏LED输入功能就是按键扫描,那接下来我们就遵守这一不成文的规定先从GPIO口的输出输入功能叺手。

在开始之前我们还需要了解一些如何使用STM32CubeMX新建一个工程的知识。

在电脑的磁盘上新建一个文件夹这个文件夹并不是工程目录,臸于工程目录是哪个稍后会说。注意文件件的名称,上级名称上上级名称等,就是整个路径一定不能含有中文!半个中文都不能囿!不信你可以试试。为了演示我就随便建个名为“Demo”的文件夹,如下图

3、然后在左下角的“MCUs/MPUs List”中选择所需要的什么是单片机的工作頻率型号,我这里选择STM32L552ZET6Q双击什么是单片机的工作频率型号,

4、弹出窗口问你是否使用TrustZone我选择No,然后就创建了一个STM32CubeMX工程

2、在“Project Location”中选擇在第一步的时候创建的文件夹,

3、在“Project Name”中填入工程名(不能是中文)填入的工程名就是这个工程的根目录,路径如蓝色框所示

4、茬“Toolchain / IDE”中选择“MDK-ARM”,其他保持默认即可具体如下图所示,

5、最左边选项切换到“Code Generator”在右边的“STM32Cube MCU packages an embedded software packs”中有三个选项,意思分别为拷贝全部嘚库文件到工程目录中、仅拷贝需要的库文件到工程目录中、仅在工程文件中引用需要的库文件(库文件放在STM32CubeMX的安装目录中)我选择第②项,

6、设置时钟属性点击STM32CubeMX工程窗口上方的“Project Manager”选项,在“HCLK(MHz)”中输入需要的时钟频率按回车键,在弹出的提示中选择Ok便可我输入STM32L552ZET6Q的朂大时钟频率:110MHz,其他的保持默认:内部高速时钟16MHz和内部低速时钟32KHz

7、配置点亮LED灯的GPIO,NUCLEO_L552ZE_Q开发板上共有三盏LED灯分别为红绿蓝三色,根据原悝图提供的信息红绿蓝三盏等分别接在了什么是单片机的工作频率的PA9、PC7和PB7引脚,我选择了最经典的红色LED在“Pinout & Configuration”中使用鼠标左键点击什麼是单片机的工作频率模型上的PA9引脚(右侧从上往下数第8个引脚),在小窗口中选择“GPIO_Output”至此,STM32CubeMX工程就配置好了

点击上方菜单中的“File”,选择“Save Project”即可

鼠标左键单击右上方的“GENERATE CODE”,软件便可根据之前的配置自动生成一个代码工程如果在第一步中创建的目录中有中文,在这一部生成代码工程的时候就会出现错误提示导致工程创建失败,因此需要特别注意

irvers:存放STM32的固件库以及ARM公司提供的CMSIS库,通常情況下不需要修改里面的文件内容;

inc:存放用户编写的.h文件文件内容可修改;

MDK-ARM:存放MDK的工程文件,以及STM32的启动文件文件内容通常情况下鈈需要修改;

src:存放用户编写的.c文件,文件内容可修改

D在MDK-ARM文件夹内,双击打开.uvprojx后缀的工程文件不需要改动,直接链接一遍看是否有問题,结果0错误、0警告

打开main.c文件,找到主函数main()在主函数的while循环内添加如下代码,意思为每隔500ms对PA9引脚进行电平取反操作让红色LED灯闪烁。

1、电机窗口上方的魔术棒弹出配置窗口;

2、切换到“Debug”选项;

5、在弹出的窗口中切换到“Flash Download”选项,勾选“Reset and Run”使得将程序烧录到什么昰单片机的工作频率后就会自动复位并运行程序。

6、点击“确定”、“OK”确认修改后再次编译链接工程,0错误0警告

1、使用一根Micro USB数据线鏈接电脑与开发板上的ST-Link USB-A口,如果还没安装驱动可查看我上一期的帖子,末尾有附件如果开发板上的LD4亮红色,LD6亮绿色说明连接正常。

2、电机MDK软件左上角的下载按钮开始将程序下载到什么是单片机的工作频率上运行。

3、观察运行情况红色LED灯开始闪烁,说明GPIO口能够正常輸出高低电平

将MDK-ARM工程关闭,根据原理图知道开发板上的USER按键连接在什么是单片机的工作频率的PC13引脚回到STM32CubeMX工程,在“Pinout & Configuration”中使用鼠标左键點击什么是单片机的工作频率模型上的PC13引脚(芯片模型的左侧从上往下数第7个引脚)在小窗口中选择“GPIO_Input”,保存STM32CubeMX工程并且点击“GENERATE CODE”重新苼成代码

1、打开MDK-ARM工程,在main.c源文件的主函数实现代码的开头添加如下代码声明两个局部变量。

2、在主函数的while循环内添加如下代码实现按键扫描和LED闪烁功能。

3、修改完之后编译链接一遍代码,将代码烧录到开发板上用手按开发板左下方的USER按键,观察红色LED的闪烁频率变囮情况实际情况如下:

仿位带操作:实现与51什么是单片机的工作频率一样的IO口操作方法

使用过正点原子Cortex_M3或者Cortex_M4系列什么是单片机的工作频率开发板的朋友都应该接触过位带操作功能,在Cortex_M3权威指南(中文)中的第5.5节有如下介绍

在CM3中有两个区中实现了位带。其中一个是SRAM区的最低1MB范围第二个则是片内外设区的最低1MB范围。这两个位带中的地址除了可以像普通的RAM一样使用外它们还都有自己的“位带别名区”,位帶别名区把每个比特膨胀成一个32位的字当你通过位带别名区访问这些字时,就可以达到访问原始比特的目的

文中所述的位带区与位带別名区有如下对应关系

STM32什么是单片机的工作频率的GPIO口地址就在片内外设区的最低1MB范围内,意思就是能够通过位带别名区中的每一个地址操作到对应的片内外设区的外设寄存器中的一个bit,往位带别名区中的地址写1则对应的片内外设区的外设寄存器中的相应位就会置1,读取位带别名区中的地址的值就会返回对应的片内外设区的外设寄存器中的相应位的值,GPIO口的每一个Pin的电平就是由ODR寄存器中的每一个位来控淛以及通过IDR寄存器中的一个位来获取一个Pin的电平。但是我查找过Cortex_M33的手册,并没有发现这个位带别名区也就是Cortex_M33没有位带操作功能,但峩可以通过自定义一个位域结构体来实现类似的操作实现代码如下:

可将此代码封装到一个头文件内供调用,使用方法同正点原子的源碼一样

可见,在STM32CubeMX的帮助下实现一些基础的功能代码还是比较方便的,加之有HAL固件库的支持无论什么是单片机的工作频率的底层寄存器如何变化,HAL固件库都已经统一封装成一致的函数名使用起来也非常方便。本次测试的GPIO口操作主要使用到了两个函数:HAL_GPIO_TogglePin和HAL_GPIO_ReadPin,两个函数嘚实现也比较简单都是直接操作寄存器:

本次我们介绍了GPIO口的使用,由于篇幅已经太多了花了一天时间才写完,等下次有空再介绍其怹一些基本的功能

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人不代表电子发烧友网竝场。文章及其配图仅供工程师学习之用如有内容图片侵权或者其他问题,请联系本站作侵删 

导读:本文针对用什么是单片机嘚工作频率制作电子钟或要求根据时钟启控的控制系统时出现的校准了的电子时钟的时间竟然变快或是变慢了的情况而提出的一种解决方案。

  什么是单片机的工作频率应用中常常会遇到这种情况,在用什么是单片机的工作频率制作电子钟或要求根据时钟启控的控制系统时会突然发现当初校准了的电子时钟的时间竟然变快或是变慢了。  于是尝试用各种方法来调整它的走时精度,但是最终的效果还是不尽人意只好每过一段时间手动调整一次。那么是否可使时钟走时更精确些呢?现探讨如下:  

1.什么是单片机的工作频率电孓时钟的计时脉冲基准是由外部晶振的频率经过12分频后提供的,采用内部的定时计数器来实现计时功能。所以外接晶振频率的精确喥直接影响电子钟计时的准确性。  2.什么是单片机的工作频率电子时钟利用内部定时计数器溢出产生中断(12MHz晶振一般为50ms)再乘以相应嘚倍率,来实现秒、分、时的转换大家都知道,从定时计数器产生中断请求到响应中断,需要3_8个机器周期定时中断子程序中的数据囚栈和重装定时,计数器的初值还需要占用数个机器周期此外。从中断人口转到中断子程序也要占用一定的机器周期例如:

从上述程序可以看出,从中断人口到定时/计数器初值的低8位装入需要占用2+2+2=6个机器周期所以,在编程时一般会把这6个机器周期加入定时/计数器的初徝中但是,从定时计数器溢出中断请求到执行中断需要几个机器周期(3~8个机器周期)。就很难确定准确值正是这一原因导致了电子時钟计时的不准。  

1、采用高精度晶振方案

虽然采用高精度的晶振可以稍微提高电子钟计时的精确度但是晶振并不是导致电子钟计时鈈准的主要因素,而且高精度的晶振价格较高所以不必采用此方案。  2、动态同步修正方案

从程序人手采用动态同步修正方法给定時,计数器赋初值动态同步修正方法如下:由于定时,计数器溢出后又会从O开始自动加数,故在给定时/计数器再次赋值前先将定时,计数器低位(TLO)中的值和初始值相加然后送人定时,计数器中此时定时,计数器中的值即为动态同步修正后的准确值具体程序如丅:

采用此种方法后,相信制作的电子时钟的精度已有提高了

采用同步修正方案后,电子时钟的精度虽然提高了很多但是由于晶振频率的偏差和一些其他未知因素的影响(同一块电路板、同样的程序换了一片什么是单片机的工作频率后,走时误差不一样不知是何原因),时间长了仍然会有积累误差为此,可采用自动调整方案实际上是一种容错技术。其自动调整原理为:实测出误差Is所需的时间然後每隔这样一段时间后就对秒进行加“1”或减“1”调整。例如:电子钟每过50小时就慢1秒其自动调整程序如下:

使用此方法调整较费时间,但效果非常好经实验,一次调整可以将月误差控制在Is左右如按此方法再次测出误差Is所需的天数并进行二次调整,其精度会更高

声奣:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人不代表电子发烧友网立场。文章及其配图仅供工程师学习之用如有内容图片侵权或者其他问题,请联系本站作侵删 

我要回帖

更多关于 什么是单片机的工作频率 的文章

 

随机推荐