我需要使用STM32F401改变PWM的频率和占空比。在"脉冲完成" PWM回调中,我尝试了以下代码
HAL_GPIO_WritePin(LED5_PORT, LED5_PIN, GPIO_PIN_RESET);
//tentative 1
//TIM9->ARR = round(value);
//TIM9->CCR1 = round(value) * 0.2;
//tentative 2
//htim9.Instance->ARR = round(value);
//htim9.Instance->CCR1 = round(value) * 0.2;
//tentative 3
int *point = (int *) (TIM9_BASE + 0x2C);
*point = round(value);
int *point1 = (int *) (TIM9_BASE + 0x34);
*point1 = round(value) *0.2;
HAL_GPIO_WritePin(LED5_PORT, LED5_PIN, GPIO_PIN_SET);
在所有3个情况下,如果我用示波器测量示波器,则在LED 5的ON/OFF状态之间通过的时间为6U。仅开/关状状态为500NS。这意味着我正在等待我的功能返回5.5U,只是为了分配这两个寄存器,因此我的性能频率有限。
很明显,我有一个我没有看到的问题。
有什么想法?
问候
很明显,我有一个我没有看到的问题。
肯定 - 第一个和主要的 - HAL库。改用裸寄存器。
另一个 - 您使用double(不是浮动的数字(数字和数学功能 - 您的FPU不会帮助您。任何计算都需要数十个时钟周期。
So with 84MHz核心,HAL&Double 5U不错:D