用户工具

站点工具


icore3_arm_hal_2
银杏科技有限公司旗下技术文档发布平台
技术支持电话0379-69926675-801
技术支持邮件Gingko@vip.163.com
版本 日期 作者 修改内容
V1.0 2019-12-26 gingko 初次建立

实验二:GPIO输出实验——ARM驱动三色LED

一、 实验目的与意义

  1. 了解STM32 GPIO结构
  2. 了解STM32 GPIO 特征
  3. 了解三色LED特征和应用领域
  4. 掌握STM32 HAL库中GPIO属性的配置方法
  5. 掌握KEILMDK 集成开发环境使用方法

二、 实验设备及平台

  1. iCore3 双核心板点击购买
  2. JLINK(或相同功能)仿真器点击购买
  3. Micro USB线缆
  4. Keil MDK 开发平台
  5. STM32CubeMX开发平台
  6. 装有WIN XP(及更高版本)系统的计算机

三、 实验原理

STM32 GPIO简介

  • STM32F4每组通用I/O 端口包括4 个32 位配置寄存器(MODER、OTYPER、OSPEEDR 和PUPDR)、2 个32 位数据寄存器(IDR 和ODR)、1 个32 位置位/复位寄存器(BSRR)、1 个32 位锁定寄存器(LCKR) 和2 个32 位复用功能选择寄存器(AFRH 和AFRL)等。

GPIO可以配置成以下8种工作模式:

  • 浮空输入:此端口在默认情况下什么都不接,呈高阻态,这种设置在数据传输时用的比较多。
  • 上拉输入:上拉输入模式与浮空输入模式相比,仅仅是在数据通道上部,接入了一个上拉电阻,这个上拉电阻的阻值介于30K~50K欧姆,CPU可以随时在输入数据寄存器的另一端,读出I/O端口的电平状态。这种模式的好处在于我们什么都不输入时,由于内部上拉电阻的原因,处理器会觉得我们输入了高电平,这就避免了不确定的输入。该端口在默认情况下输入为高电平。
  • 下拉输入:下拉输入模式与浮空输入模式相比,仅仅是在数据通道上部,接入了一个下拉电阻。与上拉输入模式类似,这种模式的好处在于外部没有输入时,由于内部下拉电阻的原因,我们的处理器会觉得我们输入了低电平。
  • 模拟功能:STM32的模拟输入通道的配置很简单,信号从I/O端口直接进入ADC模块。此时,所有的上拉、下拉电阻和施密特触发器,均处于断开状态,因此输入数据寄存器将不能反映端口上的电平状态,也就是说,模拟输入配置下,信号不经过输入数据寄存器,CPU不能在输入数据寄存器上读到有效的数据。该输入模式,使我们可以获得外部的模拟信号。
  • 开漏输出:开漏输出不可以直接输出高电平,开漏输出的输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行。
  • 推挽输出:推挽输出可以输出高、低电平,连接数字器件;推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源决定。
  • 开漏复用输出:GPIO的基本功能是普通的I/O,而STM32有自己的各个功能模块,这些内置外设的外部引脚是与标准GPIO复用的,当作为这些模块的功能引脚时就叫复用。开漏复用输出功能模式与开漏输出模式相比,不同的是输出控制电路的输入,是和片上外设的输出信号相连即与复用功能的输出端相连,此时,输出数据寄存器在输出通道被断开。
  • 推挽复用输出:推挽复用输出功能模式与推挽输出模式相比,不同的是输出控制电路的输入,是和片上外设的输出信号相连,即与复用功能的输出端相连,而输出数据寄存器在输出通道被断开。
  • 本实验通过STM32的三个GPIO口驱动三色LED的三个通道;设定GPIO为推挽输出模式。采用灌电流的方式与LED连接,输出高电平LED灭,输出低电平LED亮。 驱动示意图如下图所示。

驱动示意图

四、 实验程序

  1. 主函数
while (1)  
{  
 //三色LED循环闪烁
 LED_RED_ON;  
 LED_BLUE_OFF;  
 LED_GREEN_OFF;  
 HAL_Delay(500);  //延时500ms
 LED_RED_OFF;  
 LED_BLUE_ON;  
 LED_GREEN_OFF;  
 HAL_Delay(500);  
 LED_RED_OFF;  
 LED_BLUE_OFF;  
 LED_GREEN_ON;  
HAL_Delay(500);           
}  
  1. GPIO初始化
void MX_GPIO_Init(void)  
{  
  GPIO_InitTypeDef GPIO_InitStruct = {0};  
 
  __HAL_RCC_GPIOH_CLK_ENABLE();  
  __HAL_RCC_GPIOA_CLK_ENABLE();  
  __HAL_RCC_GPIOI_CLK_ENABLE();  
   //GPIOH、GPIIOA和GPIOI端口时钟使能
  HAL_GPIO_WritePin(GPIOI, LED_RED_Pin|LED_GREEN_Pin|LED_BIUE_Pin, GPIO_PIN_SET);  
  //PI5、PI6、PI7、接三色LED灯,PI5、PI6、PI7置高电平,灯熄灭 
  GPIO_InitStruct.Pin = LED_RED_Pin|LED_GREEN_Pin|LED_BIUE_Pin;  //设置连接三色LED灯的IO端口
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 
   //输出类型为推挽输出
  GPIO_InitStruct.Pull = GPIO_PULLUP; 
   //上拉输出
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
   //设置I/O输出等级
  HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);  
}
  • void HAL_GPIO_Init(GPIO_TypeDef*GPIOx, GPIO_InitTypeDef *GPIO_Init)这个函数有两个参数,第一个参数是用来指定需要初始化的GPIO对应的GPIO组,取值范围为GPIOA~GPIOK。第二个参数为初始化参数结构体指针,结构体类型为GPIO_InitTypeDef。
typedef struct 
{  
  uint32_t Pin;         // 配置IO端口
  uint32_t Mode;        // 配置IO模式
  uint32_t Pull;        // 配置IO上下拉
  uint32_t Speed;       //配置IO速度等级
  uint32_t Alternate;  //要连接到所选引脚的外围设备
}GPIO_InitTypeDef; 

五、 实验步骤

  1. 把仿真器与iCore3的SWD调试口相连(直接相连或者通过转接器相连);
  2. 把iCore3通过Micro USB线与计算机相连,为iCore3供电;
  3. 打开Keil MDK 开发环境,并打开本实验工程;
  4. 烧写程序到iCore3上;
  5. 也可以进入Debug 模式,单步运行或设置断电运行观察三色LED状态。

六、 实验现象

  • iCore3 双核心板上与ARM相连的三色LED(PCB上标示为ARM▪LED),红色、绿色、蓝色交替点亮。

实验二:GPIO输出实验——STM32CubeMX配置GPIO

配置过程

  • 1.在主界面选择File–>New Project 或者直接点击ACCEE TO MCU SELECTOR

  • 2.出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置在搜索栏的下面,提供的各 种查找方式,可以选择芯片内核,型号,等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32F407IGTx。

  • 3.配置RCC,使用外部时钟源

  • 4.配置调试引脚

  • 5将LED对应的3个引脚(PI5,PI6,PI7)设置为GPIO_Output

  • 6引脚模式配置

  • 7时钟源设置,选择外部高速时钟源,配置为最大主频

  • 8工程文件的设置, 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可。IDE我们使用的是 MDK5

  • 9点击Code Generator,进行进一步配置

 Copy all used libraries into the project folder
将HAL库的所有.C和.H都复制到所建工程中
优点:这样如果后续需要新增其他外设又可能不再用STM32CubeMX的时候便会很方便
缺点:体积大,编译时间很长

 Copy only the necessary library files
只复制所需要的.C和.H(推荐)
优点:体积相对小,编译时间短,并且工程可复制拷贝
缺点:新增外设时需要重新用STM32CubeMX导入

 Add necessary library files as reference in the toolchain project configuration file
不复制文件,直接从软件包存放位置导入.C和.H
优点:体积小,比较节约硬盘空间
缺点:复制到其他电脑上或者软件包位置改变,就需要修改相对应的路径自行选择方式即可

  • 10然后点击GENERATE CODE 创建工程

创建成功,打开工程。

icore3_arm_hal_2.txt · 最后更改: 2022/03/18 14:59 由 sean