stm32番外-----0.96寸OLED播放电影《你的名字》

news2024/9/21 12:32:33

 目录

前言 

OLED播放视频 

1.简述

2.现象 

3.电路连接图​编辑

4.项目主要文件

5.代码

6.注意事项


前言 

        刚好前面学习了USART串口通信,本期咱们来玩个有意思的,就是去通过USART实现视频的播放,本期内容程序是来自江协科技的,本人只是进行了修改。(视频链接:用0.96寸OLED播放知名艺人打篮球视频 *附赠程序*_哔哩哔哩_bilibili)

 本期的程序我上传到了我的百度网盘,可自行下载,外赠电影《你的名字》

程序百度网盘链接:https://pan.baidu.com/s/1JrS3HKkahkoysIOKe59xOA?pwd=0721 
提取码:0721

《你的名字》百度网盘链接:https://pan.baidu.com/s/1HMWtIzKgrOqGW8ScZ0XNRQ

提取码:ndmz

OLED播放视频 

1.简述

其实原理很简单,本质上是串口传输数据,分为两部分,第一部分是stm32的本身作为接收方,是对接收到的数据进行处理的操作,另外一个就是电脑作为发送方,将处理好的视频图像一帧一帧发送给stm32,然后stm32读取显示即可。

2.现象 

OLED毕竟是一个很小的屏幕,而且并不是彩屏的,所以播放效果基本上非常模糊,下面是OLED的现象:

OLED播放《你的名字》

3.电路连接图

4.项目主要文件

5.代码

Seial.c文件代码:

#include "stm32f10x.h"                  // Device header

void Serial_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	USART_InitTypeDef USART_InitStructure;
	USART_InitStructure.USART_BaudRate = 921600;
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
	USART_InitStructure.USART_Parity = USART_Parity_No;
	USART_InitStructure.USART_StopBits = USART_StopBits_1;
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
	USART_Init(USART1, &USART_InitStructure);
	
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
	NVIC_Init(&NVIC_InitStructure);
	
	USART_Cmd(USART1, ENABLE);
}


/*声明OLED模块中的显存数组*/
extern uint8_t OLED_DisplayBuf[8][128];

void USART1_IRQHandler(void)
{
	static uint8_t p0 = 0, p1 = 0;
	if (USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
	{
		/*接收一个字节数据*/
		uint8_t RxData = USART_ReceiveData(USART1);
		
		/*将一个字节放到OLED显存数组的指定位置*/
		OLED_DisplayBuf[p0][p1] = RxData;
		
		/*位置自增*/
		p1 ++;
		if (p1 >= 128)
		{
			p1 = 0;
			p0 ++;
			if (p0 >= 8)
			{
				p0 = 0;
			}
		}
		
		USART_ClearITPendingBit(USART1, USART_IT_RXNE);
	}
}

Serial.h文件代码:

#ifndef __SERIAL_H
#define __SERIAL_H

void Serial_Init(void);
void Serial_SendByte(uint8_t Byte);

#endif

主文件main.c代码:

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "Serial.h"
#include "OLED.h"

int main(void)
{
	/*OLED初始化*/
	OLED_Init();
	
	/*串口初始化*/
	Serial_Init();
	
	/*显示初始字符串*/
	OLED_Clear();
	OLED_ShowString(40, 24, "START", OLED_8X16);
	OLED_Update();
	
	while (1)
	{
		OLED_Update();	//不断将OLED显存数组的内容刷新到OLED屏幕
	}
}

6.注意事项

步骤:
1.按照接线图连接好硬件
2.把Keil工程的代码下载到STM32中
3.运行Python代码,通过串口把处理后的数据发送给STM32进行显示

注意:
1.Python需要预先安装依赖包,可以执行以下命令进行安装:
    pip install numpy
    pip install opencv-python
    pip install pyserial
2.打开串口时,串口号需要根据自己的设备进行指定,可以打开设备管理器查看
3.打开视频的文件可以自行指定
4.播放视频时,按q键退出
5.串口收发部分并没有帧同步的操作,所以需要保证每次收发都是一个完整的数据帧,如果显示中途被打断,最好把STM32复位一下,避免帧数据错位

以上就是本期的全部内容了,我们下次见!

今日壁纸:

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

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

相关文章

Getty 携手英伟达升级商业文生图 AI 模型;苹果新专利探索「心跳」解锁 iPhone 丨 RTE 开发者日报

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

中科院4区救命神刊!主打不让任何一个人延毕~沾边可录!

【SciencePub学术】本期,小编给大家推荐一本JCR2区中科院4区的“救命神刊”!征稿领域可谓是相当广泛,且国人友好,计算机领域的学者可以考虑一下这本期刊! 期刊解析 KNOWLEDGE AND INFORMATION SYSTEMS 《知识与信息系统…

计算机毕业设计选题推荐-学院教学工作量统计系统-Java/Python项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Unity后处理(Post-processing)

Unity post-processing 就像是对图片采用滤镜一样(如下图对比)对当前场景显示做一定的显示处理,使得场景更漂亮、有趣或者有型。 视觉风格与视觉保真 游戏场景后处理能够达到所需的视觉风格(visual style)同时也保证视…

【Stack和Queue模拟实现】

Stack和Queue模拟实现 小杨 在模拟实现之前,有必要介绍一下什么是容器适配器 容器适配器 适配器是一种设计模式,该种模式是将一个类的接口转换成客户希望的另一个接口。 虽然stack和queue中也可以存放元素,但在STL中并没有将其划分在容器的…

星环科技推出革新性智能业务分析洞察平台——无涯·问数

5月30-31日,2024向星力未来数据技术峰会期间,星环科技重磅发布一款新产品无涯问数——智能业务分析洞察平台。该产品旨在解决传统BI在数据获取、使用门槛和效率方面的挑战,为决策者和业务人员带来前所未有的数据分析体验。 无涯问数的问世&am…

丰田生产方式:拒绝表面效率!!!

在需要的时间,一件一件地生产所需要的东西,就可以避免“过量生产的浪费”。但是,这时你必须知道“需要的时间”是在什么时候。于是,“单位时间”的意义就很重要了。 所谓“单位时间”,就是指制造一件产品的时间。这必须…

【开源分享】2024最新php在线客服系统源码|聊天系统 附搭建教程

源码的主要特色 自动回复和机器人知识库:通过后台设置机器人知识库,系统可以根据关键词自动回复用户,提高响应速度和服务效率。 内容过滤:支持设置违禁词,避免接收包含不良信息的用户消息,维护平台健康。…

黑马JavaWeb后端案例开发(包含所有知识点!!!)

目录 1.准备工作 环境搭建 开发规范 REST(REpresentation State Transfer),表述性状态转换,它是一种软件架构风格 注意事项 统一响应结果 2.部门管理功能 查询部门 删除部门 新增部门 RequestMapping 3.员工管理功能 分页查询 批…

Vue前端工程

创建一个工程化的vue项目 npm init vuelatest 全默认回车就好了 登录注册校验 //定义数据模型 const registerDataref({username:,password:,rePassword: }) //校验密码的函数 const checkRePassword(rule,value,callback)>{if (value){callback(new Error(请再次输入密…

受够了限速,用teamOS搭建家庭私有云盘,不再受限于人

在现在这个数字化的年代,手机、电脑、平板,到处都有我的照片、视频和文件。 每次想找个东西都得翻遍所有设备,简直就像大海捞针。 我也试过用那些公有云存储服务,但真的用不惯。首先,我总是担心数据安全问题&#xff…

oracle linux源码安装rabbitMQ并部署三节点rabbitmq集群

一.安装rabbitMQ的基础软件下载 Rabbitmq是现阶段比较常用的一个消息队列服务,是基于erlang语言开放的,需要首先安装erlang,并且rabbitmq和erlang的版本是有关系的。 1.基础依赖软件(主要是是编译和erlang安装的时候的一些依赖软…

君正T41开发板环境搭建_串口登陆_配置IP_telnet登陆_mount挂载_安装交叉编译工具链

目录 1 开发板外观 2 串口连接 3芯片内存情况 4 配置IP地址 5 telnet登陆 6 mount挂载目录 7 安装交叉编译工具链 1 开发板外观 2 串口连接 我直接用MobaXterm连接,虽然我还没有文档,但是我觉得波特率大概率就是115200,试了下确实可以…

电流在PCB中的奥秘:《PCB电流与信号完整性设计》解读

我们生活中的每一个电子设备,从简单的家用电器到复杂的通信系统,都依赖于高效、可靠的印制电路板。然而,随着工作频率的提高和电路尺寸的缩小,PCB设计中的信号完整性问题变得日益突出。如何在设计阶段就确保信号的高质量传输&…

Android 10.0 Launcher 启动流程

在前面SystemUI启动流程中说到,在SystemServer中会去启动各种系统服务,这里的launcher也是启动的其中一个服务ActivityManagerService去启动的。在android10之前,系统四大组件的启动都是在ActivityManagerService中,在android10中…

NPDP学习之路:科学规划顺利拿证

备考策略:制定合理学习计划 开始学习前需要制定一个合理的学习计划是备考过程中的关键。 最好根据自己个人的工作和生活习惯,合理安排每天的学习时间,并合理分配各个知识点的学习进度,把不理解的问题提前记录下来,要…

[渗透测试学习] Editorial-HackTheBox

文章目录 Editorial-HackTheBox信息搜集漏洞利用权限提升参考文章Editorial-HackTheBox 信息搜集 nmap扫描端口 nmap -sV -sC -v 10.10.11.20扫描结果如下 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.7 (Ubuntu Linux; protocol 2.…

报销管理软件怎么选?主流的10款对比

国内外排名前十的报销软件大对比:合思、Zoho Expense、金蝶财务报销系统、每刻报销、慧算账、Expensify、齐业成、汇联易、分贝通、QuickBooks Online。 在小型企业中,报销管理可能还可以由财务人员手工完成。然而,对于中到大型企业和快速发展…

『 Linux 』基于阻塞队列的生产者消费者模型

文章目录 生产者-消费者模型概述生产者消费者模型的高效性虚假唤醒信号丢失生产者消费者模型的模拟实现参考代码 生产者-消费者模型概述 生产者消费者模型是一种多线程设计模式,常见于解决多个生产者线程和多个消费者线程之间如何安全有效地共享数据; 该模型中存在三种关系,两个…

多级指针的使用

文章目录 🍊自我介绍🍊指针的设计规则🍊多级指针的结论🍊二级指针输出数组中的某个值的表示方法 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞关注评论收藏(一键四连)哦~ &…