通过LED流水灯,由浅入深,理解寄存器和与GPIO相关的函数,比如GPIO_Init()。
流水灯,设计思路很简单,只需要将多个连续的GPIO口依次设置电平,根据你LED连接线路,选择是高电平触发还是低电平触发。每个灯亮几毫秒然后熄灭,再延时,你当然可以通过GPIO_ResetBits(GPIOA,GPIO_Pin_0)这种方式一个一个写,但是,注意,观察GPIO_Pin_对应寄存器的值,不难发现。只需要将GPIO_Pin_0的寄存器值左移一位,就是GPIO_Pin_1的值,所以思路就有了,我的代码如下
#include "stm32f10x.h"
#include "Delay.h" // Device header
int main(void){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef g;
g.GPIO_Mode=GPIO_Mode_Out_PP;
g.GPIO_Pin=GPIO_Pin_All;
g.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&g);
while (1)
{
int a=0x0001;
for (int i = 0; i < 7; i++)
{
int b=a<<i;
GPIO_Write(GPIOA,~b);
Delay_ms(200);
}
}
}
|