你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

为什么GPIO_ResetBits 不起作用?

[复制链接]
暗爪侠 提问时间:2016-8-24 22:42 /
本人新手,板子是f0discovery,带芯片F051,目前挑战闪烁灯,但是不知道何故,灯一直亮,完全不闪,源程序如下:
#include "stm32f0xx.h"
#include "stm32f0xx_rcc.h"
#include "stm32f0xx_flash.h"
#include "stm32f0xx_cec.h"
#include "stm32f0xx_gpio.h"
#include <stdio.h>

void RCC_Config(void)
{
        RCC_DeInit();
        RCC_HSICmd(ENABLE);
       
        while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) != SET)                                        /* check out, if HSI ready */
        {
        }
                               
        FLASH_PrefetchBufferCmd(ENABLE);                                                                                                        /* Enable Flash */
        FLASH_SetLatency(FLASH_Latency_1);                                                                                 /* Flash wait two State */

        RCC_HCLKConfig(RCC_SYSCLK_Div1);
        RCC_PCLKConfig(RCC_HCLK_Div2);

        RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);                        /* PLLCLK = HSI/2 * 16 = 64 MHz */
        RCC_PLLCmd(ENABLE);
       
        while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) != SET)                                        /* check out, if PLL ready */
        {
        }
       
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);                        /* SYSCLK = PLLCLK = 64 MHz -> APB1 = 32 MHz, APB2 = 64 MHz */
       
        while (RCC_GetSYSCLKSource() != 0x08)                                /* check out, if SYSCLK uses PLLCLK */
        {
        }
       
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
}

void GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitS;
       
        GPIO_InitS.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitS.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitS.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitS.GPIO_OType = GPIO_OType_PP;
       
        GPIO_Init(GPIOC,&GPIO_InitS);

}


int main(void)
{
        int i = 0;
       
        while(1)
        {
                RCC_Config();
                GPIO_Config();
       
                while (1)
                {
       
                 
                        GPIO_SetBits(GPIOC, GPIO_Pin_9);
                        GPIO_ResetBits(GPIOC, GPIO_Pin_9);
               
                }
        }
}

开头我以为频率太快可能不行,所以把开关灯的setbits和resetbits加上循环,变成:
for(i=1;i<30;i++)
{GPIO_SetBits(GPIOC, GPIO_Pin_9);}
for(i=1;i<30;i++)
{GPIO_ResetBits(GPIOC, GPIO_Pin_9);}
让其有延时,灯还是不闪,各位知道是什么原因吗?谢谢
收藏 1 评论25 发布时间:2016-8-24 22:42

举报

25个回答
cos12a-21701 回答时间:2016-8-26 12:43:49
   while (1)
  {
             GPIO_SetBits(GPIOC, GPIO_Pin_9);
              GPIO_ResetBits(GPIOC, GPIO_Pin_9);
   }
这两条一开一关指令跑起来,1mS都不用,LED灯在狂:开关开关开关,电灯泡20MS闪的频率都看不到闪,这个怎么分的清LED在闪呢?
如果是开,停一下,再关,再停一下,再开,再停一下,是不是就很容易看清LED闪了。
profile5 回答时间:2016-8-26 09:25:00
本帖最后由 profile5 于 2016-8-26 09:29 编辑
暗爪侠 发表于 2016-8-25 19:31
如果是这样的话,为什么会是一直亮灯,而不是一直不亮呢?谢谢!

因为led灯亮起来,熄灭后会有 余辉, 数码管扫描就是这个原理。。。
个人觉得也可能是delay的问题。。。这儿30000真心不大,建议构造一个delay函数,里面使用双层嵌套循环来延时,记得打开后加延时,关闭后也加延时
暗爪侠 回答时间:2016-8-26 19:08:53
cos12a-21701 发表于 2016-8-26 12:43
while (1)
  {
             GPIO_SetBits(GPIOC, GPIO_Pin_9);

是的所以在debuger里一步步走的话就能看见灯熄灭,关键还是中间停的时间太短,现在调好了!
车厘子 回答时间:2016-8-25 08:12:18
延时再长点...
chifen 回答时间:2016-8-25 09:10:19
你看一下板载有没有晶振,051最大倍频只有48MH
废鱼 回答时间:2016-8-25 09:22:31
SET和RESET和SET之间加延时。太快你根本看不到变化。
风子 回答时间:2016-8-25 12:03:31
实际上就是频率太快
nashchen17 回答时间:2016-8-25 12:49:05
才加到30應該不夠,建議用timer試試看
暗爪侠 回答时间:2016-8-25 19:10:01

我延到30000了,貌似没有效果....
暗爪侠 回答时间:2016-8-25 19:10:39
chifen 发表于 2016-8-25 09:10
你看一下板载有没有晶振,051最大倍频只有48MH

这个要怎么检查?新手不懂,求教,谢谢!
暗爪侠 回答时间:2016-8-25 19:10:54
chifen 发表于 2016-8-25 09:10
你看一下板载有没有晶振,051最大倍频只有48MH

这个要怎么检查?新手不懂,求教,谢谢!
暗爪侠 回答时间:2016-8-25 19:13:00
安 发表于 2016-8-25 09:22
SET和RESET和SET之间加延时。太快你根本看不到变化。

已经加到30000了还是不行啊,话说如果是频率太高的问题的话,为什么会是一直亮灯,而不是一直不亮呢?谢谢
暗爪侠 回答时间:2016-8-25 19:31:43
风子 发表于 2016-8-25 12:03
实际上就是频率太快

如果是这样的话,为什么会是一直亮灯,而不是一直不亮呢?谢谢!
暗爪侠 回答时间:2016-8-25 19:32:15
nashchen17 发表于 2016-8-25 12:49
才加到30應該不夠,建議用timer試試看

本人新手,刚看到gpio,timer是什么?能给我介绍一下吗?
chifen 回答时间:2016-8-26 08:38:01
硬件有一个晶振位置 ,和仿真器上的晶振应该是一样的,上面写的是8M
chifen 回答时间:2016-8-26 09:00:01
stm32f0discovery_fw.zip (1.6 MB, 下载次数: 14)
废鱼 回答时间:2016-8-26 09:03:42
用仿真器单步走,这个就要看你先执行的操作会导致什么结果了。
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版