stm32f103测频代码
时间: 2023-07-02 12:10:37 浏览: 115
以下是使用STM32F103单片机测量频率的示例代码:
```c
#include "stm32f10x.h"
uint32_t g_timer_counter = 0;
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
g_timer_counter++;
TIM_ClearITPendingBit(TIM2, TIM_FLAG_Update);
}
}
int main(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 使能TIM2时钟
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_Prescaler = 71; // 预分频器,72MHz / (71 + 1) = 1MHz
TIM_TimeBaseInitStructure.TIM_Period = 0xFFFFFFFF; // 自动重装载值
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数模式
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分频因子
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; // TIM2中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 子优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // IRQ通道使能
NVIC_Init(&NVIC_InitStructure);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); // 使能TIM2更新中断
TIM_Cmd(TIM2, ENABLE); // 使能TIM2
while (1)
{
if (g_timer_counter != 0)
{
uint32_t freq = 1000000 / g_timer_counter; // 计算频率,单位为Hz
g_timer_counter = 0; // 清零计数器
// 在这里可以将freq输出到数码管或者LCD屏幕上
}
}
}
```
该代码使用STM32F103单片机的TIM2模块作为计数器,通过中断累加计数值,然后计算出频率。在计算频率时,需要注意使用的时钟源以及预分频器的设置。
阅读全文