system文件夹中的delay_ms函数不能正常工作的问题

2019-07-20 23:11发布

#include "stm32f10x.h"

#include "delay.h"

void Delay(u32 count)
{
u32 i=0;
for(;i<count;i++);
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
       
        delay_init();
       
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|
RCC_APB2Periph_GPIOA, ENABLE); //使能 PB,PE 端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PB.5 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO 口速度为 50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化 GPIOB.5
GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1-->PE.5 端口配置, 推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure); //推挽输出 , IO 口速度为 50MHz
GPIO_SetBits(GPIOA,GPIO_Pin_5); //PE.5 输出高
while(1)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
GPIO_SetBits(GPIOA,GPIO_Pin_5);
//Delay(2000000);
        delay_ms(300);
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOA,GPIO_Pin_5);
Delay(3000000);
        //delay_ms(600);
}
}
----------------------------------下面是问题----------------------------------
这个程序编译没有错误和警告,但是在使用proteus进行功能验证时候,使用delay(3000000)就可以正常闪烁,而使用delay_ms(300)就不正常闪烁,观察了
引脚的输出波形,当使用delay_ms(300)时候基本上输出的周期为us级别,感觉完全不正常啊,请哪位大神指点一二啊~~~

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
majunren
1楼-- · 2019-07-20 23:35
proteus电路和经过delay(3000000)函数验证过,应该没有问题,时钟频率设置的是72MHz,使用的是stm32f103c6芯片
正点原子
2楼-- · 2019-07-21 00:54
 精彩回答 2  元偷偷看……
csmjmcc
3楼-- · 2019-07-21 06:02
 精彩回答 2  元偷偷看……
majunren
4楼-- · 2019-07-21 10:39
csmjmcc 发表于 2019-7-5 08:16
delay_ms()是外部函数吧?有没有包含进来?编译会有警告的,你可以完全编译一次,看看在调用delay_ms()处是 ...

没有警告,编译完全正常,我观察了systimer,如图所示,SYSTIMER在时间上ENABLED之后,几乎立刻就被DISENABLED了。
majunren
5楼-- · 2019-07-21 15:31
csmjmcc 发表于 2019-7-5 08:16
delay_ms()是外部函数吧?有没有包含进来?编译会有警告的,你可以完全编译一次,看看在调用delay_ms()处是 ...

delay()是“正点原子”system文件夹提供的函数

一周热门 更多>