平台: IAR5.30 ST-LINK 使用3IN1的板子和STM32的FWLIB. 系统工作于72MHz下,初始化GPIO速度为50MHz,没有开任何的中断.
while (1) { //GPIO_LED->BSRR = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8; GPIO_SetBits(GPIO_LED, GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8); Delay(500); //GPIO_LED->BRR = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8; GPIO_ResetBits(GPIO_LED, GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8); Delay(500); } 这样的话,在示波器上测量到的(一个翻转)时间间隔为91uS
while (1) { GPIO_LED->BSRR = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8; //GPIO_SetBits(GPIO_LED, GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8); Delay(500); GPIO_LED->BRR = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8; //GPIO_ResetBits(GPIO_LED, GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8); Delay(500); } 如果直接操作寄存器的话,则只需要84uS,足足有7个uS的差别,可是查看FWLIB中的GPIO_SetBits和GPIO_ResetBits却很简单的也只是操作了寄存器而已, 难道STM32的函数调用开销有这么大,还是有一些另外的开销在里面呢?
|