从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);
}
}
相关推荐
程序员yu10 小时前
会编网络:别被入门教程骗了,Python实用能力不在语法本身
开发语言·python·学习·算法
Lintongzg10 小时前
千卡训练的隐形账单:通信不是瓶颈
笔记·学习·性能优化·llm
dadaobusi10 小时前
学习: SIOV
学习
嵌入式分享11 小时前
嵌入式分#49:浅 8080,RGB,LVDS 与 MIPI 显口
嵌入式硬件·lcd
LuminousCPP11 小时前
从零开始学 C++(三):类和对象入门|从 struct 到 class,理解封装、对象与 this 指针
c++·笔记·学习·类和对象
szarron11 小时前
VNA6 便携式矢量网络分析仪|1MHz‑6.3GHz 手持 VNA 真实应用场景全解析
前端·嵌入式硬件·信息可视化·数据挖掘·数据分析
传奇开心果编程11 小时前
【Flutter入门练中学】第11课:状态管理进阶与声明式路由
android·学习·flutter·ui·ios
承渊政道12 小时前
Linux系统学习【进程信号详细解析——认识、产生、保存以及捕捉信号】
linux·学习·ubuntu·ssh·vs code·进程信号
゛凌乱的记忆づ12 小时前
50元从零到成品:一套AI辅助的嵌入式实战入门教程——ADC采集篇
stm32·单片机·嵌入式硬件
女神下凡12 小时前
芯参谋(31):SPI NOR Flash 电路设计指南
arm开发·单片机·嵌入式硬件·fpga开发·设计规范