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