蓝桥杯嵌入式-HAL库-新建工程

实验目的

1、学会新建STM32CubeMX工程
2、学会Keil软件的使用
2、感受STM32的魅力

按键实验示例

一、新建STM32CubeMX工程

1、打开软件,进入软件主界面,如图1所示。(注:可以点击“Home”进入主界面)

在这里插入图片描述
图1

2、点击图1中的“ACCESS TO MCU SELECTOR”
3、点击后,可能出现图2,也可能不出现图2,直接出现图3。

在这里插入图片描述

图2
4、点击“Cancel”,出现图3

在这里插入图片描述

图3
5、在“Part Number”搜索框中输入芯片型号,出现②,双击具体的芯片型号(如:“STM32G431RBTx”)(或者点击Start Project),如图4所示

在这里插入图片描述

图4
6、进入配置界面,如图5所示

在这里插入图片描述

图5
7、新建一个文件夹,用来存放工程文件,如“template”,点击软件右上角的“File”—“Save Project”,得到一个ioc文件,如图6所示

在这里插入图片描述

图6
8、配置时钟树
8.1在“Pinout & Configuration”中,点击“System Core”—“RCC”, HSE选择“Crystal/Ceramic Resonator”,如图7所示。

在这里插入图片描述

图7
8.2 点“Clock Configuration”,晶振频率设置为“8”M,“PLLM”设置为“/2”,“*N”设置为“X 20”,得到80M的频率,如图8所示

在这里插入图片描述

图8
9、配置“Project Manager”。如图9所示。
9.1设置工程名“Project Name”,如:“KEY”。
9.2 Project Location(工程存放路径)。点击“Browse”选择工程存放路径(可使用默认路径)。9.3“Application Structure”(应用程序结构)选择“Basic”。
9.4“Toolchain/IDE”(工具链选择)选择“MDK-ARM”/“MDK-ARM V4”/“MDK-ARM V4”(根据KEIL MDK的版本进行选择)。
9.5“Use Default Firmware Location”(使用默认固件包) 这里勾选上就会根据系统进行默认匹配固件包,一般建议默认。当然,不勾选,可以自己选择指定固件包。

在这里插入图片描述

图9
10、引脚配置。
10.1在Pinout & Configuration”中,点击“System Core”—“GPIO”,打开“Pinout view”(默认已打开)。如图10所示。

在这里插入图片描述

图10
10.2 点击需要设置的引脚,如:PC13。会出现引脚功能,选择需要的功能,如:GPIO_Output。设置完成后,引脚会变成绿色。如图11所示。

在这里插入图片描述

图11
10.3 设置引脚相关参数。如图12所示。
双击所要设置的引脚这一栏,然后对引脚进行设置。
例如:设置PC8为低电平(Low)、推挽输出(Output Push Pull)、无上下拉(No pull-up and no pull-down)、低速(Low)、不设置引脚别名(空着不设置)
输入引脚:
GPIO mode:设置输入模式。默认为Input mode
GPIO Pull-up/Pull-down:设置上下拉模式。分为上拉(Pull-up)、下拉(Pull-down)、无上下拉(No pull-up and no pull-down),根据需要,选择不同的上下拉模式。自己查下资料,GPIO上下拉的区别与用法。(后面我再整理)
输出引脚:
GPIO output level:设置GPIO的高/低电平。结合电路图设置高/低电平。
GPIO mode:设置输出模式。分为推挽输出(Output Push Pull)和开漏输出(Output Open Drain)。自己查下区别和用法。(后面我再整理)
GPIO Pull-up/Pull-down:同输入引脚的GPIO Pull-up/Pull-down
Maximum output speed:设置GPIO的速度。分为低速(Low)、中速(Medium)、高速(High)、超高速(Very High)。自己查下区别和用法。(后面我再整理)

在这里插入图片描述

图12
11、生成代码。如图13所示。
点击“GENERATE CODE”

在这里插入图片描述

图13
12、打开工程。
12.1点击“Open Project”,打开工程。(点击“Open Folder”,即打开工程所在的文件夹)如图14所示。

在这里插入图片描述

图14
12.2 打开工程后,如图15所示。

在这里插入图片描述

图15

二、MDK设置

1、点击“魔术棒”,弹出新界面,如图16所示。

在这里插入图片描述

图16
2、点击“Debug”,点击下拉框,选择赛方提供的仿真器(仿真器的作用:下载并调试代码),如:CMSIS-DAP Debugger。如图17所示。

在这里插入图片描述

图17
3、点击“Settings”,弹出另一个界面,如图18所示。

在这里插入图片描述

图18
4、点击“Flash Download”,勾选“Rest and Run”,使得程序下载到单片机中后自动运行(如果不勾选,需要按下单片机的复位键运行程序)。,如图19所示。

在这里插入图片描述

图19
5、已设置完毕,关闭设置界面。
点击“Cortex-M Target Driver Setup”界面中的“OK”,再点击“Options for Target‘KEY’” 界面中的“OK”。如图20所示。

在这里插入图片描述

图20

三、编译、擦除、下载

1、编译。
1.1点击编译工程的图标,如图21所示。(注:编译过程中:图标是“灰色的”)

在这里插入图片描述

图21
1.2 编译完成,如图22所示。0错误表示程序没有问题(有警告也没事)。

在这里插入图片描述

图22
2、擦除。擦除单片机中的程序。
2.1 将仿真器的一端插到电脑的USB口上,另一端连接单片机的下载端口(CN2)。如图23所示。(注:擦除或下载程序,都需要连接单片机和电脑)

在这里插入图片描述

图23
2.2 点击“Flash”,再点击“Erase”,如图24所示。

在这里插入图片描述

图24
2.3 擦除完成。如图25所示。

在这里插入图片描述

图25
3、下载。将程序下载到单片机中。
3.1点击下载图标进行下载,如图26所示。

在这里插入图片描述

图26
3.2 下载完成,如图27所示。

在这里插入图片描述

图27

四、编写代码

1、打开卖家提供的实验程序,将实验程序的关键代码,复制粘贴到自己新建工程的对应位置中。如图28所示

在这里插入图片描述

图28
2、编译、擦除、下载(编译、擦除顺序可互换)

五、程序与原理图分析

1、原理图分析
1.1 LED指示灯(二极管),如图29所示。

在这里插入图片描述

图29
由LED指示灯原理图可知,8个LED指示灯LD1LD8分别对应PC8PC15。LED灯左边连接(并联)VDD,右边最后连接到单片机的8个引脚PC8~PC15。
当PC8为低电平时,LED灯两端存在电压差,电流从二极管的阳极流向阴极,从而LED指示灯亮。
当PC8为高电平时,LED灯两端不存在电压差,二极管两端无电流,从而LED指示灯灭。
1.2 按键,如图30所示。

在这里插入图片描述

图30
由按键原理图可知,B1对应PB0,B2对应PB1, B3对应PB2,B4对应PA0。
按键未被按下时,GPIO引脚的输入状态为高电平;按键按下时,GPIO引脚的输入状态为低电平;
2、程序分析
2.1根据main.c程序可知,B1、B2、B3、B4分别控制(LD1和LD2)、(LD3和LD4)、(LD5和LD6)、(LD7和LD8)。当按键按下时,GPIO引脚的输入状态为低电平,HAL_GPIO_ReadPin函数读取到按键的低电平,函数返回值为0,与GPIO_PIN_RESET(相当于0)相等,执行对应的语句,对应的两个灯亮,PD2先不锁存数据,后锁存数据,使得灯一直亮着。蓝桥杯电子类的实训指导书上指明:锁存器的使能端与PD2相连,低电平时锁存数据(锁存器输出不随输入变化),高电平时不锁存数据(锁存器输出随输入变化)。如图31~32所示。

在这里插入图片描述

图31

在这里插入图片描述

图32

void SystemClock_Config(void); //配置时钟系统
static void MX_GPIO_Init(void); //初始化引脚相关配置
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, GPIO_PIN_SET);//使得GPIOC组的所有引脚输出高电平(GPIO_PIN_SET相当于1),即8个LED指示灯LD1~LD8全部熄灭
HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0);//读取PB0的输入状态的电平,即按键被按下
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8 | GPIO_PIN_9, GPIO_PIN_RESET);//使得PC8和PC9输出低电平(GPIO_PIN_RESET相当于0),即使得2个LED指示灯LD1~LD2亮
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);//使得PD2输出高电平,即不锁存数据
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);//使得PD2输出低电平,即锁存数据

while(1){ }:让单片机一直运行
其他代码自己上网搜下吧,比如void SystemClock_Config(void); //配置时钟系统
static void MX_GPIO_Init(void); //初始化引脚相关配置 两个函数具体的定义中每条语句的含义。
注:图31~32的代码需要自行编写,STM32CubeMX软件不能直接生成那些逻辑代码,本实验的其他代码是由STM32CubeMX软件生成的。因此在时钟系统配置和引脚配置上,STM32CubeMX软件极大地减轻了开发人员的负担。

六、实验现象

烧录按键的程序后,8个LED灯全灭。
按下B1,LD1和LD2亮,之后按下其他按键,LD1和LD2依然保持亮的状态(以此类推);
按下B2,LD3和LD4亮(加上LD1和LD2,一共4个指示灯亮);
按下B3,LD5和LD6亮(加上LD1、LD2、 LD3和LD4,一共6个指示灯亮);
按下B4,LD7和LD8亮(加上LD1、LD2、 LD3、LD4 、LD5和LD6,一共8个指示灯全亮);
当然,按下按键的顺序随意调换。按下B1和B4时,LD1、LD2、LD7和LD8亮,实验效果如图33所示。

在这里插入图片描述

图33

七、总结

该实验只使用到了GPIO,难度小。大家可以在此基础上改编代码,实现新功能。

蓝桥杯嵌入式-HAL库-LED_TEST

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaolan@

亲,打赏随意

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值