目的
测试不同情况下IO翻转的速度
测试环境
- MDK5.38
- 实验例程\实验一 流水灯实验
- 示波器:DS1054
测试代码
- 使用TOG进行测试:
int main()
{
uint32_t i;
RCC_Configuration();
GPIO_Configuration();
while(1)
{
PA08_TOG();
}
}
速率为4MHz:
- 使用直接写高BSRR/BRR
int main()
{
uint32_t i;
RCC_Configuration();
GPIO_Configuration();
while(1)
{
PA08_SETHIGH();
PA08_SETLOW();
}
}
所示频率为6.41MHz
3. 我们看到上面的波形占空比好象不是50%,是因为跳转也需要点用时间,所以我修改了一下代码进行测试:
int main()
{
uint32_t i;
RCC_Configuration();
GPIO_Configuration();
loop:
PA08_SETHIGH();
PA08_SETLOW();
PA08_SETHIGH();
PA08_SETLOW();
PA08_SETHIGH();
PA08_SETLOW();
PA08_SETHIGH();
PA08_SETLOW();
PA08_SETHIGH();
PA08_SETLOW();
PA08_SETHIGH();
PA08_SETLOW();
PA08_SETHIGH();
PA08_SETLOW();
PA08_SETHIGH();
PA08_SETLOW();
PA08_SETHIGH();
PA08_SETLOW();
PA08_SETHIGH();
PA08_SETLOW();
PA08_SETHIGH();
PA08_SETLOW();
PA08_SETHIGH();
PA08_SETLOW();
goto loop;
}
测得波形如下:
从上图我们得知频率可以达到15.9MHz。
- 经查看数据手册,GPIO有两种速度模式一种高速,一种是低速,但是我配置高低速都是一样。
【总结】经测试,对GPIO进行了原子的操作,最高速度可以达到15.9MHz。对寄存器直接写BSRR、BRR,相比TOG速度还是要快很多。当于提供了TOG这个寄存器,对于需要翻转电平,还是非常方便的。
|