从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);
}
}
相关推荐
EVERSPIN13 小时前
基于灵动MM32F0140国产32位单片机的Mini-LED应用
单片机·嵌入式硬件·32位单片机·国产32位单片机
.鸣13 小时前
set和map
java·学习
confiself14 小时前
MAI-UI技术报告学习
学习
XXYBMOOO14 小时前
内核驱动开发与用户级驱动开发:深度对比与应用场景解析
linux·c++·驱动开发·嵌入式硬件·fpga开发·硬件工程
知识分享小能手16 小时前
Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04文件压缩与解压缩知识点详解(12)
linux·学习·ubuntu
iconball18 小时前
个人用云计算学习笔记 --37 Zabbix
运维·笔记·学习·云计算·zabbix
FPGAI19 小时前
Java学习之计算机存储规则、数据类型、标识符、键盘录入、IDEA
java·学习
四谎真好看19 小时前
MySQL 学习笔记(运维篇1)
运维·数据库·笔记·学习·mysql·学习笔记
hssfscv20 小时前
Javaweb学习笔记——Web
笔记·学习·web
随意起个昵称20 小时前
【题解学习】序列题
学习·算法