上一篇是利用库创建工程模板,下面我们就可以书写自己的程序了。
在初级例程中,我给自己创建了四个工程,分别是LED(对GPIO的操作)、SysTick(系统滴答定时器)、KEY(扫描的方式和中断方式)。如图:
其实,我们可以把前两个工程合并成一个,利用SysTick产生精确的系统延时来使LED闪烁。下面的程序就是初始化LED的GPIO,
void LED_GPIO_Init(void)
{
/* 定义一个GPIO_InitStructure类型的结构体 */
GPIO_InitTypeDef GPIO_InitStructure;
/* 开启GPIOD的外设时钟 */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
/* 选择要控制的GPIOD的引脚 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 |GPIO_Pin_14 | GPIO_Pin_15;
/* 设置引脚模式为推挽输出 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
/* 设置引脚的输出类型的枚举 */
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
/* 设置引脚的类型为上拉 */
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
/* 设置引脚的输出速率为50MHz */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/* 调用库函数,初始化GPIOD */
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
初始化完成之后,LED的GPIO是设置完成了,接下来我们就可以操作LED的亮灭了,我们用到下面两个函数
void STM_EVAL_LEDOn(Led_TypeDef Led)
{
/* Turn on LED */
GPIO_PORT[Led]->BSRRL = GPIO_PIN[Led];
}
void STM_EVAL_LEDOff(Led_TypeDef Led)
{
/* Turn off LED */
GPIO_PORT[Led]->BSRRH = GPIO_PIN[Led];