嵌入式蓝桥杯学习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,设置完后按回车会自动配置时钟树。

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

LED使用的引脚为PC8-PC15.

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

2.将PD2设置为GPIO_Output。

在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只能选择低速)

点击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.

点击GENERATE CODE.         

配置keli

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

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

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

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

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

点击Debug,改为DAP调试器。

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

代码编写

知识补充

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-1515 14 13 12 11 10 9 8 7 6 5 4 3 2 1 03.开关锁存器(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。
<<:左移。*/

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络】协议与网络传输

目录 一、协议 1.1 认识协议 1.2 协议分层 二、OSI七层模型 三、TCP/IP五(四)层模型 四、网络传输 4.1 数据包封装与分用 4.2 网络传输基本流程 4.2.1 以太网通信 &#xff08;1&#xff09;原理 &#xff08;2&#xff09;数据碰撞问题 &#xff08;3&#xff09;…

【力扣】3274. 检查棋盘方格颜色是否相同

一、题目 给你两个字符串 coordinate1 和 coordinate2&#xff0c;代表 8 x 8 国际象棋棋盘上的两个方格的坐标。以下是棋盘格的参考图&#xff1a; 如果这两个方格颜色相同&#xff0c;返回 true&#xff0c;否则返回 false。坐标总是表示有效的棋盘方格。坐标的格式总是先字…

JavaWeb12

登陆拦截 会话技术 会话&#xff1a;用户打开浏览器&#xff0c;访问web服务器的资源&#xff0c;会话建立&#xff0c;直到有一方断开连接&#xff0c;会话结束。在一次会话中可以包含多次请求和响应 会话跟踪&#xff1a;一种维护浏览器状态的方法&#xff0c;服务器需要识…

使用STM32CubeMX配置串口各种功能

使用STM32CubeMX配置串口各种功能 STM32CubeMX软件的安装接收空闲中断STM32CubeMX配置1.新建工程2. 选择芯片3. 选择时钟和下载方式4. 配置串口5.设置工程消息6.生成代码7.修改生成的代码 空闲中断DMA转运STM32CubeMX配置4.配置串口5.设置工程消息6.生成代码7.修改生成的代码 S…

Linux详解:文件权限

文章目录 前言Linux文件权限基础文件成员与三组权限字符 权限的修改修改文件所有者总结 前言 在浩瀚的操作系统世界中&#xff0c;Linux以其开源、灵活和强大的特性&#xff0c;成为了服务器、开发环境以及众多个人用户的首选。而在Linux的众多特性中&#xff0c;文件权限机制…

openEuler 22.03 使用cephadm安装部署ceph集群

目录 目的步骤规格步骤ceph部署前准备工作安装部署ceph集群ceph集群添加node与osdceph集群一些操作组件服务操作集群进程操作 目的 使用ceph官网的cephadm无法正常安装&#xff0c;会报错ERROR: Distro openeuler version 22.03 not supported 在openEuler上实现以cephadm安装部…

xiaolin coding 图解 MySQL笔记——事务篇

1. 事务隔离级别是怎么实现的&#xff1f; 数据库中的**事务&#xff08;Transaction&#xff09;**先开启&#xff0c;然后等所有数据库操作执行完成后&#xff0c;才提交事务&#xff0c;对于已经提交的事务来说&#xff0c;该事务对数据库所做的修改将永久生效&#xff0c;…

掌握 Spring Boot 中的缓存:技术和最佳实践

缓存是一种用于将经常访问的数据临时存储在更快的存储层&#xff08;通常在内存中&#xff09;中的技术&#xff0c;以便可以更快地满足未来对该数据的请求&#xff0c;从而提高应用程序的性能和效率。在 Spring Boot 中&#xff0c;缓存是一种简单而强大的方法&#xff0c;可以…

408——数据结构(持续更新)

文章目录 一、绪论1.1 相关概念1.2 数据结构三要素1.3 相关习题1.4 复杂度1.4.1 时间复杂度1.4.2 复杂度相关习题 二、线性表 一、绪论 1.1 相关概念 数据&#xff1a;数据是信息的载体&#xff0c;所有能被输入到计算机中&#xff0c;且能被计算机处理的符号的集合。如图片、…

深入浅出:开发者如何快速上手Web3生态系统

Web3作为互联网的未来发展方向&#xff0c;正在逐步改变传统互联网架构&#xff0c;推动去中心化技术的发展。对于开发者而言&#xff0c;Web3代表着一个充满机遇与挑战的新领域&#xff0c;学习和掌握Web3的基本技术和工具&#xff0c;将为未来的项目开发提供强大的支持。那么…

C++学习日记---第16天

笔记复习 1.C对象模型 在C中&#xff0c;类内的成员变量和成员函数分开存储 我们知道&#xff0c;C中的成员变量和成员函数均可分为两种&#xff0c;一种是普通的&#xff0c;一种是静态的&#xff0c;对于静态成员变量和静态成员函数&#xff0c;我们知道他们不属于类的对象…

Leetcode 每日一题 205.同构字符串

目录 问题描述 过题图片 示例 解决方案 代码实现 题目链接 总结 问题描述 给定两个字符串 s 和 t&#xff0c;判断它们是否是同构的。如果 s 中的字符可以按某种映射关系替换得到 t&#xff0c;那么这两个字符串是同构的。具体来说&#xff0c;每个出现的字符都应当映射…

C# 集合(Collection)

文章目录 前言一、动态数组&#xff08;ArrayList&#xff09;二、哈希表&#xff08;Hashtable&#xff09;三、排序列表&#xff08;SortedList&#xff09;四、堆栈&#xff08;Stack&#xff09;五、队列&#xff08;Queue&#xff09;六、点阵列&#xff08;BitArray&…

2.5 特征降维(机器学习)

2.5 特征降维 2.5.1 降维 降维&#xff1a;是指在某些限定条件下&#xff0c;降低随机变量&#xff08;特征&#xff09;个数&#xff0c;得到一组“不相关”主变量的过程。 ndarray 维数 嵌套的层数 0维 标量 1维 向量 2维 矩阵 3维 n维 二维数组 降低的维度…

【小白学机器学习41】如何从正态分布的总体中去抽样?比较不同的取样方差的差别

目录 1 目标&#xff1a;使用2种方法&#xff0c;去从正态分布的总体中去抽样&#xff0c;获得样本 1.1 step1: 首先&#xff0c;逻辑上需要先有符合正态分布的总体population 1.2 从总体中取得样本&#xff0c;模拟抽样的过程 2 从正态分布抽样的方法1 3 从正态分布抽样…

框架5:SpringBoot 2 - 核心功能

SpringBoot2 - 基础入门【一 ~ 五】&#xff0c;详见&#xff1a; 六、配置文件 6.1 properties文件格式 同之前的用法。 6.2 yaml文件格式【推荐】 YAML本意&#xff1a;“YAML”不是一种标记语言。但在开发中&#xff0c;实际把它理解为&#xff1a;“Yet Another Markup Lan…

行为型设计模式之《责任链模式》实践

定义 责任链模式&#xff08;Chain Of Responsibility Pattern&#xff09;顾名思义&#xff0c;就是为请求创建一条处理链路&#xff0c;链路上的每个处理器都判断是否可以处理请求&#xff0c;如果不能处理则往后走&#xff0c;依次从链头走到链尾&#xff0c;直到有处理器可…

Vue前端开发-路由树配置

一个配置路由的文件由导入路由模块、创建路由对象和导出路由对象三个部分组成&#xff0c;在创建路由对象时&#xff0c;需要构建路由数组&#xff0c;路由数组中包括一级、二级和多级路由结构&#xff0c;因此&#xff0c;这种结构的路由配置&#xff0c;又称为路由树配置。 …

2.mysql 中一条更新语句的执行流程是怎样的呢?

前面我们系统了解了一个查询语句的执行流程&#xff0c;并介绍了执行过程中涉及的处理模块。 相信你还记得&#xff0c;一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块&#xff0c;最后到达存储引擎。 那么&#xff0c;一条更新语句的执行流程又…

JavaScript根据数据生成柱形图

分析需求 // 定义一个数组来存储四个季度的数据 dataArray = []// 循环4次,获取用户输入的数据并存储到数组中 for i from 0 to 3// 获取用户输入的数据inputData = 获取用户输入的第(i + 1)季度的数据// 将数据存入数组dataArray[i] = inputData// 遍历数组,根据数据生成柱…