关于STM32精准采频率的实现

发布者:平静的33号最新更新时间:2019-03-13 来源: eefocus关键字:STM32  精准采频率 手机看文章 扫描二维码
随时随地手机看文章

这次做训练题遇到了采频率的问题,做单项并网问题,需要实时了解频率的相关信息。 


尝试直接用他们提供的输入捕获,发现并不是很好用,琢磨了半天,实现了自己的部分采用。 


这里就不一步一步的分析了,估计看的情况也比较少。 


直接上手,不过,博主是从正点原子那里直接得到的库里面查找的信息。 


一般定时器的配置


pwm_in_mode.h文件

这里介绍了两个配置函数


#ifndef __TIMER_H

#define __TIMER_H

#include "stm32f4xx.h"


void TIM2_CH2_Cap_Init(void);

void TIM2_IRQHandler(void);


#endif


看自己的爱好,我这里把一般的(u16 arr,u16 psc)省略到里面去了,大家可以直接改掉也行,加在函数头里面传参。


pwm_in_mode.c文件

有几种模式,大家可以直接抄过去


时间设定初始化

TIM_ICInitTypeDef  TIM_ICInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); 


TIM_TimeBaseStructure.TIM_Prescaler=84-1;                       

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; 

TIM_TimeBaseStructure.TIM_Period=0xffffffff;//对应下面                         

TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1;

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);


引脚初始化

GPIO_InitTypeDef GPIO_InitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); 


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //GPIOA1      

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; 

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; 

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);   

GPIO_PinAFConfig(GPIOA,GPIO_PinSource1,GPIO_AF_TIM2);


中断优先级

NVIC_InitTypeDef NVIC_InitStructure;


NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;

NVIC_InitStructure.NVIC_IRQChannelSubPriority =0x03;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 

NVIC_Init(&NVIC_InitStructure); 


使能和其他配置

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;


TIM_ICInitStructure.TIM_Channel = TIM_Channel_2; 

TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; 

TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;

TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;    

TIM_ICInit(TIM2,&TIM_ICInitStructure);

TIM_ICInitStructure.TIM_ICFilter = 0x0;//   


TIM_PWMIConfig(TIM2,&TIM_ICInitStructure);


/* Select the TIM4 Input Trigger: TI2FP2 */

TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2);


 /* Select the slave Mode: Reset Mode */

TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);

TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);


/* TIM enable counter */

TIM_Cmd(TIM2,ENABLE);

TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE);



中断函数处理

这里就可以计算出周期和时间了,也可以直接复制过去。


void TIM2_IRQHandler(void)

    TIM_ClearITPendingBit(TIM2, TIM_IT_CC2); //Çå±ê־λ 


    IC2Value=TIM_GetCapture2(TIM2);

    IC1Value=TIM_GetCapture1(TIM2);


    if(IC2Value!=0){

        DutyCycle=(float)IC1Value*100/IC2Value;

        Frequency =(float)1000000/IC2Value;//对应上面的1Mhz

    }

    else{

        DutyCycle=0;

        Frequency=0;

    }

}


显示和现象对比

OLED_Refresh_Gram();

if(print_mode==0)

{       

   OLED_ShowString(0,0,"MeasureResult:",16);

   OLED_ShowString(0,16,"IC2Value:",16);

   OLED_ShowNum(72,16,IC2Value,7,16);

   OLED_ShowString(0,32,"DutyCycle:",16);

   OLED_ShowFloatNum(80,32,DutyCycle,7,16); 

   OLED_ShowString(0,48,"Frequency:",16);

   OLED_ShowFloatNum(80,48,Frequency,7,16);

}

aaa

精度与误差

这里定时器读到的IC1Value和IC2Value精度的限制,博主试过,最小可识别刻度在0.002hz,暂时还是够用的。 

 z'z'z 

如果做的过程中没能实现,可以直接下载参考我的.c文件,这里是文件链接。 

注意,博主的单片机型号是STM32F4系列的,时钟配置的TIM2是168M,如果不懂时钟的计算可以参考我前面的文章有讲解。

关键字:STM32  精准采频率 引用地址:关于STM32精准采频率的实现

上一篇:STM32F4开发板----GPIO(001)
下一篇:LCD浮点数显示函数的探讨

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

基于正点原子的FTFLCD原理阐述
STM32操作FTFLCD模块的流程图 任何 LCD,使用流程都可以简单的用以上流程图表示。其中硬复位和初始化序列,只需要 执行一次即可。而画点流程就是:设置坐标→写 GRAM 指令→写入颜色数据,然后在 LCD 上 面,我们就可以看到对应的点显示我们写入的颜色了。读点流程为:设置坐标→读 GRAM 指令 →读取颜色数据,这样就可以获取到对应点的颜色数据了。 TFTFLCD的数据端口简介 ILI9341 液晶控制器自带显存,其显存总大小为 172800(240*320*18/8),即 18 位模式(26 万色)下的显存量。在 16 位模式下,ILI9341 采用 RGB565 格式存储颜色数据,此时 ILI9341 的 1
[单片机]
基于正点原子的FTFLCD原理阐述
STM32串口工作在DMA模式下有时接收异常
前言 客户反馈在使用STM32F205的串口工作在DMA模式时,有时能够接收数据,有时完全没有数据,但如果换成中断模式来接收又能100%正常收到数据。 一 复现现象 问题背景 与客户沟通,客户使用的是STM32F2标准库V1.1.0,串口波特率为1.408Mbps,不经过串口RS232,直接连接主CPU和从MCU(STM32F205)的串口发送和接收引脚,如下图所示: 尝试重现问题 由于客户使用的是主从架构,实验采用两块STM3220G-EVAL评估板来重现现象。一块用来不间断发送串口数据,另一块采用串口DMA进行接收,直接通过杜邦线连接串口PIN脚并共地,不使用评估板上的RS232收发器。接收端使用STM32F2xx_Std
[单片机]
<font color='red'>STM32</font>串口工作在DMA模式下有时接收异常
简述STM32系列ID号加密破解方法
STM32系列单片机通常会遇到ID号软加密,一般行外认识是不清楚如何去除软加密的,此次分享,是告诉您,如何判断是否有软加密及软加密去除方法。 具体方法如下: 1、读出完整程序段,搜索关键字节“E8F7FF 1F”,因为STM32唯一 的96位(12字节) ID基地址位于0x1FFF7E8, 若程序段中涉及ID 校验必然会读取芯片中ID索引该地址。。 2、用工具读取此芯片该地址的96位(12字节) ID 码,找到空片区 写入此地址,更改索引地址:例如此芯片ID码为“34 FF DA 05 4E50 38 31 19 65 18 43”选取起始地址区域0x80000020,在前四个字节输入“34 FF 1843”,后12字节输入“
[单片机]
用汇编语言实现STM32的LED和USART
; AREA RESET, DATA, READONLY DCD 0x20000000 + 1024 ;0 DCD UserMain ;1 DCD 0 ;NMI 2 DCD 0 ;HardFault 3 DCD 0 ;MemManage 4 DCD 0 ; 5 DCD 0 ; 6 DCD 0 ; 7 DCD 0 ; 8 DCD 0 ; 9 DCD 0 ; 10 DCD 0 ; 11 DCD 0 ; 12 DCD 0 ; 13 DCD 0 ; 14 DCD SysTick_Handler ; 15 HelloString DCB Hello Wordn HelloEnd HexTable DC
[单片机]
stm32单片机教程实例-步进电机的速度控制
  项目需求      在制作一个使用全向轮的机器人底盘,对于全向轮,的精度是影响效果的重要因素。所以使用了,使用步进电机的优点是可以不使用,开环控制即可达到高精度的效果。 调整占空比或者调整周期      众所周知,PWM有两个重要参数,周期与占空比。     步进电机的运动方式是,每收到一个脉冲,就旋转指定的角度。因此影响电机速度的唯一参数就是PWM的频率。以下附图两张来说明调整占空比与调整周期的区别。 周期固定,调整占空比     上图中有4个PWM,它们的周期是一样的,不同之处是拥有从80%至20%的占空比。可以看出,无论占空比为多少,在1s内,它们产
[机器人]
STM32使用esp8266和MQTT协议与OneNET平台进行通信
单片机是STM32f103系列,通信模块是esp8266,协议MQTT,可以实现向OneNET传输数据(可以是传感器),OneNET平台返回数据对系统进行控制 单片机源程序如下: #include main.h int main() { u16 timeCount = 0; //发送间隔变量 u8 *dataPtr = NULL; u8 data ={0x12,0x23,0x45,0x68,0x79,0xAB,0x00,0xEF}; u8 buf ; Stm32_Clock_Init(9); //系统时钟设置 uart_init(72,9600
[单片机]
STM32中按键中断分析
在按键学习中,我们有用到查询的方法来判断按键事件是否发生,这种查询按键事件适用于程序工作量较少的情况下,一旦程序中工作量较大较多,则势必影响程序运行的效率,为了简化程序中控制的功能模块的执行时间,引入中断控制就很有必要,,一旦有中断时间发生,则程序立马跳转到中断向量的执行程序中,执行完成后就恢复到正常的程序状态。 在STM32F中采用中断控制器NVIC来设定中断。按照中断初始化配置的结构体文件,我们需要在NVIC初始化结构体配置如下: void EXti_PB12_Config(void) { //定义结构体 GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeD
[单片机]
STM32的一些基本知识总结
Cortex-M3缩略语 AMBA:先进单片机总线架构 ADK:AMBA设计套件 AHB:先进高性能总线 AHB-AP:AHB访问端口 APB:先进外设总线 ARM ARM:ARM架构参考手册 ASIC:行业领域专用集成电路 ATB :先进跟踪总线 BE8:字节不变式大端模式 CPI:每条指令的周期数 DAP:调试访问端口 DSP:数字信号处理(器) DWT:数据观察点及跟踪 ETM:嵌入式跟踪宏单元 FPB:闪存地址重载及断点 FSR:fault状态寄存器 HTM:Core Sight AHB跟踪宏单元 ICE:在线仿真器 IDE:集成开发环境 IRQ:中断请求(通常是外中断请求) ISA:指令系统架构 ISR:中断服务例程 I
[单片机]
<font color='red'>STM32</font>的一些基本知识总结
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved