One2INF 发表于 2022-9-1 15:18

AT32F421 Timer1 PWM 频率异常抖动

代码说明:
使用内部晶振,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)
{
}
}







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]
查看完整版本: AT32F421 Timer1 PWM 频率异常抖动