当前位置:首页 > 单片机 > 单片机
[导读]简介不同的开发板的原理图结构也不尽相同,笔者在这里使用野火的MINI-V3(F103VET6)简易开发板对GPIO口的设置做一个简单的介绍,并实现按键控制LED灯的亮灭。方便读者可以快速熟悉并灵活应用。原理图分析首先我们来

简介

不同的开发板的原理图结构也不尽相同,笔者在这里使用野火的MINI-V3(F103VET6)简易开发板对GPIO口的设置做一个简单的介绍,并实现按键控制LED灯的亮灭。方便读者可以快速熟悉并灵活应用。

原理图分析

首先我们来看一下发光二极管部分和按键部分的原理图。

下面是按键的原理图部分:

在这里,我们将使用KEY1(PA0)来控制红灯PB5的亮灭。由原理图可知,其控制LED灯的PB5引脚为低电平时,灯亮。当KEY1按下时,PA0引脚由之前的低电平转为高电平(3V3)。明确了目的之后我们就可以分析GPIO口并进行设置了。

GPIO设置

经过上述的功能明确之后,我们将其分为两大类,分别是输入类(如按键)和输出类(LED灯)。
STM32系列单片机的引脚有着丰富的功能,在这里将其芯片的GPIO口部分的结构图放出,有兴趣的朋友可自行研究或在评论区留言讨论。在这里笔者将不再讲解时钟树的相关内容,以免对初学者造成较大压力,有兴趣的朋友可自行参考官方文档。

输入输出模式

GPIO的输入、输出种类详见下表。

功能名称简述输入上拉输入(GPIO_Mode_IPU)默认状态下(引脚无输入),读得的数据为1,高电平输入下拉输入(GPIO_Mode_IPD)与上拉输入相反,默认为0,低电平输入浮空输入(GPIO_Mode_IN_FLOATING)输入不确定,无上拉和下拉。输入阻抗较大,一般用于标准通信协议如I2C、USART的接收端输入模拟输入模式(GPIO_Mode_AIN)一般由ADC采集电压信号时将其设置为模拟输入。输出普通推挽输出(GPIO_Mode_Out_PP)输出电平为3.3V输出普通开漏输出(GPIO_Mode_Out_OD)若要输出5V,则需外加上拉电阻,电源为5V。输出为高阻态时,由上拉电阻和电源向外输出5V的高电平输出复用推挽输出(GPIO_Mode_AF_PP)引脚复用功能采用复用模式输出复用开漏输出(GPIO_Mode_AF_OD)复用模式,且加入上拉电阻

由上表可知,我们需要将LED灯的引脚设置为推挽输出。按键部分的输入可以是上拉输入也可以是下拉输入。在这里,因为我们的电路原理图设置的是按键按下为高,释放为低。所以我们使用下拉输入的模式 。

结构体设置

STM32以高效的库函数开发而著称。由于其寄存器过多,不适合类似51系列单片机的寄存器操作,所以我们将直接采用库函数开发的方法(CMSIS 3.5.0版本)。

STM32的库函数将结构体的功效发挥到了极致,我们首先来看一下GPIO口的结构体定义:

typedefstruct{uint16_tGPIO_Pin;/*!

在这个结构体之中,主要包括三个成员:引脚设置(GPIO_Pin)、引脚最大输出速度(GPIO_Speed)和引脚模式(GPIO_Mode)。在这之中,GPIO还有一个重要的定义,即确定组别:GPIOA~GPIOG.
他们的种类又可以分别划分为:

GPIO_Speed:

GPIO_Speed_10MHz

GPIO_Speed_2MHz

GPIO_Speed_50MHz

GPIO_Mode:

GPIO_Mode_AIN

GPIO_Mode_IN_FLOATING

GPIO_Mode_IPD

GPIO_Mode_IPU

GPIO_Mode_Out_OD

GPIO_Mode_Out_PP

GPIO_Mode_AF_OD

GPIO_Mode_AF_PP

GPIO_Pin:

GPIO_Pin_0

GPIO_Pin_1

GPIO_Pin_2

GPIO_Pin_3

GPIO_Pin_4

GPIO_Pin_5

GPIO_Pin_6

GPIO_Pin_7

GPIO_Pin_8

GPIO_Pin_9

GPIO_Pin_10

GPIO_Pin_11

GPIO_Pin_12

GPIO_Pin_13

GPIO_Pin_14

GPIO_Pin_15

熟悉结构体类别以后我们可以进行结构体的定义以及GPIO口的初始化。由于GPIO处于APB2时钟线下,所以我们必须要开启相应的时钟。代码如下:

voidkey_gpio_config(void){GPIO_InitTypeDefkey_struct;//定义结构体RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启时钟key_struct.GPIO_Pin=GPIO_Pin_0;//结构体成员设置;对于按键初始化而言,由于GPIO是输入模式,故不必设置最大输出速度key_struct.GPIO_Mode=GPIO_Mode_IPD;GPIO_Init(GPIOA,&key_struct);//初始化引脚}voidled_gpio_config(void){//同上GPIO_InitTypeDefled_struct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);led_struct.GPIO_Pin=GPIO_Pin_5;led_struct.GPIO_Speed=GPIO_Speed_50MHz;led_struct.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOB,&led_struct);}12345678910111213141516

自此,结构体设置结束。下面进行GPIO口的操作。

GPIO操作

对于库函数开发来说,一切硬件操作都可以使用函数来解决。如:

uint16_tGPIO_ReadInputData(GPIO_TypeDef*GPIOx)//ReadsthespecifiedGPIOinputdataport.uint8_tGPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)//Readsthespecifiedinputportpin.uint16_tGPIO_ReadOutputData(GPIO_TypeDef*GPIOx)//ReadsthespecifiedGPIOoutputdataport.uint8_tGPIO_ReadOutputDataBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)//Readsthespecifiedoutputdataportbit.voidGPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)//Clearstheselecteddataportbits.voidGPIO_SetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin)//Setstheselecteddataportbits.voidGPIO_StructInit(GPIO_InitTypeDef*GPIO_InitStruct)//FillseachGPIO_InitStructmemberwithitsdefaultvalue.voidGPIO_Write(GPIO_TypeDef*GPIOx,uint16_tPortVal)//WritesdatatothespecifiedGPIOdataport.voidGPIO_WriteBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,BitActionBitVal)//Setsorclearstheselecteddataportbit.12345678910111213141516171819202122232425262728

对于本题目而言,使用简单的写入操作即可。

intmain(){led_gpio_config();GPIO_WriteBit(GPIOB,GPIO_Pin_5,1);//初始化,使灯为熄灭状态key_gpio_config();while(1){if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1){GPIO_WriteBit(GPIOB,GPIO_Pin_5,Bit_RESET);}else{GPIO_WriteBit(GPIOB,GPIO_Pin_5,Bit_SET);}}}123456789101112131415

至此,GPIO的操作完成,功能也成功实现。但是按键部分未加消抖处理,所以可能出现不稳定的状态。不过对于本示例来说,这一现象并不明显。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭