我是靠谱客的博主 高高茉莉,最近开发中收集的这篇文章主要介绍stmcubemx 脉冲计数_使用定时器计数STM32F7上的脉冲,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我和步进电机有类似的问题。我为(DRV8825,A4899芯片)制作了一个步进驱动程序代码,代码是基于iRQ的,并且有电机加速,速度等数学。但我必须测试它是否准确,所以我不得不计算步数。

对于测试案例,我将具体引脚配置为ETR(外部触发输入) - 它是输入引脚,我的步进输出引脚转到该输入,(当然也是电机)。每个上升或下降沿(取决于配置)都会产生一个irq,所以在irq我可以设置步数计数器,在你的情况下是脉冲。

我不熟悉cubeMX的东西,大多数时候我直接写注册或使用旧的SPL(标准外围驱动程序)。我将展示它如何与SPL一起工作,因为它应该对cubeMX用户更具可读性。

无论如何,我只是想表明基本的想法如何去做。这个具体的代码适用于STM32f030

首先配置输入引脚(读取数据表只需几个引脚可用作外部触发器和具体定时器)

void digital_input_config (void){

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource12, GPIO_AF_2);

}

现在您需要一个定时器配置,每个定时器都有不同的ETR引脚,因此它取决于您的STM32 MCU。您必须准确读取数据表。

void enable_capture_TIM1(void){

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

TIM_ETRClockMode2Config(TIM1,TIM_ExtTRGPSC_DIV_NONE,TIM_ExtTRGPolarity_NonInverted,0x00);

TIM_SelectInputTrigger(TIM1,TIM_TS_ETRF);

TIM_SelectSlaveMode(TIM1,TIM_SlaveMode_Trigger);

NVIC_InitTypeDef NVIC_InitStruct;

NVIC_InitStruct.NVIC_IRQChannel = TIM1_BRK_UP_TRG_COM_IRQn;

NVIC_InitStruct.NVIC_IRQChannelPriority = 0;

NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStruct);

TIM_Cmd(TIM1, ENABLE);

TIM_ITConfig(TIM1, TIM_IT_Trigger, ENABLE);

}

在IRQ你可以进行脉冲计数。

void TIM1_BRK_UP_TRG_COM_IRQHandler(void){

if(TIM_GetITStatus(TIM1, TIM_IT_Trigger) != RESET) {

TIM_ClearITPendingBit(TIM1, TIM_IT_Trigger);

PulseCNT++;

}

}

我用脉冲发生器对此代码进行了测试,它非常准确,可用于脉冲计数或频率测量。

最后

以上就是高高茉莉为你收集整理的stmcubemx 脉冲计数_使用定时器计数STM32F7上的脉冲的全部内容,希望文章能够帮你解决stmcubemx 脉冲计数_使用定时器计数STM32F7上的脉冲所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部