[CubeMX]STM32F103RCT6,定时器TIM学习记录,LED亮灭

一、CubeMX工程创建

一张图直接看明白

                 Serial Wire, 外部高速晶振,LED引脚配置

        最关键的定时器配置

别忘了NVIC

最后生成代码

二、代码编写 

中断开启函数

  /* USER CODE BEGIN 2 */
    HAL_TIM_Base_Start_IT(&htim2);
    HAL_TIM_Base_Start_IT(&htim6);
  /* USER CODE END 2 */
 

中断回调函数(相当于51的 interrupt)

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(htim->Instance == htim2.Instance) 
    {    
        static int16_t tim_delay;
        if(++tim_delay>=500) // 1ms * 500 = 500ms
        {
            tim_delay = 0;
            HAL_GPIO_TogglePin(LED_1_GPIO_Port, LED_1_Pin);
        }
    }
    if(htim->Instance == htim6.Instance)
    {
        static int16_t tim2_delay;
        if(++tim2_delay>=200) // 1ms * 500 = 500ms
        {
            tim2_delay = 0;
            HAL_GPIO_TogglePin(LED_2_GPIO_Port, LED_2_Pin);
        }
    }
}


 

### STM32F103RCT6 定时器使用方法 #### 配置定时器基础参数 为了使STM32F103RCT6定时器正常工作,需先初始化基本参数。这包括设定预分频系数(PSC)和自动重装载值(ARR),两者共同决定了计数频率以及溢出时间。 ```c // 初始化 TIM2 外设结构体 TIM_HandleTypeDef TimHandle; TimHandle.Instance = TIM2; TimHandle.Init.Prescaler = 7999; // 设置预分频值为8000-1 (假设系统时钟为8MHz) TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP; // 向上计数模式 TimHandler.Init.Period = 4999; // 自动重载值为5000-1 TimHandle.Init.ClockDivision = 0; TimHandle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if(HAL_TIM_Base_Init(&TimHandle)==HAL_OK){ /* 开启定时器 */ HAL_TIM_Base_Start_IT(&TimHandle); } ``` 上述代码片段展示了如何配置一个向上计数模式下的通用定时器(TIM2)[^1]。 #### 中断服务程序实现 当定时器达到其周期结束条件时会触发中断,在此期间可以执行特定的任务处理逻辑。下面是一个简单的例子,它实现了每半秒切换一次LED状态的功能: ```c void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim->Instance==TIM2) { static uint16_t tim_delay=0; if(++tim_delay>=500)// 延迟500次即约等于500ms { tim_delay=0; // 切换LED电平高低 HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); } } } ``` 这段C语言函数定义了一个回调机制来响应由硬件产生的周期性事件,并利用静态变量`tim_delay`控制实际的时间间隔[^3]。 #### 调整定时精度 对于更精确的时间测量需求,则可以通过修改PSC(Prescaler)寄存器中的数值改变输入时钟信号被分割的比例;而更改ARR(Auto Reload Register)则能直接影响每次循环所需经历的最大计数值。因此,适当调节这两个参数即可满足不同应用场景的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值