蓝桥杯STM32自学记录:GPIO输出与LED控制
前言
笔记是人类的第二大脑,以前的我也总是在记录上所懈怠,遇到不会的就csdn cv 一顿操作,始终不得其内涵。从这个赛事开始,我来学习大佬在嵌入式上的理解,自己做好每次记录,辅助记忆的同时也能亲手过一次知识与项目。希望能在赛事上大放光彩!
一、IO口常用函数
HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)——读电平状态
HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState)——写电平状态
HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)——转换电平状态HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)——锁电平状态
二、LED原理图
LD1——PC8
LD2——PC9
以此类推
PD2——锁存器
三、配置STM32Cubemx
选芯片
ACCESS TO MCU SELECTOR
选STM32G431RBT6
配置时钟树
配置引脚
一、RCC配置
二、GPIO口配置
设置输出端口
配置LED所对应的GPIO口为输出模式(GPIO_Output)——PC8-PC15
注意:查看原理图得知PD2为锁存器,也要设置成输出模式(GPIO_Output)
设置输出模式
知识点:
默认电平:观察电路图,左侧有VDD。默认为high时电势相同,电流不流通,熄灭;low时亮灯。
锁存器:需要是有效电平,才能让PCx引脚工作
LED的使用时注意亮的时间,太短人眼无法观察。
疑惑点:
1、为何是开漏输出
2、锁存器的有效电平如何判断
四、工程配置
生成文件!(GENERATE CODE)
五、keil5的魔术棒设置
魔术棒——Debug——CMSIS——Settings——flash download——reset and run (程序烧录进单片机自动复位运行)
六、模块化函数操作
在inc文件夹里创建.h文件
在src文件夹里创建.c文件
把.c文件加入项目中
LED的c文件,h文件示例
LED.c代码
#include "LED.h"
void LED(int num,int state) //num£º1-8 state£º0/1
{
int pin;
switch(num)
{
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(state==0) HAL_GPIO_WritePin(GPIOC, pin, GPIO_PIN_SET);
if(state==1) HAL_GPIO_WritePin(GPIOC, pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);//Ëø´æÆ÷¿ªÆô
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);//Ëø´æÆ÷¹Ø±Õ
}
LED.h代码
#ifndef __LED_H
#define __LED_H
#include "main.h"
void LED(int num,int state);
#endif