你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32的systick时钟没法定时到1us?

[复制链接]
聿怀嘿嘿 提问时间:2015-1-10 21:31 /
阅读主题, 点击返回1楼
收藏 1 评论31 发布时间:2015-1-10 21:31
31个回答
聿怀嘿嘿 回答时间:2015-1-11 10:36:29
QianFan 发表于 2015-1-11 09:40
肯定能延时到1us啊,要么使用定时器延时,要么使用软件延时,但是软件延时不是很精确。
定时器延时有两种方 ...

谢谢!不过第二种方法具体要怎样实现呢?是设定好后不断查询?
聿怀嘿嘿 回答时间:2015-1-11 10:37:43
duanks 发表于 2015-1-11 09:51
你的系统一直在进中断,微妙级的延时用软件延时吧,想精确的话用逻辑分析仪慢慢调 ...

这是最后的办法、因为这个要根据不同的时钟频率来调整、我的目的是写一个通用的函数,这样方便一点
聿怀嘿嘿 回答时间:2015-1-11 10:38:28
feiante 发表于 2015-1-10 23:19
是不是计数溢出了?

应该不会把、10us能正常运行、1us应该不会溢出
二宽 回答时间:2015-1-11 10:44:44
觉得是代码问题,好好看看库开发
大秦正声 回答时间:2015-1-11 10:59:00
用的外部晶振?
延时6us呢?
cxtarm 回答时间:2015-1-11 11:16:21
定时到1us没问题,如果你中断处理函数太长可能就有问题
聿怀嘿嘿 回答时间:2015-1-11 11:25:20
大秦正声 发表于 2015-1-11 10:59
用的外部晶振?
延时6us呢?

确实是这样、用的内部晶振、从10us到1us中间某一点开始就不正常了
qianfan 回答时间:2015-1-11 12:51:28
聿怀嘿嘿 发表于 2015-1-11 10:36
谢谢!不过第二种方法具体要怎样实现呢?是设定好后不断查询?

还是while
xyc2690 回答时间:2015-1-11 13:32:23
本帖最后由 xyc2690 于 2015-1-11 13:33 编辑

static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{
  if (ticks > SYSTICK_MAXCOUNT)  return (1);                          /* Reload value impossible */

  SysTick->LOAD  =  (ticks & SYSTICK_MAXCOUNT) - 1;          /* set reload register */
  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);     /* set Priority for Cortex-M0 System Interrupts */
  SysTick->VAL   =  (0x00);                                                              /* Load the SysTick Counter Value */
  SysTick->CTRL = (1 << SYSTICK_CLKSOURCE) | (1<<SYSTICK_ENABLE) | (1<<SYSTICK_TICKINT); /* Enable SysTick IRQ and SysTick Timer */
  return (0);                                                                            /* Function successful */
}你看看这个,SYSTICK_MAXCOUNT 是多少,超过的话就一直while(1)了。
聿怀嘿嘿 回答时间:2015-1-11 17:04:18
xyc2690 发表于 2015-1-11 13:32
static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{
  if (ticks > SYSTICK_MAXCOUNT)  return ( ...

定时10us,也就是tick=SystemCoreClock / 100000,定时器正常工作、说明SystemCoreClock / 100000《=SYSTICK_MAXCOUNT;那么1us就是tick=SystemCoreClock / 1000000肯定要小于SYSTICK_MAXCOUNT
木易-357428 回答时间:2015-1-11 17:32:27
你仿真一下看看tick设置的具体是多少,是不是设置为零了,根本就不会工作的。
xyc2690 回答时间:2015-1-11 18:09:51
现在调通过了没?我的板子坏了,没法调试。。。
你用的库函数,延时1us需要用到systic中断,是不是在别的中断里调用这个延时?
试试用查询方式写呢。
聿怀嘿嘿 回答时间:2015-1-12 12:07:50
xyc2690 发表于 2015-1-11 18:09
现在调通过了没?我的板子坏了,没法调试。。。
你用的库函数,延时1us需要用到systic中断,是不是在别的中 ...

嗯、这两天考完试我再调一调,
火蒂树 回答时间:2015-1-12 14:42:44
1us作为tick可能太短了
中断服务函数一定要尽量短才行
如果要精确延时的话, 还是考虑RTC吧
sourire 回答时间:2017-3-8 20:50:01
那个数有上限 只能到10us

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版