找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求助STM32程序在proteus跑的不正常

[复制链接]
ID:163020 发表于 2022-8-5 20:09 | 显示全部楼层 |阅读模式
50黑币
在核心板正常,在proteus仿真就用不了,proteus时钟8MHz,72MHz都不行

int main(void){
        Delay_Init();
        LED_Init_GPIOC();
       
        while(1){
                LED_Flicker();
        }
}

void LED_Flicker(void){
        Delay_ms(1000);                 
        LED_GPIO_High();
        Delay_ms(1000);       
        LED_GPIO_Low();
}

static u8 fac_us = 0;
static u16 fac_ms = 0;

void Delay_Init()
{
        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//在misc.c中,选择外部时钟源 HCLK/8
        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;                                               //清空计数器                      
}



回复

使用道具 举报

ID:165291 发表于 2022-12-3 22:01 | 显示全部楼层
我也遇到这种情况,不知道怎么回事!
回复

使用道具 举报

ID:282074 发表于 2022-12-23 12:32 | 显示全部楼层
proteus仿真软件不行,直接用硬件
回复

使用道具 举报

ID:740423 发表于 2023-1-2 21:25 | 显示全部楼层
因为核心板有一个低速晶振,systick计时采用的是独立的低速晶振,核心板上是有这个晶振的,所以你用起来正常,而仿真的时候是没有的,这个systick以及delay是完全不起作用的,修改的办法就是将systick计时换为--t计时,在抄代码的时候尽可能不要采用正点原子的代码,如果你不懂的话
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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