野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10467|回复: 2

关于LED灯的默认状态怎么可以设置。

[复制链接]
发表于 2018-4-24 19:03:35 | 显示全部楼层 |阅读模式
问题:LED灯的默认状态怎么可以设置呢?
为了寻找LED灯的默认状态
做以下两个实验。

实验一:采用demo里面的源码。
  1. int main(void)
  2. {       
  3.             /* LED 端口初始化 */
  4.             LED_GPIO_Config();         
  5.             return 0;
  6. }
复制代码
  1. void LED_GPIO_Config(void)
  2. {               
  3.                 /*定义一个GPIO_InitTypeDef类型的结构体*/
  4.                 GPIO_InitTypeDef GPIO_InitStructure;

  5.                 /*开启LED相关的GPIO外设时钟*/
  6.                 RCC_APB2PeriphClockCmd( LED1_GPIO_CLK | LED2_GPIO_CLK | LED3_GPIO_CLK, ENABLE);
  7.                 /*选择要控制的GPIO引脚*/
  8.                 GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN;       

  9.                 /*设置引脚模式为通用推挽输出*/
  10.                 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   

  11.                 /*设置引脚速率为50MHz */   
  12.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  13.                 /*调用库函数,初始化GPIO*/
  14.                 GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);       
  15.                
  16.                 /*选择要控制的GPIO引脚*/
  17.                 GPIO_InitStructure.GPIO_Pin = LED2_GPIO_PIN;

  18.                 /*调用库函数,初始化GPIO*/
  19.                 GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure);
  20.                
  21.                 /*选择要控制的GPIO引脚*/
  22.                 GPIO_InitStructure.GPIO_Pin = LED3_GPIO_PIN;

  23.                 /*调用库函数,初始化GPIOF*/
  24.                 GPIO_Init(LED3_GPIO_PORT, &GPIO_InitStructure);

  25.                 /* 关闭所有led灯        */
  26.                 GPIO_SetBits(LED1_GPIO_PORT, LED1_GPIO_PIN);
  27.                
  28.                 /* 关闭所有led灯        */
  29.                 GPIO_SetBits(LED2_GPIO_PORT, LED2_GPIO_PIN);         
  30.    
  31.     /* 关闭所有led灯        */
  32.                 GPIO_SetBits(LED3_GPIO_PORT, LED3_GPIO_PIN);
  33. }
复制代码
实验结果:
程序烧录进去后,每按一次Reset按键,LED灯都会闪烁一次(时间很短)。
因此可以判断,LED在初始化完成后,默认状态是开的,然后被程序给关闭了。

实验二:使用教程中的寄存器直接操作代码

  1. int main()
  2. {
  3.             *(unsigned int*)0x40021018 |= (1<<3);
  4.             *(unsigned int*)0x40010C00 |= (1<<(4*0));
  5.             *(unsigned int*)0x40010C0C |= (1<<0);
  6.      return 0;
  7. }
复制代码
实验结果:
程序烧录进去后,每按一次Reset按键,LED灯都会闪烁一次(时间很短)。
因此可以判断,LED在初始化完成后,默认状态是开的,然后被程序给关闭了。

问题:LED灯的默认状态怎么可以设置呢?




回复

使用道具 举报

发表于 2018-4-25 08:47:40 | 显示全部楼层
可以把GPIO_SetBits放到GPIO_Init函数之前
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-25 10:35:52 | 显示全部楼层
flyleaf 发表于 2018-4-25 08:47
可以把GPIO_SetBits放到GPIO_Init函数之前

哥们,这个思路不错。刚才实验成功
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 08:48 , Processed in 0.045946 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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