华秋商城
直播中

李建平

7年用户 202经验值
私信 关注
[问答]

请问单片机怎么测试IO口的极限翻转速度?

最近在玩新唐的M451开发板,遇到要测试IO管脚的最大翻转速度,经过一番研究终于测出来了,在这里做一个总结,希望对遇到同样问题的朋友,有所帮助。
新唐的MCU,IO口的翻转速度理论上的最大值是50MHz,但是理论与现实往往是有差距的,因此想要知道一款单片机IO口的真正翻转速度,就需要自己去真实的测试。
测试方法:在程序中配置一个IO口为推挽输出模式,写一个while(1){}  循环,循环里面不停的将IO口拉低,拉高,拉低,拉高......然后用示波器去测试这个管脚的波形,从示波器上读出那个最高的频率是多少。
注意事项: 1.对于IO口的输出波形,正常情况下应该是方波。
            2.写测试程序时,也尽可能的简单,不要有其他的干扰,只需要配置系统时钟,定义IO口,然后就是while循环了。
            3.在IO口翻转速率较低的时候,观察波形,是正常的方波,随着翻转速度的不断加大,波形有可能会失真,而不再是一个方波了。在波形有失真时去观察这时候的频率的最大值,一般就是IO口的最大翻转速率。
            4.在while循环中的拉低,拉高尽量写的多点,这样就更接近真实值。因为对循环条件的判断上也是要占用时间的
          下面是具体的代码,代码基于新唐M451开发板
int main(void)
{
    SYS_Init();
    GPIO_SetMode(PC, BIT5, GPIO_MODE_OUTPUT);
    while(1)
    {
        
      PC5 = 0;
      PC5 = 1;
                        
      PC5 = 0;
      PC5 = 1;
                           
     PC5 = 0;
     PC5 = 1;
                          
     PC5 = 0;
     PC5 = 1;
                          
    PC5 = 0;
    PC5 = 1;
                                
    PC5 = 0;
    PC5 = 1;
    PC5 = 0;
    PC5 = 1;
                        
   PC5 = 0;
   PC5 = 1;
                           
   PC5 = 0;
   PC5 = 1;
                          
  PC5 = 0;
  PC5 = 1;
                          
  PC5 = 0;
  PC5 = 1;
                                
  PC5 = 0;
  PC5 = 1;
                                 
PC5 = 0;
PC5 = 1;
                        
PC5 = 0;
PC5 = 1;
......
      }
}

回帖(2)

胡少莹

2019-9-29 16:51:07
真要知道极限,先使用最高频的本振,一般应该还能超频至少20%。然后用汇编编程,用“复制”、“粘贴”法,将整个存储器容量都填充成置1、置0的直接端口操作,最后一条直接跳转到起始地址即可。这才是极限。
举报

魏紫瑜

2019-9-29 16:56:18
恩  配置好频率  主函数中进行IO的高低切换   然后用示波器测输出引脚的频率  看看能到多少  
这应该就是他的最大输出频率
举报

更多回帖

发帖
×
20
完善资料,
赚取积分