从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);
}
}
相关推荐
黑眼圈子1 小时前
动态规划问题专项练习(未编辑完成...
学习·算法·动态规划
Aliex_git1 小时前
Nuxt 学习笔记(一)
前端·笔记·学习
烤麻辣烫1 小时前
json与fastjson
前端·javascript·学习·json
Jun6261 小时前
【STM32】HMC5883驱动(带航向角计算)
stm32·单片机·嵌入式硬件
tryqaaa_1 小时前
学习日志(二)【linux全部命令,http请求头{有例题},Php语法学习】
linux·学习·http·php·web
sxjk19872 小时前
WPS表格REGEXP公式提取车牌学习
学习·wps·表格·数据处理
wearegogog1232 小时前
基于STM32的酒精检测仪设计
stm32·单片机·嵌入式硬件
m0_377108142 小时前
PCB学习
学习
U盘失踪了2 小时前
Python 的 urljoin:告别手动拼接 URL 的烦恼
笔记·学习
思麟呀2 小时前
Epoll的学习,在select和poll的基础上
网络·数据库·sql·学习·tcp/ip