今天把流水灯基本功能出来了
不过STM32的函数库还是弄得我一头雾水...
和昨天想的差不多,直接在例程里面改的
配置GPIO端口
/* 配置PC4-PC7为输出,速度为50Mhz*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5
|GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
主函数里面通过向C口输出,实现循环点亮LED1-LED4
for(;;)
{
GPIOC->ODR=0xffffff1f;
delay();
GPIOC->ODR=0xffffff2f;
delay();
GPIOC->ODR=0xffffff4f;
delay();
GPIOC->ODR=0xffffff8f;
delay();
}
只是利用了端口数据输出寄存器GPIOx_ODR,其低16位对应每个引脚,高16位保留。
只要更改GPIOC->ODR的输出值便可以设定流水灯的花样。
中断那部分还是没弄好。。。。一会再看看。。
还有网上看到一个流水灯的程序,思路不太一样,不过看着挺好的,贴过来了
端口设置可能有点不太一样,不过基本思路就是这样的,用到了库函数中GPIO_SetBits和GPIO_ResetBits两个函数
static u32 i="1";
switch(i)
{
case 1:
GPIO_ResetBits(GPIOC, GPIO_Pin_4); //关LED5
GPIO_SetBits(GPIOC, GPIO_Pin_7); //开LED2
break;
case 2:
GPIO_ResetBits(GPIOC, GPIO_Pin_7); //关LED2
GPIO_SetBits(GPIOC, GPIO_Pin_6); //开LED3
break;
case 3:
GPIO_ResetBits(GPIOC, GPIO_Pin_6); //关LED3
GPIO_SetBits(GPIOC, GPIO_Pin_5); //开LED4
break;
case 4:
GPIO_ResetBits(GPIOC, GPIO_Pin_5); //关LED4
GPIO_SetBits(GPIOC, GPIO_Pin_4); //开LED5
i="0";
break;
default :
i="0";
break;
}
i++; //切换到下一个灯