OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...

查看: 834|回复: 8

STM32F407上面跑FreeRTOS,delay_xms(500);延时问题求助!

[复制链接]

  离线 

1

主题

3

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2017-11-22
在线时间
0 小时
发表于 2017-11-22 22:01:02 | 显示全部楼层 |阅读模式
5金钱
使用探索者F4 资料盘(A盘)里面的列子-FreeRTOS实验2-1 FreeRTOS移植实验,修改LED引脚为PC1后,下载到开发板运行,在时间片是1ms的情况下(#define configTICK_RATE_HZ (1000)),按理说delay_xms(500);是延迟500ms,结果开发板上面
的LED是5秒改变一次状态。抱着怀疑的态度,在SysTick_Handler中断里面加入控制其他LED引脚翻转的代码,用示波器看发现
SysTick_Handler这个函数是10ms中断一次,难道#define configTICK_RATE_HZ (1000)这里不是让时间片为1ms吗?请各位大侠
分析一下。谢谢!下面附上关键代码.


时间片中断代码
void SysTick_Handler(void)
{       
    LED1=0;
    if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED)//系统已经运行
    {
        xPortSysTickHandler();       
    }
   LED1=1;
}


//LED0任务函数 =PC1
void led0_task(void *pvParameters)
{
    while(1)
    {
        LED0=~LED0;
        delay_xms(500);
    }
}  

是延时500ms

回复

使用道具 举报

  离线 

6

主题

488

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1553
金钱
1553
注册时间
2015-5-8
在线时间
256 小时
发表于 2017-11-22 22:14:23 | 显示全部楼层
configTICK_RATE_HZ (1000)确实为1ms
回复

使用道具 举报

  离线 

1

主题

3

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2017-11-22
在线时间
0 小时
 楼主| 发表于 2017-11-22 22:30:19 | 显示全部楼层
炫色康康 发表于 2017-11-22 22:14
configTICK_RATE_HZ (1000)确实为1ms

但我这里用示波器监测出来为10ms,LED灯5秒转换一次状态也说明是10ms,真是奇葩啊!
回复

使用道具 举报

  离线 

6

主题

488

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1553
金钱
1553
注册时间
2015-5-8
在线时间
256 小时
发表于 2017-11-22 22:42:15 | 显示全部楼层
这个时间应该是设成configTICK_RATE_HZ (100)了吧
回复

使用道具 举报

  离线 

1

主题

3

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2017-11-22
在线时间
0 小时
 楼主| 发表于 2017-11-22 23:00:05 | 显示全部楼层
正点原子公众号
炫色康康 发表于 2017-11-22 22:42
这个时间应该是设成configTICK_RATE_HZ (100)了吧

已经确认configTICK_RATE_HZ (1000)
回复

使用道具 举报

  离线 

3

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
290
金钱
290
注册时间
2015-10-27
在线时间
58 小时
发表于 2017-11-23 08:59:26 | 显示全部楼层
看一下配置的时钟和主频的数值是多少
回复

使用道具 举报

  离线 

32

主题

289

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1771
金钱
1771
注册时间
2016-8-10
在线时间
387 小时
发表于 2017-11-23 11:17:07 | 显示全部楼层
时钟频率不对  
回复

使用道具 举报

  离线 

16

主题

258

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1333
金钱
1333
注册时间
2017-7-6
在线时间
190 小时
发表于 2017-12-15 10:02:40 | 显示全部楼层
你如何证明你的systick中断是10MS一次,仿真过了吗?另外你用delay_xms(500);是直接调用   delay_us(),是不会引发任务调度的。
回复

使用道具 举报

  离线 

32

主题

289

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1771
金钱
1771
注册时间
2016-8-10
在线时间
387 小时
发表于 2018-1-19 11:40:12 | 显示全部楼层
相信我是启动文件的问题  
我f1也是这样的 ,就只是换了一个启动文件,然后时间延时就不对了  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




关闭

"原子哥”推荐上一条 /1 下一条

QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-7-22 22:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */