本帖最后由 liusheng1998 于 2023-2-26 20:37 编辑
mbox=CAN_Transmit(CAN1,&TxMessage);
MyDelay(250);
这就是我的延时函数。
void MyDelay(int us)
{
int cnt=0;
int last_cnt=0;
last_cnt=TIM_GetCounter(TIM3);
while(cnt<us)
{
if(last_cnt != TIM_GetCounter(TIM3))
{
last_cnt=TIM_GetCounter(TIM3);
cnt++;
}
}
}
下面看出来 延迟的效果是 300us 200us 300us 200us。
1 0000060B 8 17 50 C4 28 7C EE 44 81 1077.264156 R
1 0000060B 8 17 50 C4 28 7C EE 44 82 1077.264466 R
1 0000060B 8 17 50 C4 28 7C EE 44 83 1077.264666 R
1 0000060B 8 17 50 C4 28 7C EE 44 84 1077.264976 R
1 0000060B 8 17 50 C4 28 7C EE 44 85 1077.265176 R
不知道是为什么,跟抵达延时器的效果差不多,只能是200 300 不能是250根据我的数据接收显示,单论定时器存在的问题就是 为什么会有小于250us的延迟出现。就不考虑CAN报文发送是否需要时间。
延时的执行函数 应该会大于等于250us的接收间隔吧!我自己的分析:
虽然执行次数是对的,比如说参数us是250次 while判断,但是向上计数一次 耗时不是严格1us导致。
也就是说初始化配置定时器的1us不准确?。这个东西能不能设置准确呢?
|