用STM32F103C8T6点亮一组由3个不同色的LED组成的流水灯,以及用它的中断原理点亮两个LED灯(HAL库方式)【STM32开发板】【STM32CubeMX】

用STM32F103C8T6点亮一组由3个不同色的LED组成的流水灯,以及用它的中断原理点亮两个LED灯(HAL库方式)【STM32开发板】【STM32CubeMX】

HAL库方式的开发环境搭建——STM32CubeMX

安装JDK

STM32CubeMX是Java实现的,因此需要安装jdk环境。

jdk官网下载链接:https://www.oracle.com/java/technologies/javase-downloads.html

安装STM32CubeMX

下载地址:https://www.st.com/zh/development-tools/stm32cubemx.html

安装过程:

  1. 下载完成后解压,得到安装程序。
  2. 以管理员身份运行安装程序。进入程序界面后点击 “Next”。
  3. 在License agreement界面,勾选"I accept the terms of this license agreement",点击 “Next”。
  4. 选择安装位置,默认位置是安装在C盘中(注意:安装路径不要出现中文)。选择完成后点击 “Next”。若你的电脑没有这个安装路径,程序会提示“将创建此路径”,点击“确定”即可。
  5. 在Shortcuts Setup界面,保持默认设置,点击 “Next”。
  6. 开始安装。安装结束后点击 “Next”,接着点击 “Done” 即完成安装。

安装STM32F1的STM32CubeMX固件库

下载地址:https://www.st.com.cn/zh/embedded-software/stm32cube-mcu-mpu-packages.html

在产品选择器中选择 “STM32CubeF1”,点击 “Open software page”,点击“获取软件”选择某一版本下载即可(尽量选择最新版本)。

安装过程:

  1. 运行STM32CubeMX,点击 “Help”,点击 “Manage embedded software packages”。
  2. 弹出窗口后点击左下角的 “From Local…”,找出下载好的固件库选中并打开。
  3. 等待固件库安装完成。若安装的固件库版本在弹窗中显示前面方框绿色,说明安装成功。

点亮一组由3个不同色的LED组成的流水灯

实验说明

本次实验选择PA15, PB0, PC13作为输出端口,默认输出电平为高。

在STM32CubeMX中建立并配置项目

点击 “File” -> “New Project”,选择芯片STM32F103C8,点击 “Start Project” 即建立项目。

在Pinout & Configuration界面中,点击GPIO设置端口。点击PA15端口,选择GPIO_Output即将PA15端口设置为输出,如下图。用同样的方法设置PB0, PC13端口为输出。

在这里插入图片描述

再将三个端口的默认输出电平设置为高,如下图。

在这里插入图片描述

点击SYS,选择Debug(调试)类型为Serial Wire(串行线),如下图。

在这里插入图片描述

点击RCC,选择High Speed Clock(高速时钟)模式为Crystal/Ceramic Resonator(晶振),如下图。

在这里插入图片描述

在Clock Configuration界面中,设置System Clock Mux为PLLCLK,如下图。

在这里插入图片描述

在Project Manager界面中,设置好项目名、项目位置,选择IDE为MDK-ARM(版本选择电脑上安装的版本),选择在网上下载并安装好的固件库,如下图。

在这里插入图片描述

点击Code Generator,勾选 “Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral”,如下图。

在这里插入图片描述

最后,点击 “Generate Code”,即可创建Keil项目并打开。

在Keil中编写程序和配置项目

在主函数 (main.c) 中找到 while(1) (注意:不是Error_Handler函数中的while(1)),在 while(1) 中写入以下程序:

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);  // 灯1亮
HAL_Delay(1000); // 延时1s
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);  // 灯1灭
	  
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);  // 灯2亮
HAL_Delay(1000); // 延时1s
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);  // 灯2灭
	  
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);  // 灯3亮
HAL_Delay(1000); // 延时1s
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);  // 灯3灭

由于STM32CubeMX在创建项目时就勾选了 “Create HEX File”,输入代码后直接点击“编译”即可生成hex文件。

STM32开发板实现

如下图所示,将STM32开发板插入面包板并与ST-link连接(相接的两接口应同名),分别用导线将开发板两侧的3.3V输出接至面包板两侧的正极槽、接地输入接至面包板两侧的负极槽。将一个红色LED接在开发板的B0接口上,具体做法是将正极(长管脚)接至正极槽,负极(短管脚)接至开发板B9接口所接在的一槽。用同样的方法将一个绿色LED接在开发板的A15接口上,将一个蓝色LED接在开发板的C13接口上。

在这里插入图片描述

代码在Keil中编译完成后,点击“下载”,即可将代码载入STM32单片机中并开始运行。运行结果如下。

在这里插入图片描述

Keil波形图

第一行(红色)是B0端口(红灯),第二行(绿色)是A15端口(绿灯),第三行(黑色)是C13端口(蓝灯)。三个端口的电平都是低电平1s—高电平2s的循环,只是在第1个周期内,第一行在第1s时为低电平,第二行在第2s时为低电平,第三行在第3s时为低电平。

在这里插入图片描述

用STM32的中断原理点亮两个LED灯

实验说明

本次实验选择PA4, PA6作为输出端口,默认输出电平为低;PB3, PB5作为外部中断端口,当电平升/降时中断。PB3控制PA4,PB5控制PA6。

在STM32CubeMX中建立并配置项目

点击 “File” -> “New Project”,选择芯片STM32F103C8,点击 “Start Project” 即建立项目。

在Pinout & Configuration界面中,点击GPIO设置端口。点击PA4端口,选择GPIO_Output即将PA4端口设置为输出。用同样的方法设置PA6端口为输出。点击PB3端口,选择GPIO_EXTI3即降PB3端口设置为外部中断,如下图。用同样的方法设置PB5端口为外部中断。

在这里插入图片描述

再将PB3, PB5两个端口的GPIO mode设置为 “External Interrupt Mode with Rising/Falling edge trigger detection”,如下图。

在这里插入图片描述

点击NVIC,勾选 “EXTI Line3 Interrupt” 和 “EXTI Line[9:5] Interrupts”,如下图。

在这里插入图片描述

点击SYS,选择Debug(调试)类型为Serial Wire(串行线)。

点击RCC,选择High Speed Clock(高速时钟)模式为Crystal/Ceramic Resonator(晶振)。

在Clock Configuration界面中,设置System Clock Mux为PLLCLK。

在Project Manager界面中,设置好项目名、项目位置,选择IDE为MDK-ARM(版本选择电脑上安装的版本),选择在网上下载并安装好的固件库。

点击Code Generator,勾选 “Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral”。

最后,点击 “Generate Code”,即可创建Keil项目并打开。

在Keil中编写程序和配置项目

在stm32fixx_it.c中找到HAL_GPIO_EXTI_IRQHandler,右击选择 “Go to Definition of ‘HAL_GPIO_EXTI_IRQHandler’”,跳转至HAL_GPIO_EXTI_IRQHandler的定义部分。往下找到HAL_GPIO_EXTI_Callback这个函数,在此函数中写入以下程序:

if(GPIO_Pin == GPIO_PIN_3){
	//获取B3的电位
	GPIO_PinState pinState1 = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_3);

	//低电位
	if(pinState1 == GPIO_PIN_RESET)
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);//把A4变为低电位
	//高电位
	else
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//把A4变为高电位
}
		
if(GPIO_Pin == GPIO_PIN_5){
	//获取B5的电位
	GPIO_PinState pinState2 = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5);

	//低电位
	if(pinState2 == GPIO_PIN_RESET)
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_RESET);//把A6变为低电位
	//高电位
	else
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_SET);//把A6变为高电位
}

由于STM32CubeMX在创建项目时就勾选了 “Create HEX File”,输入代码后直接点击“编译”即可生成hex文件。

STM32开发板实现

如下图所示,将STM32开发板插入面包板并与ST-link连接(相接的两接口应同名),分别用导线将开发板两侧的3.3V输出接至面包板两侧的正极槽、接地输入接至面包板两侧的负极槽。将一个红色LED接在开发板的A4接口上,具体做法是将正极(长管脚)接至正极槽,负极(短管脚)接至开发板B5接口所接在的一槽。用同样的方法将一个绿色LED接在开发板的A6接口上。再将一根红色导线的一端接至开发板B3接口所在的一槽。用同样的方法将一根绿色导线的一端接在开发板的B5接口上。实验时将某一根导线的另一端接高电平或低电平,观察对应灯的亮灭变化;再将该导线从高电平或低电平端拔出,观察对应灯的亮灭变化。

在这里插入图片描述

代码在Keil中编译完成后,点击“下载”,即可将代码载入STM32单片机中并开始运行。运行结果如下。

红灯/红导线:

在这里插入图片描述

绿灯/绿导线:

在这里插入图片描述

Keil波形图

(波形图内改变中断端口电平的操作未知,故暂缺)

总结

本次实验学习了使用HAL库方式,在STM32CubeMX建立项目和生成Keil项目并编写程序的方法。使用该方式明显比使用GPIO标准库的方式简便得多。

  • 26
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值