野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13060|回复: 9

发现一个问题,请原谅我小白不理解,谁来指教一下我

[复制链接]
发表于 2016-11-14 10:21:33 | 显示全部楼层 |阅读模式
file:///C:\Users\xiaonan\AppData\Roaming\Tencent\Users\1247758434\QQ\WinTemp\RichOle\J7@TMTF1L{TYXDUAU%DT~MP.pngfile:///C:\Users\xiaonan\AppData\Roaming\Tencent\Users\1247758434\QQ\WinTemp\RichOle\J7@TMTF1L{TYXDUAU%DT~MP.png QQ图片20161114101555.png
#include "stm32f10x.h"   
//#include "bsp_KEY.h"
#include "bsp_LED.h"
//extern uint8_t Trg;
int main(void)
{

        // 来到这里的时候,系统的时钟已经被配置成72M。

        //KEY_GPIO_Config();
        while(1)
        {
        //KeyRead( );
                  LED_GPIO_Config();
                          
                  //LED_RED_1_TOGGLE;
                        GPIO_SetBits(LED_RED_GPIO_PORT, LED_RED_GPIO_PIN);
                       
                       
        }
               
        }


GPIO口初始化函数不放进循环体,就无法点亮LED, 放进去复位就能持续点亮。
而且我发现,如果不加循环体 ,只在main函数中写  LED_GPIO_Config();GPIO_SetBits(LED_RED_GPIO_PORT, LED_RED_GPIO_PIN);这两条语句也无法点亮LED,无仿真器,用keil软件在线调试,监控RCC和ODR和CRH寄存器都正确。(使用GPIO_Pin_11高电平点亮LED)



初始化函数main进入后,执行一次不就ok了么。新手不理解。有好心人帮解释下可以吗。

回复

使用道具 举报

发表于 2016-11-14 10:41:34 | 显示全部楼层
因为LED是低电平点亮,你在while循环里把  GPIO_SetBits改成  GPIO_ResetBits就可以了。
LED_GPIO_Config放进循环体可以亮是因为刚初始化的时候,默认会点亮一下,不断循环,人眼看不出灯有灭过,所以就看起来一直亮了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-14 10:47:57 | 显示全部楼层
板子上LED阴极接地,阳极接GPIO
2016-11-14_104451.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-14 10:49:28 | 显示全部楼层
flyleaf 发表于 2016-11-14 10:41
因为LED是低电平点亮,你在while循环里把  GPIO_SetBits改成  GPIO_ResetBits就可以了。
LED_GPIO_Config ...

我整了扩展板,LED高电平点亮,
回复 支持 反对

使用道具 举报

发表于 2016-11-14 10:58:59 | 显示全部楼层
wongxiaonan 发表于 2016-11-14 10:49
我整了扩展板,LED高电平点亮,

擦,我看起来这么完美的理论解释竟然是错的
回复 支持 反对

使用道具 举报

发表于 2016-11-14 14:04:17 | 显示全部楼层
wongxiaonan 发表于 2016-11-14 10:47
板子上LED阴极接地,阳极接GPIO

程序是这样写,没有错,检查下硬件,看看供电这些是否正常。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-14 15:45:12 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2016-11-14 15:45:51 | 显示全部楼层
fire 发表于 2016-11-14 14:04
程序是这样写,没有错,检查下硬件,看看供电这些是否正常。

回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-14 15:54:10 | 显示全部楼层
flyleaf 发表于 2016-11-14 10:58
擦,我看起来这么完美的理论解释竟然是错的

      
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-15 01:13:01 | 显示全部楼层
fire 发表于 2016-11-14 14:04
程序是这样写,没有错,检查下硬件,看看供电这些是否正常。

火哥,我找到了错误了,犯了低级错误,先配置了GPIOB口工作模式,后开GPIOB时钟,导致初始化函数加while大循环后,先GPIOB配置工作模式,时钟使能后循环回来再次执行初始化函数后,GPIOB工作模式才在之后正确配置。
现在感觉,这就好比做了一件先擦屁股后上厕所,出来还纳闷为啥屁股...
我真的是小白,好丢。。。

one more thing,第一次离火哥这么近,其实我的内心是无比激动的。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-13 13:59 , Processed in 0.045960 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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