
STM32 的GPIO流水灯,程序下进去后,4个LED先全部都亮,然后才逐个点亮;我不太明白,怎么开始会全部都亮
#include"stm32f10x_lib.h"GPIO_InitTypeDefGPIO_InitStructure;//声明GPIO_InitStructurevoi...
#include "stm32f10x_lib.h"
GPIO_InitTypeDef GPIO_InitStructure;//声明GPIO_InitStructure
void LED_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); //开GPIOA时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1| GPIO_Pin_2 | GPIO_Pin_3 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // 设定输出速率2MHZHz
GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化GPIOE
}
void Delay(u32 nCount) //延时函数
{
for(; nCount != 0; nCount--);
}
int main(void)
{
LED_Init();
while(1)
{
GPIO_ResetBits(GPIOE, GPIO_Pin_1);//set GPIOE.1=0
Delay(0x8ffff);
GPIO_SetBits(GPIOE, GPIO_Pin_1);//set GPIOE.1=1
//Delay(0x4ffff);
GPIO_ResetBits(GPIOE, GPIO_Pin_0);//set GPIOE.0=0
Delay(0x8ffff);
GPIO_SetBits(GPIOE, GPIO_Pin_0);//set GPIOE.0=1
//Delay(0x4ffff);
GPIO_ResetBits(GPIOE, GPIO_Pin_2);//set GPIOE.2=0
Delay(0x8ffff);
GPIO_SetBits(GPIOE, GPIO_Pin_2);//set GPIOE.2=1
//Delay(0x4ffff);
GPIO_ResetBits(GPIOE, GPIO_Pin_3);//set GPIOE.3=0
Delay(0x8ffff);
GPIO_SetBits(GPIOE, GPIO_Pin_3);//set GPIOE.3=1
//Delay(0x4ffff);
}
} 展开
GPIO_InitTypeDef GPIO_InitStructure;//声明GPIO_InitStructure
void LED_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); //开GPIOA时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1| GPIO_Pin_2 | GPIO_Pin_3 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // 设定输出速率2MHZHz
GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化GPIOE
}
void Delay(u32 nCount) //延时函数
{
for(; nCount != 0; nCount--);
}
int main(void)
{
LED_Init();
while(1)
{
GPIO_ResetBits(GPIOE, GPIO_Pin_1);//set GPIOE.1=0
Delay(0x8ffff);
GPIO_SetBits(GPIOE, GPIO_Pin_1);//set GPIOE.1=1
//Delay(0x4ffff);
GPIO_ResetBits(GPIOE, GPIO_Pin_0);//set GPIOE.0=0
Delay(0x8ffff);
GPIO_SetBits(GPIOE, GPIO_Pin_0);//set GPIOE.0=1
//Delay(0x4ffff);
GPIO_ResetBits(GPIOE, GPIO_Pin_2);//set GPIOE.2=0
Delay(0x8ffff);
GPIO_SetBits(GPIOE, GPIO_Pin_2);//set GPIOE.2=1
//Delay(0x4ffff);
GPIO_ResetBits(GPIOE, GPIO_Pin_3);//set GPIOE.3=0
Delay(0x8ffff);
GPIO_SetBits(GPIOE, GPIO_Pin_3);//set GPIOE.3=1
//Delay(0x4ffff);
}
} 展开
1个回答
展开全部
(仅供参考)由于你设置推挽输出,也就是说没有上下拉(8中模式里输入有上下拉),在《数据手册》里的解释推挽输出初始化时,输出0或1,其实是0,这样的话,你的开始红灯都全部亮下,就不难理解了。所以你若想在开始的时候不想让他都亮(按照你的思路走),你可以对你的几个引脚进行拉高,即对ODR或者BSRR进行操作即可。
GPIO_SetBits(GPIOE, GPIO_Pin_1);//Init函数把几个脚都添加进去即可
GPIO_SetBits(GPIOE, GPIO_Pin_1);//Init函数把几个脚都添加进去即可
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询