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 }
GPIO的主要调用函数就看他名字就知道了
HAL_GPIO_ReadPin 读引脚
HAL_GPIO_WritePin 写引脚
HAL_GPIO_TogglePin 反转引脚