发新帖本帖赏金 3.00元(功能说明)我要提问
123
返回列表
打印
[STM32F4]

基本定时器做延时功能,急急急

[复制链接]
楼主: liusheng1998
手机看帖
扫描二维码
随时随地手机跟帖
41
xch| | 2023-2-27 23:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
我用运行80MHZ的 STM32L412 的TIM1 跑定时10us中断。使用CC1捕获中断。
测试结果中断函数一共使用了46个机器周期。说明80MHZ时钟下,中断仅占用46/800 的MCU资源。
由此推算,MCU 跑32MHZ 时,占用率会上升到 46/320,小于15%的占有率。
但依然富裕。

中断函数:/**
  * @brief This function handles TIM1 capture compare interrupt.
  */
void TIM1_CC_IRQHandler(void)
{
  volatile static uint32_t s=0;
  /* USER CODE BEGIN TIM1_CC_IRQn 0 */

  TIM1->SR =0;;
  s = TIM1->CNT;
  if(gDelay10us)
  {
    gDelay10us--;
  }

  asm("nop");
  /* USER CODE END TIM1_CC_IRQn 0 */
  //HAL_TIM_IRQHandler(&htim1);
  /* USER CODE BEGIN TIM1_CC_IRQn 1 */

  /* USER CODE END TIM1_CC_IRQn 1 */
}

主函数计算运行周期,CC1 捕获设置100;

  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    __WFI();
    cnt =TIM1->CNT-100;
    if (0 == gDelay10us)
    {
      gDelay10us =123;
    }
  }
;;;;;;;;;;;;;;;;;;;;;;




使用特权

评论回复
42
xch| | 2023-2-27 23:33 | 只看该作者
也就说MCU 跑4.6MHZ 时,10us定时中断函数才把MCU 毒死。

使用特权

评论回复
43
liusheng1998|  楼主 | 2023-3-9 21:16 | 只看该作者
此贴结贴
谢谢各位大神 尤其感谢@xch @Prry 两位。
提供的延时方案都可以实现。
通过分析仪能检测到微秒延时的IO翻转。
我的延时不准的原因是,CAN发送的时候需要一定的时间来实现,甚至它不受到延时的限制!
我暂时不明白这里出现了什么问题。
但是延时确实正常的功能。谢谢大家
我没有早点换用分析仪器检测。示波器也没用明白。迟迟没有验证单独延时功能。

使用特权

评论回复
发新帖 本帖赏金 3.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则