stm32f1rct6有关延时函数的一些问题

2019-07-20 23:05发布

萌新刚开始学没多久的32 最近写东西老是出bug所以我就想了解下原理  萌新没有金币悬赏 就这么几个接下来是问题 第一个问题 :
      :【ucos 运行需要一个系统时钟节拍(类似 “心跳”),
而这个节拍是固定的(由 OS_TICKS_PER_SEC 宏定义设置),比如要求 5ms 一次(即可设置:
OS_TICKS_PER_SEC=200),在STM32 上面,一般是由SysTick 来提供这个节拍,也就是SysTick
要设置为 5ms 中断一次,为 ucos 提供时钟节拍,而且这个时钟一般是不能被打断的。】
这是寄存器版本手册里的一段话 下面是毫秒级延时函数
===============================================================================
//延时nus
//nus 为要延时的 us 数.
void delay_us(u32 nus)
{
u32 temp;

72
SysTick->LOAD=nus*fac_us; //时间加载
SysTick->VAL=0x00; //清空计数器
SysTick->CTRL=0x01 ; //开始倒数
do {
     temp=SysTick->CTRL;
}while((temp&0x01)&&!(temp&(1<<16)));//等待时间到达
      SysTick->CTRL=0x00; //关闭计数器
      SysTick->VAL =0X00; //清空计数器
}

================================================================================
最后两行关闭了这个时钟 那最前面那段话里的系统节拍谁来提供呢?
第二个问题就比较宽泛了:我写程序的时候遇到过延时函数无法使用的情况,什么时候会遇到这种情况呢,还有我定时器时1间500没有用但是49就有作用是什么情况呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
edmund1234
1楼-- · 2019-07-21 04:14
跑系统的就不应该用这样的Delay函数, 系统不是都自带Delay阻塞函数的么?
yhb2333
2楼-- · 2019-07-21 08:32
edmund1234 发表于 2019-7-6 12:09
跑系统的就不应该用这样的Delay函数, 系统不是都自带Delay阻塞函数的么?

等等 跑系统是啥意思 我最开始看到ucos也有疑惑 但是我查了资料之后还是不是很明白 手册上也没有说 我写的就是想倒立摆这种程序 这种程序是不需要用到系统的吗
warship
3楼-- · 2019-07-21 12:39
yhb2333 发表于 2019-7-6 12:56
等等 跑系统是啥意思 我最开始看到ucos也有疑惑 但是我查了资料之后还是不是很明白 手册上也没有说 我写 ...

跑系统指的是像UCOS这种嵌入式实时操作系统,
绝大多数简单的MCU应用都是不用操作系统(操作系统有较大的资源开销)的,
直接裸机编程就行了。

一周热门 更多>