找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1305|回复: 11
收起左侧

关于STM32单片机点灯程序 关灯延时一段时间开灯延时一段时间

[复制链接]
ID:978416 发表于 2022-12-17 13:23 | 显示全部楼层 |阅读模式
#include "stm32f10x.h"
        
void Delay(uint32_t count)
{
    unsigned int i ;
    for(;count!=0; count--)
    {
        i=500;
        while(i--);
    }
}

int main(void)
{        
     GPIO_InitTypeDef GPIO_InitStruct;    //定义CPIO初始化类型定义
        
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);  //使能GPIOA的时钟
        
         GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;           //填入LED连接的引脚
         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;         //设置该引脚的模式为推挽输出
         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;  //设置引脚的输出速度
            
         GPIO_Init(GPIOC,&GPIO_InitStruct);    //使用GPIO初始化函数 初始化 所需要用的引脚
         while(1)
         {
                GPIO_ResetBits(GPIOC,GPIO_Pin_13);  //给PA8低电平使小灯亮起来
                Delay(4000);        
               
                GPIO_SetBits(GPIOC,GPIO_Pin_13);  //给PA8高电平使小灯灭
                Delay(4000);
         }
}
这段程序现在小灯可以正常闪烁,但是我把开小灯后的Delay(4000);改成三组,关小灯后延时也加成三组就不闪烁了,就长亮了是怎么回事啊。我想要的效果是关灯延时一段时间开灯延时一段时间。

回复

使用道具 举报

ID:883242 发表于 2022-12-17 14:18 | 显示全部楼层
这明显是被Keil C51给坑了,这个编译器的作者认为他的用户都是制杖。

MDK的编译器是RealView做的,正常的c语言,需要volatile这个关键字。
回复

使用道具 举报

ID:401564 发表于 2022-12-18 17:28 | 显示全部楼层
我想要的效果是关灯延时一段时间开灯延时一段时间。
代码呢?
回复

使用道具 举报

ID:978416 发表于 2022-12-18 19:53 | 显示全部楼层
Hephaestus 发表于 2022-12-17 14:18
这明显是被Keil C51给坑了,这个编译器的作者认为他的用户都是制杖。

MDK的编译器是RealView做的,正常 ...

你好,可以具体的说一下这么函数怎么用吗谢谢
回复

使用道具 举报

ID:978416 发表于 2022-12-19 08:41 | 显示全部楼层
Y_G_G 发表于 2022-12-18 17:28
我想要的效果是关灯延时一段时间开灯延时一段时间。
代码呢?

#include "stm32f10x.h"
      
void Delay(uint32_t count)
{
    unsigned int i ;
    for(;count!=0; count--)
    {
        i=500;
        while(i--);
    }
}

int main(void)
{      
     GPIO_InitTypeDef GPIO_InitStruct;    //定义CPIO初始化类型定义
      
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);  //使能GPIOA的时钟
      
         GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;           //填入LED连接的引脚
         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;         //设置该引脚的模式为推挽输出
         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;  //设置引脚的输出速度
            
         GPIO_Init(GPIOC,&GPIO_InitStruct);    //使用GPIO初始化函数 初始化 所需要用的引脚
         while(1)
         {
                GPIO_ResetBits(GPIOC,GPIO_Pin_13);  //给PA8低电平使小灯亮起来
                Delay(4000);      
               
                GPIO_SetBits(GPIOC,GPIO_Pin_13);  //给PA8高电平使小灯灭
                Delay(4000);
         }
}
就是这段
回复

使用道具 举报

ID:77589 发表于 2022-12-19 10:54 | 显示全部楼层
egsresrhtrhrtst 发表于 2022-12-19 08:41
#include "stm32f10x.h"
      
void Delay(uint32_t count)

别人要看的是你修改后的程序,也就是你所谓的“三组”,还发这个出来,能看个P出来啊!想帮也帮不了!!!
回复

使用道具 举报

ID:401564 发表于 2022-12-19 13:37 | 显示全部楼层
egsresrhtrhrtst 发表于 2022-12-19 08:41
#include "stm32f10x.h"
      
void Delay(uint32_t count)

这段是正常的呀,灯可以闪灯呀,我要的是你说不行的那一段
回复

使用道具 举报

ID:978416 发表于 2022-12-19 14:49 | 显示全部楼层
Longan.Wang 发表于 2022-12-19 10:54
别人要看的是你修改后的程序,也就是你所谓的“三组”,还发这个出来,能看个P出来啊!想帮也帮不了!! ...

GPIO_ResetBits(GPIOC,GPIO_Pin_13);  //给PA8低电平使小灯亮起来
                Delay(4000);      
               Delay(4000);
               Delay(4000);
                GPIO_SetBits(GPIOC,GPIO_Pin_13);  //给PA8高电平使小灯灭
                Delay(4000);
                Delay(4000);
               Delay(4000);
就是这样啊,谢谢大家
回复

使用道具 举报

ID:978416 发表于 2022-12-19 20:59 | 显示全部楼层
Y_G_G 发表于 2022-12-19 13:37
这段是正常的呀,灯可以闪灯呀,我要的是你说不行的那一段

#include "stm32f10x.h"

void delay_ms(volatile u16 time)
{   
   volatile u16 i=0;  
   while(time--)
   {
      i=12000;  //自己定义改成65000?看效果
      while(i--) ;   
   }
}


int main(void)
{
                GPIO_InitTypeDef GPIO_InitStruct;    //定义CPIO初始化类型定义
         
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);  //使能GPIOA的时钟
       
                GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;           //填入LED连接的引脚
                GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;         //设置该引脚的模式为推挽输出
                GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;  //设置引脚的输出速度
            
                GPIO_Init(GPIOC,&GPIO_InitStruct);    //使用GPIO初始化函数 初始化 所需要用的引脚
       
                while(1)
                {
                        GPIO_ResetBits(GPIOC,GPIO_Pin_13);  //给PA8低电平使小灯亮起来
                        delay_ms(100);

                        GPIO_SetBits(GPIOC,GPIO_Pin_13);  //给PA8高电平使小灯灭
                        delay_ms(100);
               
                }
}
你好,就按这段程序来说,现在延时里都是100,肉眼可见闪烁,但是都改成200以后就看着是长亮了,不知道是怎么回事
回复

使用道具 举报

ID:401564 发表于 2022-12-19 22:31 | 显示全部楼层
egsresrhtrhrtst 发表于 2022-12-19 14:49
GPIO_ResetBits(GPIOC,GPIO_Pin_13);  //给PA8低电平使小灯亮起来
                Delay(4000);       ...

工程模板 - 副本.7z (207.93 KB, 下载次数: 8)
回复

使用道具 举报

ID:978416 发表于 2022-12-20 08:36 | 显示全部楼层
Y_G_G 发表于 2022-12-19 22:31
这不是一样的在闪灯吗?就是闪灯慢了而已,延时增加了呀

你好,我现在好像知道是什么原因了,我这块是f103c8t6的,我换了另外一块stm32f103c6t6的就正常了,是不是因为是有问题的芯片啊?
回复

使用道具 举报

ID:978416 发表于 2022-12-20 08:37 | 显示全部楼层
Y_G_G 发表于 2022-12-19 22:31
这不是一样的在闪灯吗?就是闪灯慢了而已,延时增加了呀

http://www.51hei.com/bbs/dpj-225934-1.html
麻烦再看一下我这个的描述,谢谢了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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