STM32systick的问题

[复制链接]
3864|3
 楼主| kangwuwei 发表于 2011-4-2 14:33 | 显示全部楼层 |阅读模式
我近期在使用STM32的系统时钟实现延时,我需要实现的延时12.5us的倍数,我设计如下:void Systick_Initconfig()
{ SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK) ;
SysTick_SetReload(720);    // 12.5us  可能要修改此值
    SysTick_ITConfig(ENABLE);  //时能使能中断
}
按照正常的技术来说 12.5us的延时,“SysTick_SetReload”这个函数的值不应该是720,720应该是10us吧。
我现在做了一个简单的编码,发送0x55低位优先发送:编码方式是:37.5us的低电平代表数据开始,高电平25us表示,低电平12.5us表示;
设计的编码如下:
u8 code[9]= {0x03,0x02,0x01,0x02,0x01,0x02,0x01,0x02,0x01};
for(i=0;i<9;i++)
  {
    switch(code[i])
    {
    case 0x03:
     {GPIO_ResetBits(GPIOB,GPIO_Pin_0);
    Systick_Delays(3);
   
   }
   break;
   case 0x02:
   {
   GPIO_SetBits(GPIOB,GPIO_Pin_0);
            Systick_Delays(2);
   
   }
     break;
  case 0x01:
   {
    GPIO_ResetBits(GPIOB,GPIO_Pin_0);
          Systick_Delays(1);
   
   }
     break;
  default: break;
  }
但我实际测量发现,高电平没有25us,只有20us 差值也太大了吧
LDTEST 发表于 2011-4-2 18:54 | 显示全部楼层
本帖最后由 LDTEST 于 2011-4-2 18:55 编辑

函数调用也要时间吧,us 级别的 恐怕必需要考虑这个问题,何况 库函数 本来就慢
机器猫咪咪 发表于 2011-4-10 16:25 | 显示全部楼层
我们正在学习ARMJISHU的神舟III号STM32开发板,是基于STM32F103ZET的,其资源丰富,例程详细,根据学习光盘自带的例程我感觉:
10us建议使用如下方式:
  SysTick_Config(RCC_Clocks.SYSCLK_Frequency / 100000);
1S中中断100000次,也就是10us中断1次
liwandong 发表于 2011-4-13 09:27 | 显示全部楼层
挺不错哦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

190

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部