STM32学习笔记(三)

上次的结束有点仓促,有两个重要的函数没有记录

GPIO_SetBits(GPIOC,GPIO_Pin_13);
GPIO_ResetBits(GPIOC,GPIO_Pin_13)

GPIO_SetBits是将对应的标志口置为高电平;GPIO_ResetBits是将对应的标志口置为低电平

GPIO

  • GPIO通用输入输出口
  • 可配置为8种输入输出模式
  • 引脚电平:0V~3V,部分引脚可容忍5V
  • 输出模式下可控制端口输出高低电平,用以驱动LED,控制蜂鸣器、模拟通信协议输出时序等
  • 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接受数据等

使用GPIO,就在与它的输入,输出功能,而通过配置GPIO的端口配置寄存器,端口可以配置成一下8种模式:

模式名称    性质

                                                              特征

浮空输入数字输入可读取引脚电平,若引脚悬空,则电平不确定
上拉输入数字输入可读取引脚电平,内部连接上拉电阻,悬空时默认高电平
下拉输入数字输入可读取引脚电平,内部连接下来电阻,悬空时默认低电平
模拟输入模拟输入GPIO无效,引脚直接接入内部ADC
开漏输出   数字输出可输出引脚电平,高电平为高组态,低电平接VSS
推挽输出数字输出可输出引脚电平,高电平接VDD,低电平接VSS
复用开漏输出数字输出由片上外设控制,高电平为高阻态,低电平接VSS
复用推挽输出数字输出由片上外设控制,高电平接VDD,低电平接VSS

这里的VDD是电源,VSS是地。

接下来是对GPIO口的一些应用,参考别人的例程,分别是LED闪烁、LED流水灯、蜂鸣器。

参考上节中的PC13口的配置,需要用到的有RCC时钟、GPIOC的使能,在闪烁过程中,还需要延迟函数,要不然单片机驱动高低电平频率太高了,肉眼观察不到。

这里再新学个函数:

GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)

这个函数的作用是对位进行写高低电平,前两个和SetBits的参数一样,第三个参数是Bit_RESET/Bit_SET分别是给对应的pin置低电平/高电平。

首先得对这个延时函数进行添加:

在STM32Project文件内找到1-3Delay函数模块,在工程文件夹中新建一个System文件夹,将Delay的.h和.c文件复制进去,然后将其添加进相应文件和路径。

void Delay_us(uint32_t us);
void Delay_ms(uint32_t ms);
void Delay_s(uint32_t s);

主要就有这三个函数,进行us,ms,s的延时。

LED闪烁

添加完延时函数模块之后,对应的输入输出口就应该使能和配置电平了,参考上节:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);

然后在main()函数中的while循环中写下如下语句,实现闪烁灯的亮灭。

GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
Delay_ms(500);
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
Delay_ms(500);

然后就完成了LED闪烁的配置,接下来烧录到单片机上就可以进行LED的闪灭闪灭了。

LED流水灯

先学一个新的函数:

GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)

函数的第一个参数是定义A/B/C口大类,后面的数据是进行每个大类口下的pin的高低电平配置

例如:

GPIO_Write(GPIOA,~0X0001);

将外部电路连接好,然后按照上面那种方法,直接进行进行pin口的高低电平配置,延时之后,就可以进行流水灯了。

GPIO_Write(GPIOA,~0X0001);
Delay_ms(500);
GPIO_Write(GPIOA,~0X0002);
Delay_ms(500);
GPIO_Write(GPIOA,~0X0004);
Delay_ms(500);
GPIO_Write(GPIOA,~0X0008);
Delay_ms(500);
GPIO_Write(GPIOA,~0X0010);
Delay_ms(500);

蜂鸣器

蜂鸣器就是将pin口配置好之后,对其输出高低电平,蜂鸣器就实现响与不响了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值