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

相关推荐
我真的是大笨蛋13 分钟前
K8S-Pod(下)
java·笔记·云原生·容器·kubernetes
阿让啊1 小时前
C语言strtol 函数使用方法
c语言·数据结构·c++·单片机·嵌入式硬件
梁小憨憨4 小时前
zotero扩容
人工智能·笔记
DebugKitty4 小时前
硬件开发1-51单片机4-DS18B20
单片机·嵌入式硬件·51单片机·ds18b20
Hello_Embed4 小时前
STM32HAL 快速入门(十九):UART 编程(二)—— 中断方式实现收发及局限分析
笔记·stm32·单片机·嵌入式硬件·学习
沐欣工作室_lvyiyi5 小时前
基于单片机的可燃性气体泄漏智能报警系统
stm32·单片机·嵌入式硬件·毕业设计
笑鸿的学习笔记5 小时前
JavaScript笔记之JS 和 HTML5 的关系
javascript·笔记·html5
hazy1k5 小时前
STM32H750 RTC介绍及应用
网络·stm32·实时音视频
殷忆枫6 小时前
基于STM32物联网冻保鲜运输智能控制系统
stm32·嵌入式硬件·物联网
武文斌776 小时前
单片机:DS18B20测温度、74HC595扩展芯片、8*8LED矩阵
运维·服务器·单片机·嵌入式硬件