玩转X-CTR100 l STM32F4 l 定时器时间测量

我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/

本文介绍X-CTR100控制器 使用处理器内部硬件定时器时间测量功能,可以测量程序代码运行时间。

原理

定时器(Timer)最基本的功能是定时,比如定时发送USART 数据、定时采集AD数据等等。如果把定时器与GPIO 结合起来使用的话可以实现非常丰富的功能,可以测量输入信号的脉冲宽度,可以生产输出波形。定时器生产PWM控制电机状态是工业控制普遍方法,这方面知识非常有必要深入了解。

STM32F407控制器有2 个高级控制定时器、10 个通用定时器和2 个基本定时器。控制器上所有定时器都是彼此独立的,不共享任何资源。

本文使用基础定时器TIM6,实现最基本的时间测量功能。该定时器的主要模块由一个 16 位递增计数器及其相关的自动重载寄存器组成。计数器的 时钟可通过预分频器进行分频。

计数器、自动重载寄存器和预分频器寄存器可通过软件进行读写。即使在计数器运行时也可执行读写操作,框图如下。

例程

本例程实现X-CTR100 TIM6时间测量功能。

硬件说明

硬件资源:

  • 串口UART1

硬件连接:

使用MicroUSB数据线连接X-CTR100 COM接口。

软件生态

X-SOFT软件生态,X-API文件如下。

ax_timer.c——X-CTR100 定时器时间测量源文件

ax_timer.h——X-CTR100 定时器时间测量头文件

操作函数如下:

void AX_TIMER_TIM6_Init(uint16_t period); //TIM6初始化

void AX_TIMER_TIM6_SetCounter(uint32_t count); //TIM6设置计数器数值

uint32_t AX_TIMER_TIM6_GetCountert(void); //TIM6获取计数器数值

AX_TIMER_TIM6_Init()函数可以设置计数周期,单位为us。

软件说明

测量AX_Delayus()函数延时1000us时间,主程序如下。

int main(void)

{

    uint32_t tmp;

 

    //X-CTR100初始化

    AX_Init(115200);

    printf("***X-CTR100 舵机控制例程***\r\n\r\n");

 

    //模块初始化及配置

    AX_TIMER_TIM6_Init(10); //计数周期1us

 

                            //X-API测试:16路舵机控制测试    

    printf("*16路舵机控制测试\r\n");

 

    while (1)

    {

        //测量10us

        AX_TIMER_TIM6_SetCounter(0); //TIM6 设置计数器数值

        AX_Delayus(1000);

        tmp = AX_TIMER_TIM6_GetCountert(); //获取计数器数值

 

        printf("测量时间:%d us\r\n", tmp);

        AX_Delayms(1000);

    }

}

实现效果

运行效果如下图所示。

    

总结

通过本文学习,掌握X-CTR100控制器 基础定时器的使用。

猜你喜欢

转载自www.cnblogs.com/xtark/p/9366311.html
l