[STM32F1] 在通用定时器 里面嵌套准确延时 systick

[复制链接]
3658|21
 楼主| 书的那页 发表于 2015-8-31 10:59 | 显示全部楼层 |阅读模式
请教下  我现在 用tim5 做了一个10ms  的定时器,然后 希望一个 GPIO  能够 在这个周期内保持 0.38ms的高电平  ,想用systick  做一个1us的 延时  然后 嵌套在 TIM5中  但是失败了 ,请问下 怎么  可以实现 比较精确的延时  ?谢谢     下面是我自己写的
void TIM5_IRQHandler
{
  if(TIM_GetITstatus(TIM5,TIM_IT_Update)!=RESET)
  {
    TIM_ClearITPendingBit(TIM5,TIM_IT_Update);
     led=0;
     adc=adget();
     delay(380);
     led=1;
  }
}
 楼主| 书的那页 发表于 2015-8-31 12:35 | 显示全部楼层
自己先顶一下 坐等大神
进击的ic 发表于 2015-8-31 13:40 | 显示全部楼层
定时器做的延时就是精准的延时啊,还有中断服务程序里应该不能触发中断,因为在第一次触发中断的时候寄存器会记录程序的返回地址,假设未返回就能触发新的中断,寄存器里的地址就会被重置,那么单片机就不知道最终的返回地址了。
楼主可以在10ms的中断里做一个标记位,然后在主函数里判断标记位来做准确的10ms周期,然后再在做us及延时
 楼主| 书的那页 发表于 2015-8-31 14:17 | 显示全部楼层
进击的ic 发表于 2015-8-31 13:40
定时器做的延时就是精准的延时啊,还有中断服务程序里应该不能触发中断,因为在第一次触发中断的时候寄存器 ...

嗯嗯  你的意见 很不错 我也发现 在主函数里面 使用 延时  函数 不会出错   但是没有想到使用标志位  
进击的ic 发表于 2015-8-31 16:05 | 显示全部楼层
书的那页 发表于 2015-8-31 14:17
嗯嗯  你的意见 很不错 我也发现 在主函数里面 使用 延时  函数 不会出错   但是没有想到使用标志位   ...

一般中断里都是放标记位的,中断服务程序越简短越好,比较复杂的代码中断服务函数太长会出问题
 楼主| 书的那页 发表于 2015-9-2 22:11 | 显示全部楼层
进击的ic 发表于 2015-8-31 16:05
一般中断里都是放标记位的,中断服务程序越简短越好,比较复杂的代码中断服务函数太长会出问题 ...

好的  谢啦
bbapple 发表于 2015-9-3 18:18 | 显示全部楼层
精确延时一般都会选用定时器吧。。
 楼主| 书的那页 发表于 2015-9-7 11:05 | 显示全部楼层
bbapple 发表于 2015-9-3 18:18
精确延时一般都会选用定时器吧。。

用 systick  也比较精确的  可以试一下
迪卡 发表于 2015-9-7 14:15 | 显示全部楼层
在主函数里面使用延时函数比较好
皈依 发表于 2015-9-7 15:22 | 显示全部楼层
做个精确的delay延时就可以啦
在main里面先高电平 delay 0.38ms 低电平 delay 9.62ms 循环
豆腐块 发表于 2015-9-8 21:24 | 显示全部楼层
定时器做的延时是比较精准的
尤彼卡 发表于 2015-9-8 21:35 | 显示全部楼层
中断服务程序越简短越好,延时都放在外面
bbapple 发表于 2015-9-13 09:54 | 显示全部楼层
书的那页 发表于 2015-9-7 11:05
用 systick  也比较精确的  可以试一下

恩 这个用的比较少。。
冰河w 发表于 2015-9-14 20:28 | 显示全部楼层
一般中断服务程序越简短越好
lefeng 发表于 2015-9-14 22:14 | 显示全部楼层
中断服务程序里应该不能触发中断的
sky.sun.zz 发表于 2015-9-15 07:56 | 显示全部楼层
systick与TIM是不同步的,无法在TIM5中断中操作正确时序的systick。
bbapple 发表于 2015-9-22 20:57 | 显示全部楼层
书的那页 发表于 2015-9-7 11:05
用 systick  也比较精确的  可以试一下

是的,这个也挺好的。。:):)
风清扬mxz 发表于 2015-9-22 23:13 | 显示全部楼层
lefeng 发表于 2015-9-14 22:14
中断服务程序里应该不能触发中断的

中断服务函数里面是可以触发中断的,比如抢占优先级高的中断可以打断抢占优先级低的中断,所以我觉得是可以的,,,欢迎讨论
lefeng 发表于 2015-9-23 21:11 | 显示全部楼层
抢占优先级高的中断可以打断抢占优先级低的中断

哦,对的,STM32是可以抢中断的
cowboy2014 发表于 2015-9-23 21:29 | 显示全部楼层
定时器做的延时就是精准的延时啊,还有中断服务程序里应该不能触发中断
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

73

帖子

0

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