stm32之测量周期

#include "tim4.h"

void TIM4_Init(void)
{
    // 开启时钟
    RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
    RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; // 使用 TIM4 的 GPIOB 时钟

    // 配置 PB6 为浮空输入 CNF 01 MODE 00
    GPIOB->CRL &= ~GPIO_CRL_MODE6;
    GPIOB->CRL &= ~GPIO_CRL_CNF6_1;
    GPIOB->CRL |= GPIO_CRL_CNF6_0; // 浮空输入

    // 定时器时基部分
    // 预分频71
    TIM4->PSC = 71;
    // 自动重装载值 1000
    TIM4->ARR = 65535; // 65535 是最大值,计数到这个值后会重装载
    // 向上计数
    TIM4->CR1 &= ~TIM_CR1_DIR;
    
    // TI1输入选择直通
    TIM4->CR2 &= ~TIM_CR2_TI1S; 
    // 输入滤波器
    TIM4->CCMR1 &= ~TIM_CCMR1_IC1F; // 无滤波
    // 配置边沿检测器极性上升沿触发
    TIM4->CCER &= ~TIM_CCER_CC1P;
    // 选择通道1的输入映射为TI1
    TIM4->CCMR1 &= ~TIM_CCMR1_CC1S; // 清除 CC1S 位
    TIM4->CCMR1 |= TIM_CCMR1_CC1S_0; 
    // 预分频器
    TIM4->CCMR1 &= ~TIM_CCMR1_IC1PSC; // 无预分频

    // 使能通道1输入
    TIM4->CCER |= TIM_CCER_CC1E;

    // 开启输入捕获中断使能
    TIM4->DIER |= TIM_DIER_CC1IE;

    // 配置 NVIC
    NVIC_SetPriorityGrouping(3); // 设置中断分组
    NVIC_SetPriority(TIM4_IRQn, 3); // 设置 TIM4 中断优先级
    NVIC_EnableIRQ(TIM4_IRQn); // 使能 TIM4 中断
}

void TIM4_START(void)
{
    TIM4->CR1 |= TIM_CR1_CEN; // 启动定时器
}

void TIM4

你可能感兴趣的:(物联网,stm32,单片机,嵌入式硬件)