打印
[AT32F421]

AT32F421 Timer1 PWM 频率异常抖动

[复制链接]
909|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
代码说明:
使用内部晶振,TIMER1 频率 120 MHz。
仅在 AT32 的 FreeRTOS 例程上添加 PWM 输出,附件为所上传的工程。

问题描述:
1. AT32F421 设置 Timer1 输出 200Khz PWM 会出现 1k 左右的抖动;
2. 代码直接注释 vTaskStartScheduler(); 则不会抖动;
3. 我在裸机程序也同样复现了该问题,但是代码不好简化,就没上传。

PWM 抖动


注释 vTaskStartScheduler(); 后稳定


int main(void)
{
  nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);

  system_clock_config();

  uart_print_init(115200);
  PWM_Init();

  taskENTER_CRITICAL();

  if(xTaskCreate((TaskFunction_t)default_task_function,
                 (const char*   )"LED2_task",
                 (uint16_t      )512,
                 (void*         )NULL,
                 (UBaseType_t   )2,
                 (TaskHandle_t* )NULL) != pdPASS)
  {
    printf("default task could not be created as there was insufficient heap memory remaining.\r\n");
  }
  else
  {
    printf("default task was created successfully.\r\n");
  }

  taskEXIT_CRITICAL();

  /* 注释后 PWM 不会抖动 */
  vTaskStartScheduler();

  while(1)
  {
  }
}





AT32F421-FreeRTOS.zip (618.65 KB)

使用特权

评论回复
来自 2楼
One2INF|  楼主 | 2022-9-9 14:46 | 只看该作者
多日测试验证,结帖。

问题原因:
输出内部时钟验证,程序直接影响了内部晶振;
同样内部晶振及输出频率未在其他 32 上出现,推测是芯片的 BUG;

PS:开启 -O2 未抖动,未作进一步验证。

使用特权

评论回复
板凳
tanleitanlei| | 2022-9-2 11:13 | 只看该作者
出问题时,抓取一下系统内部时钟波形看看(配置MCO输出),先确定一下系统时钟是否稳定

使用特权

评论回复
地板
wilhelmina2| | 2022-9-3 17:12 | 只看该作者
这个有可能是IO口被复用了。  

使用特权

评论回复
5
lzbf| | 2022-9-3 18:06 | 只看该作者
代码有问题吗  

使用特权

评论回复
6
Henryko| | 2022-9-7 21:33 | 只看该作者
是不是io被复用了

使用特权

评论回复
7
Undshing| | 2022-10-5 21:01 | 只看该作者
被复用了?

使用特权

评论回复
8
asmine| | 2022-10-7 21:20 | 只看该作者
为什么会这样

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝