代码说明:
使用内部晶振,TIMER1 频率 120 MHz。
仅在 AT32 的 FreeRTOS 例程上添加 PWM 输出,附件为所上传的工程。
问题描述:
1. AT32F421 设置 Timer1 输出 200Khz PWM 会出现 1k 左右的抖动;
2. 代码直接注释 vTaskStartScheduler(); 则不会抖动;
3. 我在裸机程序也同样复现了该问题,但是代码不好简化,就没上传。
PWM 抖动
PWM 抖动
注释 vTaskStartScheduler(); 后稳定
PWM 稳定
- 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, 下载次数: 27)
|