OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3663|回复: 1

NANO板用TIM1中断写10us的delay函数进入后出不来

[复制链接]

2

主题

14

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2020-5-11
在线时间
12 小时
发表于 2020-8-1 23:20:23 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 wangSQ 于 2020-8-1 23:30 编辑
使用的是HAL库,仿照systick写的delay,定时器TIM1作为10us的时基使用,配置如下


仿照systick编写的延时函数,放在tim.c里
-------------------------------------------------------------------------------------------------------------------------------
/* USER CODE BEGIN 1 */
void TIM_IncTick(void){
        usTick += 1;
}


uint32_t TIM_GetTick(void){
        return usTick;
}

void Delay_10us(uint32_t Delay){
        uint32_t tickstart = TIM_GetTick();
        uint32_t wait = Delay;

        if (wait < HAL_MAX_DELAY)
          {
            wait += (uint32_t)(uwTickFreq);
          }
        while ((TIM_GetTick() - tickstart) < wait);

}
/* USER CODE END 1 */

-------------------------------------------------------------------------------------------------------------------------------
定时器设计为每10us进入一次中断,同样是仿照systick编写
-------------------------------------------------------------------------------------------------------------------------------
void TIM1_UP_IRQHandler(void)
{
  /* USER CODE BEGIN TIM1_UP_IRQn 0 */

  /* USER CODE END TIM1_UP_IRQn 0 */
  HAL_TIM_IRQHandler(&htim1);
  /* USER CODE BEGIN TIM1_UP_IRQn 1 */
  TIM_IncTick();
  /* USER CODE END TIM1_UP_IRQn 1 */
}
-------------------------------------------------------------------------------------------------------------------------------
到这里就很神奇了,这里TIM_IncTick函数有时候会报错undefined reference to `TIM_IncTick'
但在这个文件里已经include了tim.h

以上函数用于模拟PWM输出控制LED的亮度
-------------------------------------------------------------------------------------------------------------------------------
/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

HAL_GPIO_TogglePin(GPIOC,LED&0x00FF);
          Delay_10us(Duty_Cycle);
HAL_GPIO_TogglePin(GPIOC,LED&0x00FF);
          Delay_10us(100-Duty_Cycle);

  }
  /* USER CODE END 3 */

-------------------------------------------------------------------------------------------------------------------------------
单步调试的时候发现一直卡在第一个Delay_10us的while循环里,不知道为什么,请大佬们帮忙看看







正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

14

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2020-5-11
在线时间
12 小时
 楼主| 发表于 2020-8-1 23:31:57 | 显示全部楼层
本帖最后由 wangSQ 于 2020-8-2 08:28 编辑

捕获.JPG 配置图片没显示出来看这里
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 00:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表