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

相关推荐
天空'之城1 天前
单片机基础核心知识点汇总(五)
单片机·嵌入式硬件
无聊的菜鸟1 天前
TMS320F2806X学习笔记(零)—— C2000、CCS、新建工程
笔记·mcu·c2000·f2806x
ljt27249606611 天前
Compose笔记(八十三)--onVisibilityChanged
笔记
Fa_Mian_Tuan1 天前
图论基础|邻接矩阵超详细讲解(含无向/有向/带权图+完整可运行C语言代码)
c语言·数据结构·笔记·算法·图论
恒锐丰-罗生1 天前
SS8103 芯片解析:45V 同步整流降压半桥恒流驱动控制器 大功率光源国产优选 告别低灰闪烁!
驱动开发·嵌入式硬件·硬件工程
zhangrelay1 天前
ROS 2 Lyrical 第9章 计算机视觉与摄像头应用
linux·笔记·学习·ubuntu·机器人·ros2
FakeOccupational1 天前
【电路笔记 STM32】stm32f103 实现HAL_UART_Transmit_DMA + 普通模式/连续模式的 UART DMA 收发
笔记·stm32·嵌入式硬件
wuyk5551 天前
第 6 章 FOC 完整系统整合:从算法到真机跑起来
c语言·开发语言·stm32·单片机·嵌入式硬件
恒锐丰科技韩生1 天前
率能 SS6810H|10‑32V 双通道 H 桥步进电机驱动 ETSSOP20 打印机安防舞台灯光专用
嵌入式硬件·硬件工程
156082072191 天前
直流耦合采集卡前端电路调试
嵌入式硬件·fpga开发