OpenEdv-开源电子网

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

delay函数不明白求助

[复制链接]

47

主题

255

帖子

1

精华

高级会员

Rank: 4

积分
641
金钱
641
注册时间
2012-11-3
在线时间
6 小时
发表于 2015-1-20 10:07:58 | 显示全部楼层 |阅读模式
5金钱
首先一下函数肯定是能用的,就是有几点想不通。在相关手册上找不到答案。

问题1:

void delay_us(u32 nus)
{
        u32 temp;      
        SysTick->LOAD=nus*fac_us; //时间加载

当执行下面这句话的时候:写它则使之清零,同时会清除在SysTick 控制及状态寄存器中的COUNTFLAG标志
                                          无论COUNTFLAG是0还是1,执行下面这句话就会清空COUNTFLAG位。
        SysTick->VAL=0x00;        //清空计数器
当执行下面这句话的时候:开启计数器,当计数器已经开启了,那么这时SysTick->VAL寄存器是已经重装值了还是没有重新装值
                                          我的意思是计数器开启之前
SysTick->VAL就重装值了还是计数器开启之后SysTick->VAL才重装值。
                                          假如是计数器开启之后才重新给SysTick->VAL重装值
,会不会产生这么一种现象:(1)计数器开启了
                                          (2)此时SysTick->VAL为0,那么COUNTFLAG置1   (3)就会执行一遍do...while()
                                         以上这种现象就是还没等到
SysTick->VAL重装值,片子就已经判断SysTick->VAL为0,就会COUNTFLAG置1
        SysTick->CTRL=0x01;      //开始倒数  
        do
        {
        temp=SysTick->CTRL;
        }
        while((temp&0x01)&&!(temp&(1<<16)));//等待时间到达   
        SysTick->CTRL=0x00;       //关闭计数器
        SysTick->VAL =0X00;       //清空计数器  
}

问题2:
COUNTFLAG: 如果在上次读取本寄存器后,SysTick已经数到了0,则该位为1。如果读取该位,该位将自动清零

关于这一位我有疑问,假如说始终不读“本寄存器”,当SysTick数到了0,COUNTFLAG会不会置位。

假如说会置位,那么我实在想不通问题1。


还有在设置systick时钟源的时候:
你需要检视芯片的器件手册来决定选择什么作为时钟源。可是我在stm参考手册毛都找不见。 


最佳答案

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

找到了,在cm3技术参考手册找到的。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

47

主题

255

帖子

1

精华

高级会员

Rank: 4

积分
641
金钱
641
注册时间
2012-11-3
在线时间
6 小时
 楼主| 发表于 2015-1-20 10:07:59 | 显示全部楼层
找到了,在cm3技术参考手册找到的。

回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-8 18:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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