OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2461|回复: 8

systick 延时函数 移植于原子哥 无法延时

[复制链接]

20

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
323
金钱
323
注册时间
2018-1-23
在线时间
40 小时
发表于 2018-10-13 23:50:22 | 显示全部楼层 |阅读模式
1金钱
哪位大神帮我看看哪里有不妥之处,之前直接按着这个思路写了一个,不行,然后直接移植原子哥的还是不行,我觉得
可能是时钟设置上的问题,但是我又找不到具体原因

u8 fac_us;
u8 fac_ms;


void delay_init()
{
       
        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
        fac_us=SystemCoreClock/8000000;
        fac_ms=(u16)fac_us*1000;       
       
}

void delay_us(u32 nus)
{               
        u32 temp;                     
        SysTick->LOAD=nus*fac_us;                                         //????                           
        SysTick->VAL=0x00;                                                //?????
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;        //????          
        do
        {
                temp=SysTick->CTRL;
        }while((temp&0x01)&&!(temp&(1<<16)));                //??????   
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;        //?????
        SysTick->VAL =0X00;                                               //?????         
}

void delay_ms(u16 nms)
{                                     
        u32 temp;                  
        SysTick->LOAD=(u32)nms*fac_ms;                                //????(SysTick->LOAD?24bit)
        SysTick->VAL =0x00;                                                        //?????
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;        //????  
        do
        {
                temp=SysTick->CTRL;
        }while((temp&0x01)&&!(temp&(1<<16)));                //??????   
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;        //?????
        SysTick->VAL =0X00;                                               //?????                      
}


最佳答案

查看完整内容[请看2#楼]

不知道你想干什么? 原子的例程是有缺陷的,看我的代码 https://github.com/ShuifaHe/STM32/blob/delay/delay.c
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4523
金钱
4523
注册时间
2018-5-11
在线时间
947 小时
发表于 2018-10-13 23:50:23 | 显示全部楼层
不知道你想干什么?
原子的例程是有缺陷的,看我的代码
https://github.com/ShuifaHe/STM32/blob/delay/delay.c
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-10-14 01:51:44 | 显示全部楼层
仿真看看,看看寄存器的变化
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-10-14 01:51:54 | 显示全部楼层
我们例程,你直接下载就可以验证
回复

使用道具 举报

20

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
323
金钱
323
注册时间
2018-1-23
在线时间
40 小时
 楼主| 发表于 2018-10-14 07:31:37 | 显示全部楼层
正点原子 发表于 2018-10-14 01:51
我们例程,你直接下载就可以验证

恩恩是的,但是我想通过这样的方法学习一下systick
回复

使用道具 举报

20

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
323
金钱
323
注册时间
2018-1-23
在线时间
40 小时
 楼主| 发表于 2018-10-14 23:00:18 | 显示全部楼层
正点原子 发表于 2018-10-14 01:51
仿真看看,看看寄存器的变化

我刚才试了一下,问题出现在fac_ms ,前面算出来fac_us是9, 但是我给它乘以1000,仿真显示fac_ms 为40'(',这是为什么?以前没有遇到过这样的情况
回复

使用道具 举报

20

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
323
金钱
323
注册时间
2018-1-23
在线时间
40 小时
 楼主| 发表于 2018-10-14 23:01:08 | 显示全部楼层
warship 发表于 2018-10-14 10:24
不知道你想干什么?
原子的例程是有缺陷的,看我的代码
https://github.com/ShuifaHe/STM32/blob/delay/ ...

好的,谢谢
回复

使用道具 举报

45

主题

104

帖子

0

精华

高级会员

Rank: 4

积分
580
金钱
580
注册时间
2016-6-16
在线时间
101 小时
发表于 2018-10-15 16:54:23 | 显示全部楼层
DAVIDl 发表于 2018-10-14 23:00
我刚才试了一下,问题出现在fac_ms ,前面算出来fac_us是9, 但是我给它乘以1000,仿真显示fac_ms 为40'( ...

数值超范围了,用short或者int
回复

使用道具 举报

20

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
323
金钱
323
注册时间
2018-1-23
在线时间
40 小时
 楼主| 发表于 2018-10-16 13:32:02 | 显示全部楼层
当时的 发表于 2018-10-15 16:54
数值超范围了,用short或者int

好的我试试,非常感谢!
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 22:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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