[AT32F421] AT32F421 Timer1 PWM 频率异常抖动

[复制链接]
1676|7
 楼主| One2INF 发表于 2022-9-1 15:18 | 显示全部楼层 |阅读模式
代码说明:
使用内部晶振,TIMER1 频率 120 MHz。
仅在 AT32 的 FreeRTOS 例程上添加 PWM 输出,附件为所上传的工程。

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

PWM 抖动

PWM 抖动

PWM 抖动


注释 vTaskStartScheduler(); 后稳定

PWM 稳定

PWM 稳定


  1. int main(void)
  2. {
  3.   nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);

  4.   system_clock_config();

  5.   uart_print_init(115200);
  6.   PWM_Init();

  7.   taskENTER_CRITICAL();

  8.   if(xTaskCreate((TaskFunction_t)default_task_function,
  9.                  (const char*   )"LED2_task",
  10.                  (uint16_t      )512,
  11.                  (void*         )NULL,
  12.                  (UBaseType_t   )2,
  13.                  (TaskHandle_t* )NULL) != pdPASS)
  14.   {
  15.     printf("default task could not be created as there was insufficient heap memory remaining.\r\n");
  16.   }
  17.   else
  18.   {
  19.     printf("default task was created successfully.\r\n");
  20.   }

  21.   taskEXIT_CRITICAL();

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

  24.   while(1)
  25.   {
  26.   }
  27. }





AT32F421-FreeRTOS.zip (618.65 KB, 下载次数: 27)

 楼主| One2INF 发表于 2022-9-9 14:46 | 显示全部楼层
多日测试验证,结帖。

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

PS:开启 -O2 未抖动,未作进一步验证。
tanleitanlei 发表于 2022-9-2 11:13 | 显示全部楼层
出问题时,抓取一下系统内部时钟波形看看(配置MCO输出),先确定一下系统时钟是否稳定
wilhelmina2 发表于 2022-9-3 17:12 | 显示全部楼层
这个有可能是IO口被复用了。  
lzbf 发表于 2022-9-3 18:06 | 显示全部楼层
代码有问题吗  
Henryko 发表于 2022-9-7 21:33 | 显示全部楼层
是不是io被复用了
Undshing 发表于 2022-10-5 21:01 | 显示全部楼层
被复用了?
asmine 发表于 2022-10-7 21:20 | 显示全部楼层
为什么会这样
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部