蓝桥杯物联网竞赛_STM32L071_3_Oled显示

地位:

对于任何一门编程语言的学习,print函数毫无疑问是一种最好的调试手段,调试者不仅能通过它获取程序变量的运行状态而且通过对其合理使用获取程序的运行流程,更能通过关键变量的输出帮你验证推理的正确与否,朴素的讲print函数就是人与程序交流的媒介,能否合理运用print函数处理问题是学好程序的关键

在嵌入式的学习中Oled显示就充当人与程序与实验板子之间沟通的媒介,合理使用Oled调试程序将会给后续程序调试带来巨大便利,这就是为什么在点灯之后就立即学习Oled显示

OLed1线路图:

在这里插入图片描述
这是Oled连线原理图,主要看画圈部分即可,PA8以及PB4Stm32l071kbu6芯片控制,所以只需要调这俩引脚即可,哦还有就是上面A_+3V3也是需要用芯片控制这个等会说

Stm32l071连线图:

在这里插入图片描述
可以看出本芯片控制着Oled的电源以及俩引脚

当PB5为低电平时,三极管SI2301导通,A_3V3得电,OLED工作;
反之,三极管SI2301不导通,A_3V3失电,OLED熄灭。

引脚配置:

在这里插入图片描述
以下是对I2C3_CSI2C3_SDA的概述:

I2C 是一种串行通信协议,用于在微控制器和外部设备之间进行数据传输和通信。I2C3即I2C3外设,I2C有多个外设,这里指第三个。

SDA(串行数据线): SDA 是用于实际传输数据的线路。数据在 SDA 上进行传输,包括地址、命令和实际的数据位。当时钟线(SCL)处于特定状态(上升沿或下降沿)时,数据线(SDA)上的数据被读取或写入。SDA 线由主设备或从设备控制,用于传输数据。

SCL(串行时钟线): SCL 是用于同步数据传输的时钟信号线。SCL 确定了数据传输的时序和速率。数据线(SDA)上的数据传输在 SCL
信号的节拍下进行。每个数据位都在 SCL 上的每个脉冲中传输。SCL 由主设备产生和控制。

接通电源后Oled传输数据的过程需要SDA和SCL配合传输数据,SCL打节拍,SDA传数据


CubMX配置:

在这里插入图片描述

在这里插入图片描述
Keil5配置:

注意:

oled.c及.h以及font.h蓝桥杯官方会提供,但是需要将OLED_Write函数写好。

链接: https://pan.baidu.com/s/1cDqH-5il_ca5lCBzMpnCEg 提取码:lq14

在这里插入图片描述

在这里插入图片描述

main.c:

/* USER CODE BEGIN Header */
/********************************************************************************* @file           : main.c* @brief          : Main program body******************************************************************************* @attention** Copyright (c) 2023 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "i2c.h"
#include "gpio.h"
#include "Function.h"
#include "oled.h"
#include "stdio.h"
#include "string.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes *//* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 *//* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
int main(void)
{char *a = "sjkjfisd";HAL_Init();SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_I2C3_Init();/* USER CODE BEGIN 2 *//* USER CODE END 2 */Function_OledEnable(50);/* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE */OLED_ShowString(5,2,a,16);/* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};/** Configure the main internal regulator output voltage*/__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_4;RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_2;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK){Error_Handler();}PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_I2C3;PeriphClkInit.I2c3ClockSelection = RCC_I2C3CLKSOURCE_PCLK1;if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK){Error_Handler();}
}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

Function.c及.h:

#include "Function.h"
#include "oled.h"
#include "stdio.h"
#include "gpio.h"
#include "i2c.h"void OLED_Write(unsigned char type, unsigned char data){ // 配置写函数unsigned char Write_Data[2]; // 需要传输的数据Write_Data[0] = type; // 写入的数据类型Write_Data[1] = data; // 写入的数据HAL_I2C_Master_Transmit(&hi2c3, 0x78, Write_Data, 2, 0xff); // i2c配置、传入数据位置、传入数据信息、传入数据大小、超时传输时间
}void Function_OledEnable(unsigned char ms){ // Oled使能HAL_GPIO_WritePin(OLED_Power_GPIO_Port, OLED_Power_Pin, GPIO_PIN_RESET); // 通电HAL_Delay(ms); // 延时等待,等待数据传输完再显示数据OLED_Init(); // 初始化OLed
}
#ifndef __FUNCTION__
#define __FUNCTION__void OLED_Write(unsigned char comm, unsigned char data);
void Function_OledEnable(unsigned char ms);#endif

运行效果:

在这里插入图片描述

黄色警告消除:

在这里插入图片描述

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

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

相关文章

常见网络安全防护

1 阻断服务攻击(DOS) 阻断服务攻击,想办法目标网络资源用尽变种:分布式阻断服务攻击 影响: 宽带消耗性(消耗目标的带宽)资源消耗型(消耗目标的计算资源) 解决方案&am…

人工智能对网络安全的影响越来越大

如果问当前IT行业最热门的话题是什么,很少有人会回答除了人工智能(AI)之外的任何话题。 在不到 12 个月的时间里,人工智能已经从一项只有 IT 专业人员才能理解的技术发展成为从小学生到作家、程序员和艺术家的每个人都使用的工具…

MySQL索引事务基础

目录 1. 索引 1.1索引的概念 1.2索引的特点 1.3 索引的使用场景 1.4索引的使用 1.4.1查看索引 1.4.2创建索引 1.4.3删除索引 1.5索引保存的数据结构 2.事务 2.1经典例子 2.2事务的概念 2.3事务的使用 2.4事务的4个核心特性 2.5事务的并发问题 2.5.1脏读 2.5.2不可…

Python + Docker 还是 Rust + WebAssembly?

在不断发展的技术世界中,由大语言模型驱动的应用程序,通常被称为“LLM 应用”,已成为各种行业技术创新背后的驱动力。随着这些应用程序的普及,用户需求的大量涌入对底层基础设施的性能、安全性和可靠性提出了新的挑战。 Python 和…

Java项目如何打包成Jar(最简单)

最简单的办法,使用Maven插件(idea自带) 1.选择需要打包的mudule,点击idea右侧的maven插件 2.clean操作 3.选择需要的其他mudule,进行install操作(如果有) 4.再次选择需要打包的module&#…

Vue.observable 是什么

Observable 翻译过来我们可以理解成可观察的 Vue.js2.6 新增 Vue.observable,让一个对象变成响应式数据。Vue 内部会用它来处理 data 函数返回的对象 。 返回的对象可以直接用于渲染函数和计算属性内,并且会在发生变更时触发相应的更新。也可以作为最小化…

Git的指令

Git 各平台安装包下载地址为:http://git-scm.com/downloads Ubuntu Git 安装命令为: $ apt-get install git用户信息 配置个人的用户名称和电子邮件地址: $ git config --global user.name "runoob" $ git config --global user.…

Python----类对象和实例对象

目录 一.类和类的实例 二.类属性和实例属性 三.私有属性和公有属性 四.静态方法和类方法 五.__init__方法,__new__方法和__del__方法: 六.私有方法和公有方法 七.方法的重载 八.方法的继承 九.方法的重写 十.对象的特殊方法 十一.对象的引用&a…

软件开发模式开源和闭源的优劣之争

开源和闭源,两种截然不同的开发模式,对于大模型的发展有着重要影响。开源让技术共享,吸引了众多人才加入,推动了大模的创新。而闭源则保护了商业利益和技术优势,为大模型的商业应用提供了更好的保障。 开源与闭源软件的…

基于命令行模式设计退款请求处理

前言 这篇文章的业务背景是基于我的另一篇文章: 对接苹果支付退款退单接口-CSDN博客 然后就是说设计模式是很开放的东西,可能我觉得合适,你可能觉得不合适,这里只是做下讨论,没有一定要各位同意的意思.... 相关图文件 这里我先把相关的图文件放上来,可能看着会比较清晰点 代码逻…

sql之left join、right join、inner join的区别

sql之left join、right join、inner join的区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) 只返回两个表中联结字段相等的行 举例如下&#xff1…

Web服务器(go net/http) 处理Get、Post请求

大家好 我是寸铁👊 总结了一篇Go Web服务器(go net/http) 处理Get、Post请求的文章✨ 喜欢的小伙伴可以点点关注 💝 前言 go http请求如何编写简单的函数去拿到前端的请求(Get和Post) 服务器(后端)接收到请求后,又是怎么处理请求&#xff0c…

【限时免费】20天拿下华为OD笔试之【前缀和】2023B-寻找连续区间【欧弟算法】全网注释最详细分类最全的华为OD真题题解

文章目录 题目描述与示例题目描述输入描述输出描述示例一输入输出说明 示例二输入输出 解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目描述与示例 题目描述 给定一个含有N个正整数的数组,求出有多少个连续区间(包…

【网络奇缘】- 计算机网络|分层结构|ISO模型

🌈个人主页: Aileen_0v0🔥系列专栏: 一见倾心,再见倾城 --- 计算机网络~💫个人格言:"没有罗马,那就自己创造罗马~" 目录 计算机网络分层结构 OSI参考模型 OSI模型起源 失败原因: OSI模型组成 协议的作用 📝全文…

二十四、RestClient操作文档

目录 一、新增文档 1、编写测试代码 二、查询文档 1、编写测试代码 三、删除文档 1、编写测试代码 四、修改文档 1、编写测试代码 五、批量导入文档 批量查询 一、新增文档 1、编写测试代码 SpringBootTest public class HotelDocumentTest {private RestHighLevelC…

【栈】不同字符的最小子序列

题目: /*** 思路:栈,使用数组记录每个字母出现的次数,再用一个数组标记字符是否在栈中* 遍历栈,存储字符时比较栈顶字符,若小于栈顶字符并且后面有重复的字符则* 栈顶元素出栈,否则入栈。** au…

PS 注释工具 基础使用方法讲解

好 上文PS 颜色取样器&标尺工具 基本使用讲解中 我们讲了 颜色取样器和标尺工具的基本用法 下面我们来看一下 注释工具 这个 主要是后面 比较大的作品 可能不是我们一个人取设计 团队作图 就需要用到它 选择 注释工具 后 我们随便点击图像任何一个位置 右侧就会出现一个输…

gitlab各版本安装注意点:

研发团队在安装gitlab各版本过程中可能遇到各种问题,为了后续容易查看特将我们在实践过程中遇到的各类问题要点总结如下: gitlab 10.8.3 (564c342)安装 centos Linux yum安装网址查找网址:gitlab/gitlab-ce - Results for gitla…

执行shell脚本提示syntax error: unexpected end of file

具体报错如下: ./test.sh: line 36: syntax error: unexpected end of file执行命令时需将test.sh替换为实际的脚本文件名称。 情形一: shell脚本在Windows下编写,上传到Linux上执行,由于 fileformat 类型不同,所以报…

黑马点评12-实现好友关注/取关功能,查看好友共同关注列表

好友关注 数据模型 数据库中的tb_follow记录博主与粉丝的关系 tb_follow表对应的实体类 Data EqualsAndHashCode(callSuper false) Accessors(chain true) TableName("tb_follow") public class Follow implements Serializable {private static final long ser…