从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);
}
}
相关推荐
py有趣5 小时前
LeetCode算法学习之两数之和 II - 输入有序数组
学习·算法·leetcode
BreezeJuvenile6 小时前
外设模块学习(15)——MQ-2烟雾气体传感器(STM32)
stm32·单片机·学习·mq-2·烟雾气体传感器
Jie_jiejiayou8 小时前
定时器详解以及呼吸灯实现 — STM32(HAL库)
stm32·单片机·嵌入式硬件·定时器
逆小舟8 小时前
【STM32】定时器、PWM
stm32·单片机·嵌入式硬件
XH1.8 小时前
学习RT-thread(RT-thread定时器)
stm32·单片机·学习
申克Lab8 小时前
STM32 串口概念 UART协议
stm32·单片机·嵌入式硬件
小莞尔9 小时前
【51单片机】【protues仿真】基于51单片机自动浇花系统
单片机·嵌入式硬件
2301_796512529 小时前
Rust编程学习 - 为什么说Cow 代表的是Copy-On-Write, 即“写时复制技术”,它是一种高效的 资源管理手段
java·学习·rust
故里21309 小时前
学习前端记录(二)21-40
学习
ThreeYear_s9 小时前
电力电子技术学习路径与FPGA/DSP技术结合方向(gemini生成)
学习·fpga开发