打印

GD32滴答时钟的讨论

[复制链接]
966|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhangbo1985|  楼主 | 2015-7-25 10:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  这个还是借用STM32的滴答时钟应用跟大家进行讨论的吧,为了比较精确的计时,我在程序中采用了该时钟延时的,具体的代码如下边所贴出来的所示,感觉也没啥问题的啊。。
沙发
zhangbo1985|  楼主 | 2015-7-25 10:15 | 只看该作者
这个是初始化的,
void delay_init(void)
{
SysTick->CTRL&=0xfffffffb;// SysTikCLK =HCLK/8 =9MHz
fac_us=8;      
fac_ms=(u16)fac_us*1000;
}  
基本没啥的,,

使用特权

评论回复
板凳
zhangbo1985|  楼主 | 2015-7-25 10:16 | 只看该作者
这个是us计时延时的
void delay_us(u32 Nus)    //delay N us
{  
u32 temp0;      
SysTick->LOAD=Nus*fac_us; //×°ÔØÊý¾Ý   
SysTick->VAL=0x00;        //Çå¿Õ¼ÆÊýÆ÷
SysTick->CTRL=0x01 ;      //¿ªÆô¼Æʱ  
do
{
  temp0=SysTick->CTRL;
}
while(temp0&0x01&&!(temp0&(1<<16)));//µÈ´ý¼Æʱµ½´ï
SysTick->CTRL=0x00;       //¹Ø±Õ¼Æʱ
SysTick->VAL =0X00;       //Çå¿Õ¼ÆÊýÆ÷   
}      

使用特权

评论回复
地板
zhangbo1985|  楼主 | 2015-7-25 10:16 | 只看该作者
这个是ms延时的
void delay_ms(u16 nms)    //delay n ms  ---Õë¶Ô72MHzÏ£¬Nms<=1864
{         
u32 temp0;     
SysTick->LOAD=(u32)nms*fac_ms;//×°ÔØÊý¾Ý
SysTick->VAL =0x00;           //Çå¿Õ¼ÆÊýÆ÷
SysTick->CTRL=0x01 ;          //¿ªÆô¼Æʱ  
do
{
  temp0=SysTick->CTRL;
}
while(temp0&0x01&&!(temp0&(1<<16)));//µÈ´ýʱ¼äµ½´ï  
SysTick->CTRL=0x00;       //¹Ø±Õ¼ÆʱÆ÷
SysTick->VAL =0X00;       //Çå¿Õ¼ÆÊýÆ÷      
}   

使用特权

评论回复
5
zhangbo1985|  楼主 | 2015-7-25 10:17 | 只看该作者
在程序中调用这两个子程序后,问题来了,,我的线路板运行一段时间后,往往会卡在上边的do...while循环中出不来的。。

使用特权

评论回复
6
zhangbo1985|  楼主 | 2015-7-25 10:19 | 只看该作者
我程序中还用了其他的一些中断的,如DMA、ADC、UART的,这个跟这基本不冲突的,在用这个的就关掉这些中断了,没地方影响的。。

使用特权

评论回复
7
zhangbo1985|  楼主 | 2015-7-25 10:21 | 只看该作者
但是唯一的可能就是我的timer2的时钟计时器的,但是也整不明白是怎样影响的?或者跟这个没关系的,,总之是没头绪了,,看看哪位大侠的帮着解决下的啊,先谢谢了。。

使用特权

评论回复
8
北方小榕树| | 2015-7-26 08:25 | 只看该作者
直接用库,滴答定时器用不着这么复杂的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

1886

帖子

2

粉丝