这是一条完全没有|

Yang-blackSun

园龄:2年3个月粉丝:0关注:3

[置顶] 03按键控制LED

上回讲到点亮一个LED
    这次我们来实现用按键控制led 不带中断的方式 当然实例来源网络 加上自己整合 先熟悉流程

0.添加一个自己写的驱动库文件

    为什么添加 笔者想的是一个项目工程希望能适应很多个应用场景需要什么直接在里面调用分装好的函数就行

1.如何添加文件以及编写驱动后编译

    用上回案例讲到的实例工程添加一个Hardware文件夹 :
img

img
img
img
img

1.封装LED库函数

     Led.C 引脚按需配置

#include "stm32f10x.h" // Device header
// LED 初始化
void LED_Init(void){
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStruct);
// 初始化 置1
GPIO_SetBits(GPIOC,GPIO_Pin_13);
}
void LED_ON(void){
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
}
void LED_OFF(void){
GPIO_SetBits(GPIOC,GPIO_Pin_13);
}
// 高低电平反转
void LED_Turn(void)
{
if(GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_13)==0)
{
GPIO_SetBits(GPIOC,GPIO_Pin_13);
}
else
{
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
}
}

Led.h

#ifndef __LED_H
#define __LED_H
void LED_Init(void); // led 引脚初始化
void LED_ON(void); // led 开
void LED_OFF(void); // led 关
void LED_Turn(void); // led 反转
#endif

2.封装Key函数库

    和上步相同
Key.c

#include "stm32f10x.h" // Device header
#include "Delay.h"
// 初始化接地按键
void Key_Init(void){
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_12;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct);
}
uint8_t Key_GetNum(void){
uint8_t Key_Num = 0;
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)== 0){
Delay_ms(20);
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)== 0);
Delay_ms(20);
Key_Num = 1;
}
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)== 0){
Delay_ms(20);
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)== 0);
Delay_ms(20);
Key_Num = 2;
}
return Key_Num;
}

key.h

#ifndef __KEY_H
#define __KEY_H
void Key_Init(void);
uint8_t Key_GetNum(void);
#endif

编写功能需求

main.c

#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "LED.h"
#include "Key.h"
uint8_t KeyNum;
uint8_t StaNum=0;
int main(void)
{
LED_Init();
Key_Init();
while (1)
{
KeyNum = Key_GetNum();
if (KeyNum == 1)
{
LED_Turn();
}
}
}

现象就是按一下按键led pc13状态反转一次

img
编译下载看现象
img
img
这里的项目配置不要出错

20
0
0
stm32cubemx+VSCODE+GCC+makefile 开发环境搭建
摘要: title: stm32cubemax+VSCODE+GCC+makefile 开发环境搭建 tags: Freertos Hal stm32cubeMx @目录 内容往期内容导航第一步准备环境vscode 插件插件配置点灯 内容 往期内容导航 第一步准备环境 STM32CubeMX VSCODE
185
3
0
学习笔记大导航
摘要: @目录个人B站主页页面导航方便你我HAL+ stm32cubemx + VSCODE + GCCESPPYthon ?网页?ROS?视觉学习 TensorFlow问题收集类解决类基础库无线模块??笔记记录分享 个人B站主页 页面导航方便你我 HAL+ stm32cubemx + VSCODE + G
8
0
0
这是一个关于测试vscode里面写笔记上传到博客园的笔记
摘要: 确实博客园的优化程度感觉比csdn好
1
0
0
关于opencv 不能在图片上显示中文字符的解决办法 已解决
摘要: 代码来源于网络 import cv2 import numpy as np from PIL import ImageFont, Image, ImageDraw INFER_PATH = "./work/infer_license.png" img = cv2.imread(INFER_PATH)
46
0
0
stc32 学习记录 1
摘要: 感觉自己的指针没有学好啊逻辑性也不强所以做简单的伪代码笔记记录一下stc32的学习历程 字符串比较 //字符比较 //str1 是母字符串 str2是子字符串 Str2在 Str1里面遍历 //如果遍历到了返回就是地址 就不为空,没有就返回NULL char* strstr( char* str1,
8
0
0
MODBUS_RUT_粗学习
摘要: ADU :应用数据单元 PDU: 协议数据单元 地址码:1个字节的从机地址码,=0:广播地址,=1-247:从机地址,=248-255:保留 功能码:常用的就是01、02、03、04、05、06、15、16,具体描述见下图 数据区:数据区包含这么几部分:起始地址、数量、数据,这三项是大端模式(在大端
15
0
0
ROSkinetict仿真
摘要: kinetic传感器?? 3D深度相机 RGBD深度摄像头简介 深度相机就是可以获取场景中物体距离摄像头物理距离的相机 目前RGBD深度摄像头获取深度图像的方法主要有立体视觉,激光雷达测距和结构光三大类。 立体视觉 立体视觉。获取深度信息,指的是通过获取同一场景不同视角的多张图像,利用图像的匹配和一
13
0
0
VTK 学习
摘要: 最简单的和数据交互的方法是创建该类的对象实例,该类提供了一些预定义的事件和行 为,该类允许我们控制相机和 Actors,并且提供了操纵杆模式和跟踪球模式两种交互类型。 该类对绘制窗口的如下事件作出响应: 压下键盘 j/t 键,在操纵杆和跟踪球交互类型间切换。 压下键盘 c/a 键, 在相机和 Act
41
0
0
RTK 学习记录
摘要: RF A39-T400A30D1a开发使用记录 MD0 MD1 高电平 1 空接就行 0 0 配置模式 9600 波特率 配置模式下两脚 MD1 MD0 接地 1 0 一般工作模式 1 1 低功耗 透明广播 工作模式设置为透明传输 通信信道本地组号[目标组号] 本地地址[目标地址] RSSI信号强度
20
0
0
点击右上角即可分享
微信分享提示
🚀
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.
深色
回顶
收起