1681|0

931

帖子

3

TA的资源

纯净的硅(中级)

楼主
 

定时器如何配置? [复制链接]

    准备使用激光测距模块,需要进行微秒计数,我用定时器4,设定时间为1um,每次中断时对变量进行加1操作,测试时是在主循环中先将变量清零,然后启动定时器4,稍后停止定时器4,再显示变量值。代码是用CubeMX生成的,STM32F103C8T6芯片,程序编译通过,也可以运行,但变量值不会变化,可能是定时器4没有正常启动,也许是配置不正确造成的。相关的代码如下,麻烦大家帮我看看是什么问题,在此先谢谢各位!
 

1、tim.c文件

#include "tim.h"

extern uint16_t distance;

TIM_HandleTypeDef htim4;


void MX_TIM4_Init(void)  //static 
{

    TIM_SlaveConfigTypeDef sSlaveConfig = {0};
    TIM_MasterConfigTypeDef sMasterConfig = {0};


    htim4.Instance = TIM4;
    htim4.Init.Prescaler = (72-1);                                               //预分频值
    htim4.Init.CounterMode = TIM_COUNTERMODE_UP;       //向上计数
    htim4.Init.Period = (1000-1);                                               //重载值
    htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;     //不分频
    htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
    if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
    {
        Error_Handler();
    }
    sSlaveConfig.SlaveMode = TIM_SLAVEMODE_RESET;
    sSlaveConfig.InputTrigger = TIM_TS_ITR0;
    if (HAL_TIM_SlaveConfigSynchronization(&htim4, &sSlaveConfig) != HAL_OK)
    {
        Error_Handler();
    }
    sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;               //主输出触发器
    sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;  //
    if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
    {
        Error_Handler();
    }

    //开启定时器时钟
    _HAL_TIM_Base_MspInit(&htim4);

}

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{

    if(tim_baseHandle->Instance==TIM4)
    {
        /* TIM4 clock enable */
        __HAL_RCC_TIM4_CLK_ENABLE();

        /* TIM4 interrupt Init */
        HAL_NVIC_SetPriority(TIM4_IRQn, 0, 0);
        HAL_NVIC_EnableIRQ(TIM4_IRQn);
        /* USER CODE BEGIN TIM4_MspInit 1 */

        /* USER CODE END TIM4_MspInit 1 */
    }
}

 

2、tim.h文件

#ifndef __tim_H
#define __tim_H
#ifdef __cplusplus
 extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include "main.h"

extern TIM_HandleTypeDef htim4;

void MX_TIM4_Init(void); 


#ifdef __cplusplus
}
#endif
#endif /*__ tim_H */

 

3、stm321xx_it.c文件(部分)

void TIM4_IRQHandler(void)
{
    /* USER CODE BEGIN TIM4_IRQn 0 */

    /* USER CODE END TIM4_IRQn 0 */
    HAL_TIM_IRQHandler(&htim4);
    /* USER CODE BEGIN TIM4_IRQn 1 */
    distance++;
    /* USER CODE END TIM4_IRQn 1 */
}

 

4、main.c文件中对定时器的操作

int main(void)
{
    uint8_t i;

    HAL_Init();

    SystemClock_Config();

    MX_GPIO_Init();
    MX_RTC_Init();
    MX_TIM4_Init();
    MX_ADC1_Init();
    MX_I2C1_Init();
    MX_SPI1_Init();
    MX_USART1_UART_Init();

    LCD_init();
    display_main();
    led_green_off();

    while (1)
    {
        distance = 0;                              //清零计数值
        HAL_TIM_Base_Start(&htim4);  //开启定时器

        if(keyf>0){
            LCD_write_value(10,1,3,0,1,keyf);
            LCD_write_value(10,2,3,0,1,keys);
        }
        if(ms>999){
            ms = 0;
            led_green_flashing();
            led_red_flashing();

        }

        HAL_TIM_Base_Stop(&htim4);    //关闭定时器
        LCD_write_value(10,3,5,0,1,distance);  //显示定时器中断次数(计时)

    }
}

 

此帖出自stm32/stm8论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表