weixin_54170410 2021-08-09 13:34 采纳率: 0%
浏览 569

stm32的delay函数失效

delay函数失效。
按理说这个代码应该2s一个周期使p13针脚高低变换,但我用proteus8.9进行仿真他的周期只有20us,而且无论怎么更改delay的参数周期都是20us。

img

img

代码如下
startup_stm32f10x_md.s

//主函数
#include "stm32f10x.h"                  // Device header

#include "LED.h"

#include "Delay.h"

int main(void)
{
    LED_Init();
    delay_Init();
    while(1)
    {
        LED_Low();
        delay_ms(1000);
        //if(i==100000)
        //{
            LED_High();
            delay_ms(1000);
    //    }
        
    }
}
//delay函数的头文件
#ifndef _DELAY_H
#define _DELAY_H
#include "stm32f10x.h"                  // Device header

void delay_Init(void);
void delay_ms(u16 nms);
extern u32 i;
#endif
/*delay函数*/
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
u32 i=0;
void delay_Init()
{
    ((SysTick_Type*)(0xE000E010))->CTRL &=~(1<<2);
    //i=1;
}

void delay_ms(u16 nms)
{
    u32 temp;
    ((SysTick_Type*)(0xE000E010))->LOAD = (u32)nms*9000;
    ((SysTick_Type*)(0xE000E010))->VAL = 0x00;
    ((SysTick_Type*)(0xE000E010))->CTRL |= 0x01;
    do
    {
        temp = ((SysTick_Type*)(0xE000E010))->CTRL;
    }while((temp&0x01)&&!(temp&(1<<16)));
    
    ((SysTick_Type*)(0xE000E010))->CTRL &=~(1<<0);
    ((SysTick_Type*)(0xE000E010))->VAL = 0x00;
}
//led头文件
#ifndef _LED_H

#define _LED_H


#define GPIO_Pin_Preset                 GPIO_Pin_13
#define GPIO_Preset                                            GPIOC
#define    RCC_APB2Periph_GPIO_Preset            RCC_APB2Periph_GPIOC

void LED_Init(void);
void LED_High(void);
void LED_Low(void);

#endif
//led函数
#include "LED.h"
#include "stm32f10x.h"                  // Device header


void LED_Init(void)
{
    GPIO_InitTypeDef    GPIO_InitStruct;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_Preset, ENABLE);
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_Preset;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIO_Preset,&GPIO_InitStruct);
    
}
void LED_High(void)
{
    GPIO_SetBits( GPIO_Preset, GPIO_Pin_Preset);
}
void LED_Low(void)
{
    GPIO_ResetBits( GPIO_Preset, GPIO_Pin_Preset);
}
  • 写回答

1条回答 默认 最新

  • dceacho 2021-08-09 14:34
    关注

    }while((temp&0x01)&&!(temp&(1<<16)));
    逻辑判断这里也许有问题

    评论

报告相同问题?

问题事件

  • 创建了问题 8月9日

悬赏问题

  • ¥50 windows的SFTP服务器如何能批量同步用户信息?
  • ¥15 centos7.9升级python3.0的问题
  • ¥15 如何解决调试dev-出++5.11不成功问题
  • ¥15 安装CentOS6时卡住
  • ¥20 关于#监控系统#的问题,如何解决?(相关搜索:系统软件)
  • ¥20 c语言写的8051单片机存储器mt29的模块程序
  • ¥60 求直线方程 使平面上n个点在直线同侧并且距离总和最小
  • ¥50 java算法,给定试题的难度数量(简单,普通,困难),和试题类型数量(单选,多选,判断),以及题库中各种类型的题有多少道,求能否随机抽题。
  • ¥50 rk3588板端推理
  • ¥250 opencv怎么去掉 数字0中间的斜杠。