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

相关推荐
串口哑火达人4 小时前
(六)RT-Thread网络通信--AT组件与ESP8266
c语言·单片机·嵌入式硬件·mcu·物联网
qq_411262425 小时前
把esp32-c2当单片机用,不用wifi,如何配置,节省更多内存
单片机·嵌入式硬件
日更嵌入式的打工仔5 小时前
个人笔记3
笔记
天外来鹿7 小时前
Map/Set/WeakMap/WeakSet学习笔记
前端·javascript·笔记·学习
kaikaile19957 小时前
农业物联网基于STM32的LoRa无线通信系统设计与实现
stm32·嵌入式硬件·物联网
菩提小狗7 小时前
第23天:安全开发-PHP应用&后台模块&Session&Cookie&Toke_笔记|小迪安全2023-2024|web安全|渗透测试|
笔记·安全·php
HuDie3407 小时前
黑马多模态AIGC课程笔记
笔记·aigc
leixj0257 小时前
SVN学习笔记
笔记·学习·svn
小陈phd8 小时前
多模态大模型学习笔记(十三)——transformer学习之位置编码
人工智能·笔记·transformer
探序基因8 小时前
使用TRUST4分析普通转录组数据的TCR/BCR
经验分享·笔记·学习方法