赞
踩
蓝桥杯STM32 G431 hal库开发速成——GPIO输出——LED
1.HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)——用于读取指定GPIO引脚的电平状态。
2.HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)——手动写入GPIO引脚的高低电平。
3.HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)——用于切换指定GPIO引脚的电平状态。
R7——LD1——PC8 (PC8控制LD1)
R8——LD2——PC9 (PC9控制LD2)
R9——LD3——PC10(PC10控制LD3)
.
.
.
以此类推!
首先进入STM32CUBEMX软件点击 ACCESS TO MCU SELECTOR ——选择芯片型号为STM32G431RBTx(为比赛板子芯片型号)
第一步选择Clock Configuration进入时钟树配置
第二步点击HCLK,将其设置为蓝桥杯要求的80MZ,并按下回车完成配置
点击RCC配置外部晶振(crystal/ceramic resonator)
RCC——就像人的心跳,不管配置什么都需要开启RCC时钟!
1.首先对GPIO引脚进行输出配置,根据LED原理图将PC8-PC15配置为输出模式,注意因为LED原理图中有锁存器,所以还需要对锁存器进行配置,将PD2配置为输出模式(易忘!)
2.第二步需要将这几个GPIO口和锁存器口配置为高电平,若配置低电平则一上电,灯就亮了。
3.锁存器
由锁存器的知识可知,PD2引脚需要是有效电平,才能让PCx引脚工作,如图可得,PD2需要输入高电平(即1)。
Project Name:配置文件的文件名(不能含有中文路径,不能重复命名)
Project Location:选择文件上级所在位置
Code Generator中点击红色箭头的位置为不同的功能生成单独的.c/.h文件,不点则全生成点击在main函数前面+号后的文件里,若点,可以在Application/User/Core中找到。建议点一下,可以让代码看起来更模块化!
Advanced Settings 中把所有的Visibility全勾上,然后创建代码(GENERATE CODE)
箭头指向的就是魔术棒,点击魔术棒
1.点击Debug,2.选择CMSIS,3.点击Settings
1.点flash download,2.勾选reset and run 程序烧录进单片机自动复位运行,单片机即可立即产生效果,否则需要手动按下复位按钮。
1.在CubeMX生成的工程中编写程序时需要保证代码是写在规定区域内的,否则更新初始化时会被删除。
2.需要包含的头文件建议写在begin includes—end includes之间。
3.子函数建议写在code begin 0—end 0之间,main函数里建议写在初始化后的begin 2 end 2及while(1)中的begin3 end3之间。
点击左下方project栏–>Drivers–>stm32g4xx_hal_gpio.c–>stm32g4xx_hal_gpio.h打开,从下往上翻,找到三个常用的库函数,右击函数,找到GO TO DEFINITION,就可以跳转stm32g4xx_hal_gpio.c。就能这三个I/O口功能函数的详细函数内部以及使用方法。
brief是说明,param是参数说明
将点灯的代码放到code begin 0—end 0之间
在mian函数中进行调用
先点击编译,再点击烧录
你人生中的第一个led灯就点亮了!!!
将点灯代码进行封装,可以让代码看起来不乱,知道每一个部分确切的是干什么的,非常重要的编程习惯!
1.在inc文件夹里创建头文件
2.在 src文件夹里创建.c文件
3.把led.c文件加入项目中
4.进入keil5就可以看到led.c
5.已经添加了led.c到项目中,那现在是不是也需要添加led.h呢?
答案是不需要的!我们是将led.h增加到…/Core/Inc路径下的,而环境中本身就有…/Core/Inc路径。
6.在led.c文件中写入代码
#include "led.h" void led(int x,int a) //x:1-8 对应8个灯 a:1开 0灭 { int pin; switch(x) { case 1:pin=GPIO_PIN_8;break; case 2:pin=GPIO_PIN_9;break; case 3:pin=GPIO_PIN_10;break; case 4:pin=GPIO_PIN_11;break; case 5:pin=GPIO_PIN_12;break; case 6:pin=GPIO_PIN_13;break; case 7:pin=GPIO_PIN_14;break; case 8:pin=GPIO_PIN_15;break; } if(a==0) HAL_GPIO_WritePin(GPIOC, pin, GPIO_PIN_SET); if(a==1) HAL_GPIO_WritePin(GPIOC, pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);//开关一次锁存器,对led的配置才有效 HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);//开关一次锁存器,对led的配置才有效 }
7.打开led.h:右击led.c文件中#include “led.h”,然后点击箭头所指
8.led.h中的代码
#include "main.h"
void led(int x,int a);
9.主函数中调用
首先包含头文件
调用led函数
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。