从0开始的STM32HAL库学习9

定时器输入捕获测频率

生成待测信号

配置环境

选择如上图所示

代码修改

在main函数中加入

cs 复制代码
  HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);

测量信号频率

配置环境

如图所示打开TIM3定时器

  1. 设置TI1FP1为ResetMode,即清空计数
  2. 使用内部时钟
  3. 通道 1 设置为输入捕获模式
  4. 设置预分频器为 72
  5. 自动重装寄存器为 65535
  6. 输入捕获上升沿
    7.打开NVIC中断

代码修改

重写并计算频率

cs 复制代码
int32_t freq;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	if (htim->Instance == TIM3) 
	{
		uint32_t capture =HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1)+1;//这里跟在keil中一样也要加1
		uint32_t aa=HAL_RCC_GetPCLK1Freq();
		uint32_t bb=(htim->Instance->PSC+1);
		uint32_t cc=HAL_RCC_GetPCLK1Freq()/(htim->Instance->PSC+1);
		freq=1000000/capture;
	}

main 函数中打开定时器和 IC

cs 复制代码
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim3, TIM_CHANNEL_1);

oled显示

cs 复制代码
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM2_Init();
MX_TIM3_Init();
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim3, TIM_CHANNEL_1);
OLED_Init();
OLED_Clear();
OLED_ShowString(1,1,"Freq:000000Hz");
while (1)
{
OLED_ShowSignedNum(1,6,freq,5);
}
}
相关推荐
LS_learner1 小时前
树莓派(ARM64 架构)Ubuntu 24.04 (Noble) 系统 `apt update` 报错解决方案
嵌入式硬件
魔力军1 小时前
Rust学习Day3: 3个小demo实现
java·学习·rust
●VON1 小时前
HarmonyOS应用开发实战(基础篇)Day01-《ArkTS基本知识》
学习·华为·harmonyos·鸿蒙·von
玄同7652 小时前
Python Random 模块深度解析:从基础 API 到 AI / 大模型工程化实践
人工智能·笔记·python·学习·算法·语言模型·llm
符哥20082 小时前
C++ 适合初学者的学习笔记整理
c++·笔记·学习
来自晴朗的明天2 小时前
16、电压跟随器(缓冲器)电路
单片机·嵌入式硬件·硬件工程
曦月逸霜2 小时前
Python快速入门——学习笔记(持续更新中~)
笔记·python·学习
AI视觉网奇2 小时前
blender 导入fbx 黑色骨骼
学习·算法·ue5·blender
星火开发设计2 小时前
this 指针:指向对象自身的隐含指针
开发语言·数据结构·c++·学习·指针·知识