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

相关推荐
xian_wwq5 分钟前
【学习笔记】《孙子兵法》与网络安全
网络·笔记·学习
Shylock_Mister6 分钟前
弱函数:嵌入式回调的最佳实践
c语言·单片机·嵌入式硬件·物联网
bbxyliyang11 分钟前
基于430单片机多用途定时提醒器设计
单片机·嵌入式硬件·51单片机
d111111111d11 分钟前
STM32外设学习-ADC模数转换器(代码部分)四个模块,光敏,热敏,电位,反射式红外。
笔记·stm32·单片机·嵌入式硬件·学习
nenchoumi311918 分钟前
ROS2 Humble 笔记(八)动作 action
笔记·机器人·ros2
范纹杉想快点毕业26 分钟前
STM32百问百答:从硬件到软件全面解析
单片机·嵌入式硬件
三品吉他手会点灯1 小时前
STM32F103学习笔记-16-RCC(第3节)-使用HSE配置系统时钟并使用MCO输出监控系统时钟
c语言·笔记·stm32·单片机·嵌入式硬件·学习
摇滚侠1 小时前
Vue 项目实战《尚医通》,医院详情菜单与子路由,笔记17
前端·vue.js·笔记
CarmenHu1 小时前
IBM RAG挑战赛冠军方案学习笔记
笔记·学习
赶飞机偏偏下雨2 小时前
【MySQL笔记】索引 (非常重要)
笔记