通过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);
- }
- }
- }
|