更新ARR和CCR1延迟功能返回6U



我需要使用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

最新更新