STM32Cube_FW_F1_V1.0.0固件库学习(三)GPIO LED&KEY

 

原V3.5 GPIO相关函数

新的STM32CUBE V1.0 GPIO.c的函数定义如下:

可以看出,相对与上面,ST给你做的更加完整,我不知道完整这个词是不是准确。新版本库更加简洁,原来V3.5中很多位操作中断配置说明的全米有了

ST都给你作了定义,原来可能需要用户对每一个设置做定义,比如你需要实现A功能,需要挨个配置寄存器abcdef,ST现在将各个功能都定义好了,你只需要调用

他定义好的A,就自动配置了对应的abcdef,这个可能不太明白,回头看中断部分可能更加明确。

新手小白,暂时还不好做评论哪个好,比如我一开始就想用直接置位方式GPIO_SetBit点灯,结果找了很久也没发现,原来他真的是没有做。。。

旧版本的库相对来说灵活性更大一些。新的库更简便一些。就好像以前用的EZUSB和CYUSB,孰优孰劣,后面再看吧。

此次目的只是纯粹通过完整的学习理清整个结构与用法,封装的根源两者肯定是一样的。

 

具体函数说明:

1.GPIO初始化:

下图是原来V3.5的初始化代码

新库函数以后简称V4.0,与上面比较可以看到,流程都是一样的,只是结构体和函数名字有了变化

配置IO口的流程

<1> EN GPIO CLK

<2> Set GPIO PIN

<3> Set GPIO MODE

<4> Set GPIO SPEED

<5> GPIO_INIT,可以理解让器件按照前面的配置开始工作

这里没法像V3.5那样通过GPIO_SetBits置位了,所以自己写了LED_ALLSET用作关LED

void Led_AllSet(uint8_t led_state)
{
    if( led_state == LED_ON )
    {
        HAL_GPIO_WritePin(GPIOD,LED1|LED2|LED3|LED4,GPIO_PIN_RESET);
    }
    else if ( led_state == LED_OFF)
    {
        HAL_GPIO_WritePin(GPIOD,LED1|LED2|LED3|LED4,GPIO_PIN_SET);
    }
    
}

 

 1 void LED_GPIO_Init(void)
 2 {
 3 
 4   GPIO_InitTypeDef GPIO_InitStruct;
 5 
 6   /* GPIO Ports Clock Enable */
 7   __HAL_RCC_GPIOD_CLK_ENABLE();  
 8 
 9   /*Configure GPIO pins : PD2 PD3 PD4 PD7 */
10   GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_7;
11   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
12   GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
13   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
14   
15   Led_AllSet(LED_OFF);
16 
17 }
STM32CubeV1.0 GPIO_INIT

 GPIO的主要调用函数就看他名字就知道了

HAL_GPIO_ReadPin 读引脚

HAL_GPIO_WritePin 写引脚

HAL_GPIO_TogglePin 反转引脚

 

posted @ 2015-05-15 10:00  迷途的张小朋友  阅读(1293)  评论(0编辑  收藏  举报