测试平台介绍
- STM32F103C8T6是嘉立创地阔星最小系统板
- AT32F421C8T7最小系统板(自制)
- AI8051U最小系统板(自制)

测试代码介绍
-
int i;
float a = 3.1415926f, b = 2.71828f, c = 0.0f;
float temp;
float result;
for(int i = 0; i < 1000; i++) {
c = a + b;
c = a - b;
c = a * b;
c = a / b;
temp += c;
}
for(int i = 0; i < 1000; i++) {
c = sqrt(a);
c = sin(a);
c = exp(b);
c = a*b + c/b;
result += c;
}
测试方案
- 使用PWM输入捕获上升沿和下降沿,测一个IO高点电平的宽度。得到计算时间,在需要计算的部分,令一个IO为高电平,计算结束之后,使这个IO为低电平。使用PWM输入捕获这个引脚的电平,在定时器中断内部输出计数值。定时器分频之后的计数频率为1Mhz即可。比如STM32定时器的定时器输入频率为72Mhz,那么就需要定时器分频系数为71,AT32的定时器输入频率为120Mhz,那么就需要分频系数为119,AI8051U同理。
- 编译器编译优化关闭,都为-O0



//假设P14为普通IO,P20为输入捕获IO
P14 = 1;//这里会进入PWM通道1的上升沿中断
/*
计算部分
*/
P14=0;//这里会进入PWM通道2的下降沿中断,用下降沿中断时的值,减去上升沿时的值。即可得到运算时间。
测试结果
单片机 |
运行时长 |
排名 |
AI8051U |
86736us=0.086736s |
1 |
AT32F421C8T7 |
179568us=0.179568s |
2 |
STM32F103C8T6 |
310956us=0.310956s |
3 |
结果分析
附件说明
- test_pwm_cap是AI8051U的工程代码
- AT32F421C8T7_TEST_FPU AT32F421的代码
- pwm_input_capture是STM32F103C8T6的代码