嵌入式蓝桥杯学习1 点亮LED

  cubemx配置

1.新建一个STM32G431RBT6文件

2.在System-Core中点击SYS,找到Debug(设置为Serial Wire)

3.在System-Core中点击RCC,找到High Speed Clock(设置为Crystal/Ceramic Resonator)

4.打开Clock Configuration (时钟树配置),将左侧的Input frequency改为24(要将PLL改为HSE才能改),将HCLK(MHz)设置为80,设置完后按回车会自动配置时钟树。

45fc01a1d0394d6c9b40feeab03879d9.png

上述为系统内部配置,下面配置使用到的GPIO引脚。

LED使用的引脚为PC8-PC15.

1.将PC8-PC15的引脚都设置为GPIO_Output。

2.将PD2设置为GPIO_Output。

f05cd6fb3b88499d87786e6d767cdaff.png

在System-Core中点击GPIO,将PC8-PB15全选中,对输出选项进行配置。

GPIO output level (初始电平) :High(初始化为高电平,使所有LED熄灭)

GPIO mode(输出模式):Output Push Pull (选择推挽输出)、

GPIO Pull-up/Pull-down(上拉/下拉):No pull-up and no pull-down(不需要上下拉)

Maximum output speed(速度):Low(低速节能,PC14和PC15只能选择低速)

eb2d8b22b86f4ab89bb9c06de55f72e8.png

点击Project Manager

1.Project name(文件名)(不要有中文)

2.Project Location (文件路径):选择没有中文路径的。

3.Toolchain /IDE:MDK-ARM

点击Code Generator ,在STM32Cube MCU packages and enbedded software packs中选择Copy only the necessary library files (复制必要的库文件,可以大幅度减少工程体积);勾选Generated files 中的Generated peripheral initialization as a pair of '.c/.h' files per peripheral.

ca0e5aff27014da5a9ca47094ea236fe.png

点击GENERATE CODE.         

配置keli

(先编译一下,看看有没有报错,没报错再接着往下走)

在工程目录下新建一个文件夹(bsp)

在bsp中新建my_main.h、my_main.c

新建一个组命名为bsp,把新建好的文件添加进行。

点击魔术棒,C/C++——Include Path——添加bsp的路径

点击Debug,改为DAP调试器。

476d95775afa4ee3ac619dcd82136b77.png

点击setting,在Flash download里面勾选Reset and Run。

e8ae190cc2e64a34a3644732e4bae1be.png

代码编写

知识补充

PD2 : 74HC573的LE(PD2)端为1时,Q端随D端变化;LE端为0时,Q端不随D端变化

GPIO输出函数:

void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin,GPIO_PinState PinState);

void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);

参数说明:

GPIOx:GPIO名称,取值是GPIOA~GPIOG

GPIO_Pin:GPIO引脚,取值是GPIO_PIN_0 ~ GPIO_PIN_15

GPIO_PIN_All <-l小写

PinState:GPIO引脚状态,取值是GPIO_PIN_RESET或GPIO_PIN_SET

在main.c中添加以下内容

1.在25行添加include“my_main.h”

2.在89行添加setup()

3.while(1)内添加loop()

my_main.h

#ifndef _MY_MAIN_
#define _MY_MAIN_
#include "gpio.h"
#include "main.h"
void setup(void);
void loop(void);
void LED_Disp(uint8_t dsLED);
#endif

my_main.c

#include "my_main.h"
//LED引脚: PC8 - PC15


//uint8_t led_sta=0x10;
uint8_t led_sta=0x01;
/*
电量LED:
	1.把PC0-PC15置为高电平
	2.原地址在0-7,左移8位送入8-15
	  15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
	3.开关锁存器(PD2)
	1:熄灭 0:点亮
*/
void LED_Disp(uint8_t dsLED)
{
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);//所有LED熄灭(l小写)
	HAL_GPIO_WritePin(GPIOC,dsLED<<8,GPIO_PIN_RESET);//左移8位:控制C8-C15引脚,值为1的电量
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);//开锁存器
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);//关锁存器
}

//单独控制LED某一位
void LED_chg(uint8_t num,uint8_t sta)
{
//	uint8_t pos=0x01;
//	pos=pos<<(num-1);
//	if(sta==1) led_sta=(led_sta&(~pos))|pos;
//	else led_sta=(led_sta&(~pos));
//	LED_Disp(led_sta);
	
	
	uint8_t pos=0x01<<(num-1);
	led_sta=(led_sta&(~pos))|(pos*sta);
	LED_Disp(led_sta);
}


//程序开始时执行一次
void setup()
{
	LED_Disp(0x00);
//	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
//	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET);
}
//反复执行
void loop()
{
//LED闪烁0.0
//	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET);
//	HAL_Delay(1000);
//	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_SET);
//	HAL_Delay(1000);
	
//LED闪烁1.0
//	HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_8);
//	HAL_Delay(500);
//LED闪烁2.0	
//	LED_Disp(0x02);
//	HAL_Delay(500);
//	LED_Disp(0x00);
//	HAL_Delay(500);
	
//LED闪烁4.0
//	led_sta=(led_sta&0xfe)|0x01;
//	//0001 0000  led_sta
//	//1111 1110  0xfe
//	//0001 0000  作用:最后一位清零 XXXX XXX0
//	//0000 0001  0x01
//	//0001 0001 led_sta
//	LED_Disp(led_sta);
//	HAL_Delay(500);
//	led_sta=(led_sta&0xfe)|0x00;
//	//0001 0001 led_sta
//	//1111 1110 0xfe
//	//0001 0000 
//	//0000 0000
//	//0001 0000
//	LED_Disp(led_sta);
//	HAL_Delay(500);


//LED交替点亮
//    for(int i=0;i<10;i++)
//	{
//		led_sta=(led_sta&0xfe)|0x01;
//		led_sta=(led_sta&0xfd)|0x00;
//		LED_Disp(led_sta);
//		HAL_Delay(100);
//	}
//	for(int i=0;i<10;i++)
//	{
//		led_sta=(led_sta&0xfd)|0x02;
//		led_sta=(led_sta&0xfe)|0x00;
//		LED_Disp(led_sta);
//		HAL_Delay(100);
//	}

//流水灯 1.0
//	for(int i=0;i<8;i++)
//	{
//		LED_Disp(0x01<<i);
//		HAL_Delay(400);
//	}
//	for(int i=1;i<7;i++)
//	{
//		LED_Disp(0x80>>i);
//		HAL_Delay(400);
//	}

//流水灯 2.0
//	for(int i=0;i<8;i++)
//	{
//		led_sta=(led_sta&0x00)|(0x01<<i);
//		LED_Disp(led_sta);
//		HAL_Delay(700);
//	}

	LED_chg(2,1);
	HAL_Delay(500);
	LED_chg(2,0);
	HAL_Delay(500);
}

/*
与&:全1为1。
或|:有1则1。
<<:左移。

*/

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/928283.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习周志华学习笔记-第13章<半监督学习>

机器学习周志华学习笔记-第13章&#xff1c;半监督学习&#xff1e; 卷王&#xff0c;请看目录 13半监督学习13.1 生成式方法13.2 半监督SVM13.3 基于分歧的方法13.4 半监督聚类 13半监督学习 前面我们一直围绕的都是监督学习与无监督学习&#xff0c;监督学习指的是训练样本包…

安装MySQL 5.7 亲测有效

前言&#xff1a;本文是笔者在安装MySQL5.7时根据另一位博主大大的安装教程基础上做了一些修改而成 首先在这里表示对博主大大的感谢 下面附博主大大地址 下面的步骤言简意赅 跟着做就不会出错 希望各位读者耐下心来 慢慢解决安装中出现的问题~MySQL 5.7 安装教程&#xff08;全…

Navicat连接SQL Server及SpringBoot连接SQL Server(jtds)

Navicat连接SQL Server 安装自带的SQL Server客户端 去到Navicat安装目录&#xff0c;找到安装程序&#xff0c;安装即可。 安装对应版本的Microsoft ODBC Driver for SQL Server 打开Navicat输入对应的SQL Server相关信息 然后点测试连接&#xff0c;提示连接成功。 Spr…

vue+uniapp+echarts的使用(H5环境下echarts)

1.安装 npm install echarts4.9.0 --save // 带版本号 2.main.js中全局引用 // import echarts from echarts // 如果是5.0以上版本用这个 import * as echarts from echarts Vue.prototype.$echartsecharts 3.使用 <template><view id"box" style"w…

单片机的中断系统

作者简介 彭煜轩&#xff0c;男&#xff0c;银川科技学院计算机与人工智能学院&#xff0c;2022级计算机与科学技术8班本科生&#xff0c;单片机原理及应用课程第3组。 指导老师&#xff1a;王兴泽 电子邮件&#xff1a;1696409709qq.com 前言 本篇文章是参考《单片机原理…

C 语言 “神秘魔杖”—— 指针初相识,解锁编程魔法大门(一)

文章目录 一、概念1、取地址操作符&#xff08;&&#xff09;2、解引用操作符&#xff08;*&#xff09;3、指针变量1、 声明和初始化2、 用途 二、内存和地址三、指针变量类型的意义1、 指针变量类型的基本含义2、 举例说明不同类型指针变量的意义 四、const修饰指针1、co…

Scratch游戏推荐 | 我的世界:平台冒险——像素世界的全新挑战! ⛏️

&#x1f3ae; Scratch游戏推荐 | 我的世界&#xff1a;平台冒险——像素世界的全新挑战&#xff01; ⛏️&#x1f30d; 今天给大家推荐一款精彩绝伦的Scratch平台冒险游戏——《我的世界&#xff1a;平台冒险 – 第二章》&#xff01;由atomicmagicnumber制作&#xff0c;这…

Python 入门教程(2)搭建环境 | 2.4、VSCode配置Node.js运行环境

文章目录 一、VSCode配置Node.js运行环境1、软件安装2、安装Node.js插件3、配置VSCode4、创建并运行Node.js文件5、调试Node.js代码 一、VSCode配置Node.js运行环境 1、软件安装 安装下面的软件&#xff1a; 安装Node.js&#xff1a;Node.js官网 下载Node.js安装包。建议选择L…

【0x0019】HCI_Remote_Name_Request详解

目录 一、概述 二、命令格式参数说明 2.1. BD_ADDR 2.2. Page_Scan_Repetition_Mode 2.3. Reserved 2.4. Clock_Offset 三、响应事件及参数说明 3.1. HCI_Command_Status事件 3.2. &#xff08;可选&#xff09;HCI_Remote_Host_Supported_Features_Notification事件…

网络安全技术详解:虚拟专用网络(VPN) 安全信息与事件管理(SIEM)

虚拟专用网络&#xff08;VPN&#xff09;详细介绍 虚拟专用网络&#xff08;VPN&#xff09;通过在公共网络上创建加密连接来保护数据传输的安全性和隐私性。 工作原理 VPN的工作原理涉及建立安全隧道和数据加密&#xff1a; 隧道协议&#xff1a;使用协议如PPTP、L2TP/IP…

HTML5技术贴:现代网页开发的革命

引言 HTML5作为最新的HTML标准&#xff0c;为网页开发带来了革命性的变化。它不仅提高了网页的性能和可访问性&#xff0c;还提供了更多能有效增强网络应用的API。本文将深入探讨HTML5的八大新特性&#xff0c;帮助读者更好地理解和应用这些新特性。 HTML5的八大新特性 1. 语…

紫光展锐联合上汽海外发布量产车型,赋能汽车智能化

当前&#xff0c;智能汽车产业迎来重大变局&#xff0c;随着人工智能、5G、大数据等新一代信息技术的迅猛发展&#xff0c;智能网联汽车正呈现强劲发展势头。 11月26日&#xff0c;在2024紫光展锐全球合作伙伴大会汽车电子生态论坛上&#xff0c;紫光展锐与上汽海外出行联合发…

Kafka如何保证消息可靠?

大家好&#xff0c;我是锋哥。今天分享关于【Kafka如何保证消息可靠&#xff1f;】面试题。希望对大家有帮助&#xff1b; Kafka如何保证消息可靠&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Kafka通过多种机制来确保消息的可靠性&#xff0c;主要包…

comfyui更新后,新版Crystools菜单栏的CPU、GPU信息不显示的解决办法

设置->菜单->使用新版菜单先禁用&#xff0c;然后保存旧版菜单位置&#xff0c;然后再把新版菜单打开&#xff0c;改为上&#xff0c;再取消保存旧版菜单位置&#xff0c;就出来了 1. **插件名称与功能**&#xff1a; - 插件名称&#xff1a;ComfyUI-Crystools - 功能描述…

椭圆参数方程

如上图所示&#xff0c;分别作椭圆的外摆线和内摆线容易得到两个圆方程分别为 x y a&#xff0c;x y b&#xff0c;下面求出 x 和 y 的表达式。设∠AOD θ&#xff0c;而∠POD 称为旋转角&#xff0c;而这里的 θ 称为离心角&#xff0c;而 OA a&#xff0c;OB b&#x…

tcpdump抓包wireshark分析

背景 分析特定协议的数据包&#xff0c;如 HTTP、DNS、TCP、UDP 等&#xff0c;诊断网络问题&#xff0c;例如连接故障、延迟和数据包丢失。 大概过程 1.安装tcpdump yum update yum install tcpdump2.抓包&#xff0c;从当前时间起&#xff0c;一小时后停止&#xff0c…

【MyBatis源码】详解datasource包,DataSourceFactory,数据库连接池

&#x1f3ae; 作者主页&#xff1a;点击 &#x1f381; 完整专栏和代码&#xff1a;点击 &#x1f3e1; 博客主页&#xff1a;点击 文章目录 java.sql包和javax.sql包java.sql 包核心接口javax.sql 包核心接口 数据源工厂接口DataSourceFactory自定义HikariCPDataSourceFactor…

基于组件软件可信度量

基于组件软件可信度量 课程&#xff1a;软件质量分析 作业 可编写下面的java程序&#xff1a; package org.example;import java.util.Arrays;public class ComponentBasedMeasurementModel {public static void main(String[] args) {double[][] keyComponentJudgmentMatrix …

Windows.old 文件夹是什么?它可以手动删除吗?

当我们在 Windows 系统中进行重大更新&#xff0c;如从 Windows 7 升级到 Windows 10&#xff0c;或者在 Windows 10 中执行某些系统重置操作后&#xff0c;会在系统盘&#xff08;通常是 C 盘&#xff09;中发现一个名为 “Windows.old” 的文件夹。那么&#xff0c;这个文件夹…

Android13 允许桌面自动旋转

一&#xff09;需求-场景 Android13 实现允许桌面自动旋转 Android13 版本开始后&#xff0c;支持屏幕自动旋转&#xff0c;优化体验和兼容性&#xff0c;适配不同屏幕 主界面可自动旋转 二&#xff09;参考资料 android framework13-launcher3【06手机旋转问题】 Launcher默…