1首先我们都要初始化LED的配置
void LEDInit()
{
GPIO_InitTypeDef GPIO_InitStructure;
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
现在第一种方法gpio寄存器实现等的亮灭
2.GPIO寄存器
void LEDdisplay()
{
u32 i,j;
//BSRR是一个32位数据寄存器,这里要初始化实所有灯灭
GPIOC->BSRR=0xff;
for(i=0;i<600000;i++) ;
while (1)
{
for(j=0;j<1000000;j++);
//把ODR寄存器里面都存入零,让所有灯亮一次
GPIOC->ODR=0x00;
for(j=0;j<1000000;j++);
//这里让所有灯灭掉
GPIOC->ODR=0xFF;
for(j=0;j<1000000;j++);
//这里是把第五个串口的Pin_5放进寄存器,让这个灯发光
GPIOC->ODR ^= GPIO_Pin_5;
}
}
在这个基础上可以进行修改
首先
这个是延迟0.6s大约
for(i=0;i<600000;i++) ;
while (1)
{
for(i=0;i<8;i++)
{
for(j=0;j<1000000;j++);
//从0到7,没有设置BRR则BRR是默认亮灯,这是是循坏把灯调亮
GPIOC->BRR=(1<<i);
//从0到7,设置BSRR为灭灯,这是是循坏把灯i的灯熄灭
for(j=0;j<1000000;j++);
GPIOC->BSRR=(1<<i);
}
for(i=0;i<8;i++)
{
for(j=0;j<1000000;j++);
//统一让所有串口灯亮起来
GPIOC->BRR=0x000000ff;
//统一让所有串口灯亮起来
for(j=0;j<1000000;j++);
//设置BSRR寄存器
GPIOC->BSRR=0x000000ff;
}
第二种方法,函数法,
u32 i;
//把每个串口都设置成高电平,后面可以进行ResetBits直接可以把等亮起来
GPIO_SetBits(GPIOC, GPIO_Pin_All);
GPIO_ResetBits(GPIOC, GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_6);
for(i=0;i<600000;i++) ;
while(1)
{
for(i=0;i<600000;i++) ;
//写入GPIO接口,写入的灯会亮
GPIO_Write(GPIOC, 0xfe);
for(i=0;i<600000;i++) ;
GPIO_Write(GPIOC, 0xfd);
for(i=0;i<600000;i++) ;
GPIO_Write(GPIOC, 0xfb);
for(i=0;i<600000;i++) ;
GPIO_Write(GPIOC, 0xf7);
for(i=0;i<600000;i++) ;
GPIO_Write(GPIOC, 0xef);