STM32-笔记21-脉冲计数

一、实验目的

将定时器 2 通道 2 输入的低电平脉冲作为定时器 2 的时钟,并通过串口打印脉冲数

PSC=0,ARR=65535

外部时钟模式1、触发选择、上升沿触发、不分频、不滤波

二、实验前配置

复制项目文件19-串口打印功能,重命名23-脉冲计数

加载文件

别忘了这里

三、代码:

main.c

cpp 复制代码
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "uart1.h"
#include "counter.h"

int main(void)
{
    HAL_Init();                         /* 初始化HAL库 */
    stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
    led_init();//初始化led灯
    uart1_init(115200);
    counter_init(0,65536-1);
    
    while(1)
    { 
        counter_get();
    }
}

counter.c

cpp 复制代码
#include "counter.h"
#include "stdio.h"

TIM_HandleTypeDef counter_handle = {0};
uint16_t new_count = 0;
uint16_t old_count = 0;

//初始化时基参数配置
void counter_init(uint16_t psc,uint16_t arr)
{
    TIM_SlaveConfigTypeDef slave_config = {0};
    
    counter_handle.Instance = TIM2;
    counter_handle.Init.RepetitionCounter = psc;
    counter_handle.Init.Period = arr;
    counter_handle.Init.CounterMode = TIM_COUNTERMODE_UP;//向上计数
    
    HAL_TIM_IC_Init(&counter_handle);
    slave_config.InputTrigger = TIM_TS_TI2FP2;//定时器2通道2
    slave_config.SlaveMode = TIM_SLAVEMODE_EXTERNAL1;
    slave_config.TriggerFilter = 0;
    slave_config.TriggerPolarity = TIM_TRIGGERPOLARITY_FALLING;
    HAL_TIM_SlaveConfigSynchro(&counter_handle,&slave_config);
    
    HAL_TIM_IC_Start(&counter_handle,TIM_CHANNEL_2);
}


//msp函数初始化
void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim)
{
    if(htim->Instance == TIM2)
    {
        GPIO_InitTypeDef gpio_initstruct;
        //打开时钟
        __HAL_RCC_TIM2_CLK_ENABLE();
        __HAL_RCC_GPIOA_CLK_ENABLE();
        
        gpio_initstruct.Mode = GPIO_MODE_AF_PP;//复式推挽输出
        gpio_initstruct.Pin = GPIO_PIN_1;
        gpio_initstruct.Pull = GPIO_PULLUP;//上拉电阻
        gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH;//高速
        
        HAL_GPIO_Init(GPIOA,&gpio_initstruct);
              
    }
    
    
}

//获取CNT的值
void counter_get(void)
{
    new_count = __HAL_TIM_GET_COUNTER(&counter_handle);
    if(new_count != old_count)
    {
        old_count = new_count;
        printf("CNT: %d\r\n",new_count);
    }
}

counter.h

cpp 复制代码
#ifndef __COUNTER_H__
#define __COUNTER_H__

#include "sys.h"
void counter_init(uint16_t psc,uint16_t arr);
void counter_get(void);

#endif

打卡串口助手

按下KEY2

相关推荐
hanlin031 分钟前
刷题笔记:力扣第19题-删除链表的倒数第N个结点
笔记·leetcode·链表
Micahㅤ9 分钟前
【EMC测试报告笔记】报 告里写 CE、骚扰功率、EN55022-MainTermB,到底在测什么?
笔记·emc·电磁兼容性
嘶哈哈哈12 分钟前
雷迅 CAN Babel 新品测评:一个小巧的 CAN/UART 双功能 USB 调试适配器
单片机·嵌入式硬件
菜鸟的升级路32 分钟前
C语言栈刷题:LeetCode 20 有效的括号完整解题笔记
c语言·笔记·leetcode
晓梦林42 分钟前
[Dest0g3 520迎新赛]EasyPHP-学习笔记
android·笔记·学习
Zevalin爱灰灰1 小时前
模拟信号链电路——感应触摸电路
单片机·嵌入式硬件
国科安芯1 小时前
还是4位?ASC8T245S 与 ASC4T245S 的双向电平转换选型实战
单片机·嵌入式硬件·物联网·fpga开发·机器人·云计算
小黄蚁2 小时前
LVGL学习笔记(一)
笔记·学习
懿路向前2 小时前
【HarmonyOS学习笔记】2026-07-26 | @Trace 序列化 __ob_ 前缀陷阱与消息持久化
笔记·学习
hanlin032 小时前
刷题笔记:力扣第206题-反转链表
笔记·leetcode·链表