stm32开发笔记(二):stm32系列使用V3.5固件库的帮助文件以及GPIO基本功能(一)

简介: stm32开发笔记(二):stm32系列使用V3.5固件库的帮助文件以及GPIO基本功能(一)

前言

  stm32系列是最常用的单片机之一,不同的版本对应除了引脚、外设、频率、容量等’不同之外,其开发的方法是一样的。

  本章讲解使用库函数使用GPIO引脚功能。


补充

  本文章为多年前学习方法总结,基本是一通百通(PS:学的是方法而不是技术本身)。


stm32系列帮助文件GPIO手把手详细解说

  编写GPIO功能,建议初学者学习帮助文件中的案例。

  

  这是固件库V3.4中的GPIO源文件,而V3.5中的资源文件使用的不是固件库,V3.4这个文件明显是GPIO操作LED的,所以本人认为应是V3.5的固件库的.chm帮助文档有问题,V3.5的部分代码截图如下:

  

  可以看出,其函数体根本没有使用固件库,而是使用寄存器,然后我们这个源文件部分使用V3.4版本的固件库作为参考,继续往下走:

  

  再点击

  

  看代码,然后我们跟着代码来详细看整个文件,我们不管注释。

  

  00022行是固件库头文件,而00023行是官方评估板的头文件,这个对我们肯定是不用的,是与使用的具体的硬件定义有关的宏定义,继续往下走

  

  00037行是定义GPIO初始化的结构体,要操作任何外设都得先过它初始化

  

  00040行是延迟函数

  

  00049行进入主函数,也是程序开始执行的入口,注意看注释,时钟已经通过启动文件中调用SystemInit()函数配置好(在未配置固件库时,只添加启动代码和main函数,会报错没有定义SystemInit函数,这就很好的解释了此处为什么没有配置时钟,详细了解请查看QQ21497936空间中STM32新手问题解决方法),继续往下看

  

  (注意:这个注释,这个注释的意思是将端口全部初始化成模拟输入模式,这样可以减少耗电以及增加硬件的抗干扰性能)

  00061,00062,00063行是使能外设GPIOA,GPIOB,GPIOC,GPIOD,GPIOE的外设时钟。

  00065行是选中所有引脚(引脚0至引脚15)

  00066行是输入输出模式为模拟输入

  

  00076行至00082行之间,当定义了宏STM3210E_EVAL或者USE_STM32100E_EVAL则将端口GPIOF,GPIOG也初始化,我们可以判断这两个宏是官方配套的评估板上才有的F端口和G端口,其用的引脚至少144引脚及以上的芯片。

  

  这个是配套版初始化的LED1,LED2,LED3,LED4这样我们可以判断,这个函数是初始化指定端口的一个引脚,至于是哪个引脚肯定在评估板头文件有相关的宏定义,那么我们深入先点开STM_EVAL_LEDInit这个函数,查看它的源代码

  

  跟我们之前预想的一样,定义一个结构体,使能外设,指定引脚,推挽输出,50MHz的频率,初始化;至于Led_TypeDef这个结构和GPIO_CLK,GPIO_PORT应都是与评估板有关的宏定义。我们关心的重点在于声明结构体,使能时钟,配置引脚,然后初始化,我们还是把开发板这个宏定义截图出来,便于大家理解,我们查找一次LED1定义,来看看LED1是哪个端口的哪个引脚,是如何完成配置的

  

  LED1宏的实际值为0;

  

  LED1带入LEDn,实际值为0,c语言数组,则GPIO_CLK[LED1]实际上是LED1_GPIO_CLK,

  

  它的宏定义为C端口,我们再看看引脚:

  

  GPIO_PIN[LED1]实际为GPIO_PIN [0],其宏定义为GPIO_Pin_6(注:联系到固件库本自身的宏定义了)

  

  GPIO_PORT[LED1]实际为LED_GPIO_PORT宏,定义如下

  

  那么就是端口C,所以这段代码就是端口C使能,配置引脚6为推挽输出,然后初始化。

  LED1,LED2,LED3,LED4在评估板的头文件相关宏定义如下:

  

  00090-00115是与评估板相关的LED灯操作,开LED1,延迟,开LED2,开LED3,关LED1,延迟,开LED4,关LED2,关LED3延迟,关LED4,这个程序就不断这个循环体

  

  00123-00126是延迟函数的函数体

  这个例子文件就说到此处,详解了一般IO口的设置过程,过程总结如下:

  • (可选步骤):都设置成模拟输入,降低能耗和增加抗EMC/EMI等
  • 步骤二:使能端口的外设时钟
  • 步骤三:结构体变量配置端口的相关信息(端口引脚,端口模式,端口频率)
  • 步骤四:初始化端口
  • 步骤五:可以对端口进行输入输出的操作。
相关文章
|
2月前
【寄存器开发速成】半小时入门STM32寄存器开发(二)
【寄存器开发速成】半小时入门STM32寄存器开发(二)
|
2月前
|
芯片
【寄存器开发速成】半小时入门STM32寄存器开发(一)
【寄存器开发速成】半小时入门STM32寄存器开发(一)
|
5月前
stm32f407探索者开发板(八)——按键输入实验--GPIO做输入
stm32f407探索者开发板(八)——按键输入实验--GPIO做输入
|
5月前
|
传感器 编解码 API
【STM32开发入门】温湿度监测系统实战:SPI LCD显示、HAL库应用、GPIO配置、UART中断接收、ADC采集与串口通信全解析
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于微控制器与外围设备间的数据传输。SPI LCD是指使用SPI接口与微控制器通信的液晶显示屏。这类LCD通常具有较少的引脚(通常4个:MISO、MOSI、SCK和SS),因此在引脚资源有限的系统中非常有用。通过SPI协议,微控制器可以向LCD发送命令和数据,控制显示内容和模式。
176 0
|
6月前
经验大分享:STM32F4寄存器初始化系列:GPIO
经验大分享:STM32F4寄存器初始化系列:GPIO
32 0
|
6月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
459 2
|
5月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
738 0
|
7月前
|
传感器
STM32标准库ADC和DMA知识点总结-1
STM32标准库ADC和DMA知识点总结
|
6月前
|
IDE 开发工具
使用STM32F103标准库实现自定义键盘
通过本文,我们学习了如何使用STM32F103标准库实现一个简单的自定义键盘。我们首先初始化了GPIO引脚,然后实现了一个扫描函数来检测按键状态。这个项目不仅能够帮助我们理解STM32的GPIO配置和按键扫描原理,还可以作为进一步学习中断处理和低功耗设计的基础。希望本文对你有所帮助,祝你在嵌入式开发的道路上不断进步!
519 4