找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3404|回复: 3
收起左侧

基于stm32f103r6 SysTick定时器的1秒钟源程序

[复制链接]
ID:453761 发表于 2020-4-6 14:20 | 显示全部楼层 |阅读模式
#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

回复

使用道具 举报

ID:737501 发表于 2020-5-7 18:47 | 显示全部楼层
请问一下,为什么程序没有错,用proteus却仿真不了systick延时呢,
led1=0;//点亮led1
delay_ms(1000);
led2=0;//点亮led2

中间仿真完全看不到延时,两个灯就都亮了
请问这是怎么回事啊?
回复

使用道具 举报

ID:737501 发表于 2020-5-7 18:49 | 显示全部楼层
还有就是,如果用我自己写的延时的话就可以用,但是延时时间不精确,唯独使用systick延时程序就没用。难受啊
回复

使用道具 举报

ID:256945 发表于 2021-4-3 17:38 | 显示全部楼层
学单片机的小铭 发表于 2020-5-7 18:47
请问一下,为什么程序没有错,用proteus却仿真不了systick延时呢,
led1=0;//点亮led1
delay_ms(1000);
...

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

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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