1、实验目的
2、实验设计
3、实验步骤
3.1、方式一:实时检测按键状态,联动控制LED灯
3.1.1、使用 STM32CubeMX 新建项目工程
3.1.2、编写实施代码
3.1.3、配置烧写参数
3.1.4、烧写程序
3.2、方式二:按键中断,联动控制LED灯
3.2.1、使用 STM32CubeMX 新建项目工程
3.2.2、编写实施代码
3.2.3、配置烧写参数
3.2.4、烧写程序
第一步:双击打开 STM32CubeMX,点击新建工程,在 MCU 选型框里输入 STM32L431RC,右侧选择芯片封装为 LQFP 的型号,双击进入。
第二步:参照原理图配置GPIO。
看到 STM32L431RC MCU有高速和低速外部晶振,按键KEY1连接在PC0引脚、按键KEY2连接在PC1引脚、按键KEY3连接在PC2引脚、按键KEY4连接在PC3引脚、LED 灯接在的是PC13 引脚。
读取按键状态,当为低时说明此时按下按键,当 PC13 输出为高的时候点亮 LED 灯。
因此我们在 Pinout 配置界面先设置使用外部晶振,在 RCC 下面将高速时钟和低速时钟都设置为 Crystal/Ceramic Resonator,然后单击PC13 引脚设置为 GPIO_Output 模式,PC0引脚、PC0引脚、PC0引脚和PC0引脚设置为GPIO_Iutput 模式。
在 SYSTEM 一栏里点击 GPIO 进入设置,具体如下:
第三步:配置时钟。按照自己的工程要求配置时钟,本次以自动设置为例,直接将最后的频率设置为 80MHz(确定后电机回车),STM32CubeMX 会自动设置。
第四步:配置生成代码的一些配置。在 Project 界面设置本工程名称,选择按照什么开发工具生成项目工程,这里我们使用的是 MDK5。注意:工程名称最好不要是中文。
在这个界面中还需要配置的是 Code Generator,这一栏中将“Generate peripheral initialization as a……”选中,这样生成的工程会把使用的资源(IIC、SPI、USART、GPIO 等)初始化代码分别放在对应名字的单独的.c 文件中,方便我们自己增删改查使用。
第五步:点击上面的 OK 生成工程代码。 生成工程代码成功后,可以选择打开工程目录或者直接打开工程。
选择打开工程目录。可以看到工程目录分为两个部分,一个是 MDK5 的工程目录,一个是 STM32CubeMX 的工程。STM32CubeMX 工程文件还可以用 STM32CubeMX 打开提供增加或者删除、修改本工程,非常方便。(工程目录结构及文件的具体解析见控制LED灯闪烁(NB-IoT项目实战专栏—4)3.2部分)
第一步:找到 GPIO 接口。在 main.c 文件中可以看到,工程文件首先重置所有外设,初始化 Flash 接口和 Systick,然后配置初始化了系统时钟,再配置初始化了 GPIO(按键和LED),初始化函数在 gpio.c 文件里,剩下的我们就可以直接写自己需要的应用了,这里我们想做的事情是按键联动控制LED亮/灭状态。
由于 HAL 库是封装的比较好的,因此我们不需要和底层的寄存器打交道,只需要利用外设库提供的接口即可,我们想点亮 LED 灯闪烁就是让对应的引脚拉低拉高,打开 stm32l4xx_hal_gpio.h 中接口函数。
打开步骤为:
第二步: 编写程序,使用按键联动控制LED灯的亮灭状态
这里将使用三个GPIO函数:
HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState),功能是设置拉高还是拉低某个引脚,函数各个参数说明如下:
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin),功能是读取指定的输入端口的引脚,函数各个参数说明如下:
HAL_Delay(uint32_t Delay),功能是延时单位毫秒,函数各个参数说明如下:
将这三个函数名复制到 main.c 文件的 while 下面的 USER CODE BEGIN 3 和 USERCODE END 3 中间。
根据函数参数说明提示和类型,设置函数中的参数,实现按键控制LED等的亮/灭状态,具体代码如下:
第三步: 编译程序,确保无误。
将NB-IoT实验版供电,插上烧写器,配置烧写参数,设置使用 ST-LINK 下载,设置好下图参数,点击下载程序。
最终实现实时检测按键状态,联动控制LED灯亮/灭状态功能,此处省略效果图。
第一步:双击打开 STM32CubeMX,点击新建工程,在 MCU 选型框里输入 STM32L431RC,右侧选择芯片封装为 LQFP 的型号,双击进入。
第二步:参照原理图配置GPIO。
看到 STM32L431RC MCU有高速和低速外部晶振,按键KEY1连接在PC0引脚、按键KEY2连接在PC1引脚、按键KEY3连接在PC2引脚、按键KEY4连接在PC3引脚、LED 灯接在的是PC13 引脚。
读取按键状态,当为低时说明此时按下按键,当 PC13 输出为高的时候点亮 LED 灯。
因此我们在 Pinout 配置界面先设置使用外部晶振,在 RCC 下面将高速时钟和低速时钟都设置为 Crystal/Ceramic Resonator,然后单击PC13 引脚设置为 GPIO_Output 模式,PC0引脚、PC1引脚、PC2引脚和PC3引脚设置为外部中断模式。
在 SYSTEM 一栏里点击 GPIO 进入设置,具体如下:
第三步:配置时钟。按照自己的工程要求配置时钟,本次以自动设置为例,直接将最后的频率设置为 80MHz(确定后电机回车),STM32CubeMX 会自动设置。
第四步:配置生成代码的一些配置。在 Project 界面设置本工程名称,选择按照什么开发工具生成项目工程,这里我们使用的是 MDK5。注意:工程名称最好不要是中文。
在这个界面中还需要配置的是 Code Generator,这一栏中将“Generate peripheral initialization as a……”选中,这样生成的工程会把使用的资源(IIC、SPI、USART、GPIO 等)初始化代码分别放在对应名字的单独的.c 文件中,方便我们自己增删改查使用。
第五步:点击上面的 OK 生成工程代码。 生成工程代码成功后,可以选择打开工程目录或者直接打开工程。
选择打开工程目录。可以看到工程目录分为两个部分,一个是 MDK5 的工程目录,一个是 STM32CubeMX 的工程。STM32CubeMX 工程文件还可以用 STM32CubeMX 打开提供增加或者删除、修改本工程,非常方便。(工程目录结构及文件的具体解析见控制LED灯闪烁(NB-IoT项目实战专栏—4)3.2部分)
第一步:找到 GPIO 接口。在 main.c 文件中可以看到,工程文件首先重置所有外设,初始化 Flash 接口和 Systick,然后配置初始化了系统时钟,再配置初始化了 GPIO(按键和LED),初始化函数在 gpio.c 文件里,剩下的我们就可以直接写自己需要的应用了,这里我们想做的事情是按键外部中断联动控制LED亮/灭状态。
由于 HAL 库是封装的比较好的,因此我们不需要和底层的寄存器打交道,只需要利用外设库提供的接口即可,我们想点亮 LED 灯闪烁就是让对应的引脚拉低拉高,打开 stm32l4xx_hal_gpio.h 中接口函数。
打开步骤为:
第二步: 编写程序,使用按键联动控制LED灯的亮灭状态
这里将使用两个GPIO函数:
HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState),功能是设置拉高还是拉低某个引脚,函数各个参数说明如下:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin),功能是外部中断回调函数,函数各个参数说明如下:
将这两个函数名复制到 gpio.c 文件的 GPIO配置 下面的 USER CODE BEGIN 2和 USER CODE END 2 中间。根据函数参数说明提示和类型,设置函数中的参数,实现按键控制LED等的亮/灭状态,具体代码如下:
第三步: 编译程序,确保无误。
将NB-IoT实验版供电,插上烧写器,配置烧写参数,设置使用 ST-LINK 下载,设置好下图参数,点击下载程序。
最终实现按键外部中断检测,联动控制LED灯亮/灭状态功能,此处省略效果图。
基础实验:STM32控制OLCD显示中英文(NB-IoT项目实战专栏—6)