野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17211|回复: 11

使用库函数点亮LED灯

[复制链接]
发表于 2020-8-23 15:14:24 | 显示全部楼层 |阅读模式
在点灯的时候没有问题,三个灯都可以点亮,但是在尝试流水灯的时候始终只亮红灯(PB5),小菜鸡跪求指点!用的是f1系列的指南者,主函数如下:
void Delay(uint32_t count)
{
   for(;count!=0;count--);
}


int main(void)
{
        LED_GPIO_Config();
       
        while(1)
          {       
                   GPIO_ResetBits(GPIOB,GPIO_Pin_0);
                         Delay(0xFFFFFF);
                         GPIO_SetBits(GPIOB,GPIO_Pin_0);
               
                       
                         GPIO_ResetBits(GPIOB,GPIO_Pin_1);
                         Delay(0xFFFFFF);
                          GPIO_SetBits(GPIOB,GPIO_Pin_1);
       
                       
                         GPIO_ResetBits(GPIOB,GPIO_Pin_5);
                         Delay(0xFFFFFF);
                          GPIO_SetBits(GPIOB,GPIO_Pin_5);
               
          }
       
}
       

初始化函数编写如下:
void LED_GPIO_Config(void)     //初始化
{
        /*第一步,开时钟*/
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
       
        /*第二步,定义GPIO初始化结构体*/
        GPIO_InitTypeDef GPIO_Initstruct;

        /*第三步,配置GPIO结构体成员*/
        GPIO_Initstruct.GPIO_Pin=GPIO_Pin_0;
        GPIO_Initstruct.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Initstruct.GPIO_Mode=GPIO_Mode_AF_PP;
       
        GPIO_Init(GPIOB, &GPIO_Initstruct);
       
        GPIO_Initstruct.GPIO_Pin=GPIO_Pin_1;
        GPIO_Init(GPIOB, &GPIO_Initstruct);
       
        GPIO_Initstruct.GPIO_Pin=GPIO_Pin_5;
        GPIO_Init(GPIOB, &GPIO_Initstruct);
       
        /*第四步,调用GPIO初始化函数,配置GPIO*/
        //GPIO_Init(GPIOB, &GPIO_Initstruct);
       
        GPIO_SetBits(GPIOB, GPIO_Pin_0);
        GPIO_SetBits(GPIOB, GPIO_Pin_1);
        GPIO_SetBits(GPIOB, GPIO_Pin_5);    //关上三个灯(置1)
}

野火论坛202008231511398570..png
野火论坛202008231511102212..png
回复

使用道具 举报

发表于 2020-8-24 08:47:41 | 显示全部楼层

回帖奖励 +5 火花

        /*第三步,配置GPIO结构体成员*/
        GPIO_Initstruct.GPIO_Pin=GPIO_Pin_0;
        GPIO_Initstruct.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Initstruct.GPIO_Mode=GPIO_Mode_AF_PP;
为什么后面的就不加这两句了,好好对照一下例程是怎样配置引脚的
        
回复 支持 反对

使用道具 举报

发表于 2020-8-24 09:08:03 | 显示全部楼层

回帖奖励 +5 火花

回楼上,这样配置引脚一点问题都没有的。
问题应该是在 GPIO_Initstruct.GPIO_Mode=GPIO_Mode_AF_PP;,
作为IO口不应该是复用功能,普通推挽输出就行: GPIO_Initstruct.GPIO_Mode=GPIO_Mode_Out_PP;
回复 支持 反对

使用道具 举报

发表于 2020-8-24 09:50:11 | 显示全部楼层

回帖奖励 +5 火花

AF是复用模式,比如你要把引脚作为定时器的输出之类的,直接对引脚的ODR寄存器操作应该用OUT
回复 支持 反对

使用道具 举报

发表于 2020-8-24 15:21:10 | 显示全部楼层
楼上的正确,后面两个灯不亮是因为没有配置引脚的工作模式
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-24 16:32:37 | 显示全部楼层
还有梦与你 发表于 2020-8-24 09:08
回楼上,这样配置引脚一点问题都没有的。
问题应该是在 GPIO_Initstruct.GPIO_Mode=GPIO_Mode_AF_PP;,
作 ...

哦哦是我知识不够!谢谢!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-24 16:33:28 | 显示全部楼层
yhpzy 发表于 2020-8-24 15:21
楼上的正确,后面两个灯不亮是因为没有配置引脚的工作模式

好的谢谢!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-24 16:34:00 | 显示全部楼层
Wangwwd 发表于 2020-8-24 09:50
AF是复用模式,比如你要把引脚作为定时器的输出之类的,直接对引脚的ODR寄存器操作应该用OUT ...

谢谢!是我知识储备太少了!
回复 支持 反对

使用道具 举报

发表于 2020-8-25 10:05:36 | 显示全部楼层
ycll 发表于 2020-8-24 16:34
谢谢!是我知识储备太少了!

想学懂STM32还是得多看看数据手册
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-25 11:35:21 | 显示全部楼层
Wangwwd 发表于 2020-8-25 10:05
想学懂STM32还是得多看看数据手册

好的!谢谢提醒!
回复 支持 反对

使用道具 举报

发表于 2020-8-28 11:39:46 | 显示全部楼层

这样配置引脚一点应该是可以的,这些寄存器管理的是整个GPIOA
问题应该是在 GPIO_Initstruct.GPIO_Mode=GPIO_Mode_AF_PP,这句话应该换为 GPIO_Initstruct.GPIO_Mode=GPIO_Mode_Out_PP
野火论坛202008281139336070..png
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-30 11:28:14 | 显示全部楼层
敲子灯花 发表于 2020-8-28 11:39
这样配置引脚一点应该是可以的,这些寄存器管理的是整个GPIOA
问题应该是在 GPIO_Initstruct.GPIO_Mode=GP ...

好的谢谢!已经改正错误了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 10:51 , Processed in 0.029947 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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