我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 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控制器 基础定时器的使用。