使用标准库写stm32F103 tim1计数
时间: 2023-07-11 10:13:16 浏览: 84
APM32F103实现通用定时器脉冲计数【支持APM32F1系列单片机_标准库驱动】.zip
好的,这里是使用标准库写 STM32F103 的 Tim1 计数的示例代码:
```c
#include "stm32f1xx.h"
#include <stdio.h>
volatile uint32_t count = 0;
void TIM1_UP_IRQHandler(void) {
if (__HAL_TIM_GET_FLAG(&htim1, TIM_FLAG_UPDATE) != RESET) {
__HAL_TIM_CLEAR_FLAG(&htim1, TIM_FLAG_UPDATE);
count++;
}
}
int main(void) {
HAL_Init();
__HAL_RCC_GPIOC_CLK_ENABLE();
GPIO_InitTypeDef gpio;
gpio.Pin = GPIO_PIN_13;
gpio.Mode = GPIO_MODE_OUTPUT_PP;
gpio.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOC, &gpio);
__HAL_RCC_TIM1_CLK_ENABLE();
TIM_HandleTypeDef htim1;
htim1.Instance = TIM1;
htim1.Init.Prescaler = 7199; // 预分频器,将计数时钟频率分频为 10kHz
htim1.Init.CounterMode = TIM_COUNTERMODE_UP; // 向上计数模式
htim1.Init.Period = 999; // 自动重载值,计数器将在计数到 999 时重新从 0 开始计数
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_Base_Init(&htim1);
HAL_NVIC_SetPriority(TIM1_UP_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM1_UP_IRQn);
HAL_TIM_Base_Start_IT(&htim1); // 启动定时器,并开启定时器更新中断
while (1) {
printf("count = %d\n", count);
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
HAL_Delay(500);
}
}
```
此代码中使用 TIM1 定时器进行计数,计数器的时钟频率为 72MHz,通过将预分频器设置为 7199,将计数时钟频率分频为 10kHz,计数器的自动重载值为 999,即当计数器计数到 999 时重新从 0 开始计数。此代码中还使用了定时器更新中断,在每次定时器更新时,计数器值加 1。在 main 函数中,通过 HAL_GPIO_TogglePin 控制 LED 灯闪烁,并通过 printf 输出计数器的值。
阅读全文