标题: 基于stm32f103r6 SysTick定时器的1秒钟源程序 [打印本页]

作者: bugui    时间: 2020-4-6 14:20
标题: 基于stm32f103r6 SysTick定时器的1秒钟源程序
#include "delay.h"
#include "sys.h"
static u8  fac_us=0;        
static u16 fac_ms=0;               
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->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;
}

SysTick定时器的1秒钟设计与实现.7z

179.98 KB, 下载次数: 29, 下载积分: 黑币 -5


作者: 学单片机的小铭    时间: 2020-5-7 18:47
请问一下,为什么程序没有错,用proteus却仿真不了systick延时呢,
led1=0;//点亮led1
delay_ms(1000);
led2=0;//点亮led2

中间仿真完全看不到延时,两个灯就都亮了
请问这是怎么回事啊?
作者: 学单片机的小铭    时间: 2020-5-7 18:49
还有就是,如果用我自己写的延时的话就可以用,但是延时时间不精确,唯独使用systick延时程序就没用。难受啊
作者: 夜空之巅    时间: 2021-4-3 17:38
学单片机的小铭 发表于 2020-5-7 18:47
请问一下,为什么程序没有错,用proteus却仿真不了systick延时呢,
led1=0;//点亮led1
delay_ms(1000);
...

你解决了吗,我也是没法仿真,led常亮,但是端口处会有红蓝光标闪烁表示电平变化




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1