OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3167|回复: 11

看看代码有毛病吗

[复制链接]

4

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2017-3-9
在线时间
10 小时
发表于 2017-3-11 19:52:35 | 显示全部楼层 |阅读模式
1金钱
这是主函数
# include "led.h"
void delay(int i)
{
        while(i--);
}
int main (void)
{
        LED_Init();
       
          
                 while(1)
                 {
                 
                                GPIO_ResetBits(GPIOC,GPIO_Pin_All);
                                delay(60000);
                                GPIO_SetBits(GPIOC,GPIO_Pin_All);
                 }
                 
}
# include "led.h"
# include "stm32f10x_gpio.h"
void LED_Init()
{
        GPIO_InitTypeDef  GPIO_InitStructure;
        SystemInit ();
        GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Pin =GPIO_Pin_All;
        GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE );
        GPIO_Init(GPIOC,&GPIO_InitStructure);
}
想写一个led灯闪烁的程序 但是程序下载进去之后led灯只闪烁了六次之后不闪了是什么原因


最佳答案

查看完整内容[请看2#楼]

GPIO_ResetBits(GPIOC,GPIO_Pin_All); delay(60000); GPIO_SetBits(GPIOC,GPIO_Pin_All); 改为: GPIO_ResetBits(GPIOC,GPIO_Pin_All); delay(60000); GPIO_SetBits(GPIOC,GPIO_Pin_All); ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-3-11 19:52:36 | 显示全部楼层
                                GPIO_ResetBits(GPIOC,GPIO_Pin_All);
                                delay(60000);
                                GPIO_SetBits(GPIOC,GPIO_Pin_All);
改为:
                                GPIO_ResetBits(GPIOC,GPIO_Pin_All);
                                delay(60000);
                                GPIO_SetBits(GPIOC,GPIO_Pin_All);
                                delay(60000);
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
618
金钱
618
注册时间
2015-11-20
在线时间
89 小时
发表于 2017-3-12 13:43:25 | 显示全部楼层
仿真看下卡哪了
回复

使用道具 举报

37

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2016-6-10
在线时间
191 小时
发表于 2017-3-12 16:53:54 | 显示全部楼层
用 unsigned int i
回复

使用道具 举报

0

主题

4

帖子

0

精华

高级会员

Rank: 4

积分
501
金钱
501
注册时间
2016-4-10
在线时间
54 小时
发表于 2017-3-12 18:28:30 | 显示全部楼层
GPIO_ResetBits(GPIOC,GPIO_Pin_All);
   delay(60000);
GPIO_SetBits(GPIOC,GPIO_Pin_All)

你程序走到GPIO_SetBits的之后 由于放在while循环里面  程序立马就会跑到GPIO_ResetBits将所有的引脚拉低  时间太短肉眼无法观察到,在GPIO_SetBits后面再加个延时函数就行了
回复

使用道具 举报

4

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2017-3-9
在线时间
10 小时
 楼主| 发表于 2017-3-17 08:31:36 | 显示全部楼层
寂寞小奥特曼 发表于 2017-3-12 18:28
GPIO_ResetBits(GPIOC,GPIO_Pin_All);
   delay(60000);
GPIO_SetBits(GPIOC,GPIO_Pin_All)

还是不行 还是只闪烁了六次就不闪了
回复

使用道具 举报

1

主题

32

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2940
金钱
2940
注册时间
2017-3-6
在线时间
399 小时
发表于 2017-3-17 08:41:38 | 显示全部楼层
你在SETBIT后面再加个延时啊
回复

使用道具 举报

4

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2017-3-9
在线时间
10 小时
 楼主| 发表于 2017-3-17 08:42:51 | 显示全部楼层
773208906 发表于 2017-3-17 08:41
你在SETBIT后面再加个延时啊

加了 还是只闪了六次
回复

使用道具 举报

4

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2017-3-9
在线时间
10 小时
 楼主| 发表于 2017-3-17 08:43:16 | 显示全部楼层
773208906 发表于 2017-3-17 08:41
你在SETBIT后面再加个延时啊

不管用
回复

使用道具 举报

1

主题

32

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2940
金钱
2940
注册时间
2017-3-6
在线时间
399 小时
发表于 2017-3-18 09:09:51 | 显示全部楼层
你这个初始化那个灯对应的IO脚到底是PC多少,直接初始化那个io脚就行,不要把所有IO脚都初始化,这样调试接口也会被你用了
回复

使用道具 举报

4

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2017-3-9
在线时间
10 小时
 楼主| 发表于 2017-3-18 14:14:29 | 显示全部楼层
773208906 发表于 2017-3-18 09:09
你这个初始化那个灯对应的IO脚到底是PC多少,直接初始化那个io脚就行,不要把所有IO脚都初始化,这样调试接 ...

我用的是所有的灯
回复

使用道具 举报

4

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2017-3-9
在线时间
10 小时
 楼主| 发表于 2017-3-18 14:15:36 | 显示全部楼层

     6:         LED_Init();
0x08000590 F7FFFF0A  BL.W     LED_Init (0x080003A8)
     7:         while(1)
     8:         {
0x08000594 E011      B        0x080005BA
     9:                 GPIO_ResetBits(GPIOC,GPIO_Pin_All);
0x08000596 F64F71FF  MOVW     r1,#0xFFFF
0x0800059A 4808      LDR      r0,[pc,#32]  ; @0x080005BC
0x0800059C F7FFFEFD  BL.W     GPIO_ResetBits (0x0800039A)
    10:                 delay_us(1000);
0x080005A0 F44F707A  MOV      r0,#0x3E8
0x080005A4 F7FFFFD4  BL.W     delay_us (0x08000550)
    11:                 GPIO_SetBits(GPIOC,GPIO_Pin_All);
0x080005A8 F64F71FF  MOVW     r1,#0xFFFF
0x080005AC 4803      LDR      r0,[pc,#12]  ; @0x080005BC
0x080005AE F7FFFEF6  BL.W     GPIO_SetBits (0x0800039E)
    12:                 delay_us(1000);
0x080005B2 F44F707A  MOV      r0,#0x3E8
0x080005B6 F7FFFFCB  BL.W     delay_us (0x08000550)
     7:         while(1)
0x080005BA E7EC      B        0x08000596
0x080005BC 1000      DCW      0x1000
0x080005BE 4001      DCW      0x4001
0x080005C0 05E0      DCW      0x05E0
0x080005C2 0800      DCW      0x0800
0x080005C4 0000      DCW      0x0000
0x080005C6 2000      DCW      0x2000
0x080005C8 0004      DCW      0x0004
0x080005CA 0000      DCW      0x0000
0x080005CC 016C      DCW      0x016C
0x080005CE 0800      DCW      0x0800
0x080005D0 05E4      DCW      0x05E4
0x080005D2 0800      DCW      0x0800
0x080005D4 0004      DCW      0x0004
0x080005D6 2000      DCW      0x2000
0x080005D8 0664      DCW      0x0664
0x080005DA 0000      DCW      0x0000
0x080005DC 0188      DCW      0x0188
0x080005DE 0800      DCW      0x0800
0x080005E0 0000      MOVS     r0,r0
0x080005E2 0000      MOVS     r0,r0
0x080005E4 0000      MOVS     r0,r0
0x080005E6 0000      MOVS     r0,r0
0x080005E8 0000      MOVS     r0,r0
0x080005EA 0000      MOVS     r0,r0
0x080005EC 0000      MOVS     r0,r0
0x080005EE 0000      MOVS     r0,r0
0x080005F0 0000      MOVS     r0,r0
0x080005F2 0000      MOVS     r0,r0
0x080005F4 0000      MOVS     r0,r0
这是主函数的汇编代码 为什么最后全都是一样的
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-23 06:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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