我近期在使用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 差值也太大了吧 |