当前位置: 首页 > ai >正文

STM32F10X OLED屏幕点亮

本节实现点亮OLED屏

首先去原理图中查找对应引脚

图片

图片

配置上述的IO口

图片

查看对应的原理图

​​​​​​​

OLED_CS 和 OLED_RES(PB6,PB7)就是配置为推挽输出OLED_SCLK  和 OLED_SDIN (PB13 PB15)OLED_D/C (PE12) 推挽输出就是配置为复用推挽输出

代码展示

OLED.h

#ifndef _OLED_H_#define _OLED_H_
#include "stm32f10x.h"
#define OLED_RES_H  GPIO_SetBits (GPIOB, GPIO_Pin_6)#define OLED_RES_L  GPIO_ResetBits (GPIOB, GPIO_Pin_6)#define OLED_CS_H   GPIO_SetBits (GPIOB, GPIO_Pin_7)#define OLED_CS_L   GPIO_ResetBits (GPIOB, GPIO_Pin_7)#define OLED_DC_H   GPIO_SetBits (GPIOB, GPIO_Pin_12)#define OLED_DC_L   GPIO_ResetBits (GPIOB, GPIO_Pin_12)
void OLED_Init(void);
#endif

OLED.c

#include "oled.h"#include "delay.h"函数功能:OLED_SPI管脚初始化OLED_SCK --- PB13 – 复用推挽输出输出OLED_MOSI –  PB15 – 复用推挽输出输出OLED_CS  --  PB7  - 推挽输出void OLED_SPI_PinInit(void){//打开GPIOB时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
//初始化GPIO口为推挽输出	GPIO_InitTypeDef GPIO_InitStruct;//结构体变量,会申请空间	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;					GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;	GPIO_Init (GPIOB, &GPIO_InitStruct);
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7;	GPIO_Init (GPIOB, &GPIO_InitStruct);
//打开SPI2时钟	RCC_APB1PeriphClockCmd (RCC_APB1Periph_SPI2, ENABLE);
//初始化SPI2	SPI_InitTypeDef SPI_InitStruct;	SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//双向单向 - 全双工  SPI_InitStruct.SPI_Mode = SPI_Mode_Master;			//主机模式  SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;	//数据宽度 8bit  SPI_InitStruct.SPI_CPOL = SPI_CPOL_High;				//空闲高电平  SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge;				//后沿采集 -- MODE3  SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;					//使能软件从器件  SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;//18MHz  SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;	//高位在前  SPI_InitStruct.SPI_CRCPolynomial = 7;						//默认值	SPI_Init (SPI2, &SPI_InitStruct);
//使能SPI2	SPI_Cmd (SPI2, ENABLE);}函数功能:OLED_SPI传输字节函数函数形参:待传输的字节void OLED_SPI_TransferByte(u8 sByte){//等待发送缓冲区为空while(SPI_I2S_GetFlagStatus (SPI2, SPI_I2S_FLAG_TXE) == RESET);SPI2->DR = sByte;
//等待接收缓冲区不为空 == 不能省略while(SPI_I2S_GetFlagStatus (SPI2, SPI_I2S_FLAG_RXNE) == RESET);}函数功能:OLED管脚初始化OLED_SCK --- PB13 – 复用推挽输出输出OLED_MOSI –  PB15 – 复用推挽输出输出OLED_CS  --  PB7  - 推挽输出OLED_DC  --  PB12 – 推挽输出OLED_RES –-  PB6  – 推挽输出
void OLED_PinInit(void){OLED_SPI_PinInit( ); //直接调用上面SPI管脚初始化
//打开GPIOB时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
//初始化GPIO口为推挽输出	GPIO_InitTypeDef GPIO_InitStruct;//结构体变量,会申请空间	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_12;					GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;	GPIO_Init (GPIOB, &GPIO_InitStruct);
OLED_RES_H;//不复位OLED_CS_H;//不选中从机}函数功能:OLED发送命令函数函数形参:待发送的命令void OLED_SendCommand(u8 cmd){OLED_CS_L;//拉低片选OLED_DC_L;//拉低 - 命令
OLED_SPI_TransferByte(cmd);
OLED_CS_H;//拉高片选}函数功能:OLED发送数据函数函数形参:待发送的数据void OLED_SendData(u8 data){OLED_CS_L;//拉低片选OLED_DC_H;//拉高 - 数据
OLED_SPI_TransferByte(data);
OLED_CS_H;//拉高片选}函数功能:OLED清屏void OLED_Clear(void){	u8 i, j;
for(i = 0; i < 8; i++)//控制页地址	{//设置起始位置  第i页第0列OLED_SendCommand(0xB0 | i);//设置起始页地址OLED_SendCommand(0x00);//设置列地址低四位OLED_SendCommand(0x10);//设置列地址高四位
for(j = 0; j < 128; j++)//控制列数		{//发送数据OLED_SendData(0x0F);		}	}}函数功能:OLED初始化函数形参:None函数返回值:None备注:厂家提供的初始化序列
void OLED_Init(void){OLED_PinInit( );//管脚初始化
OLED_RES_H;delay_ms(100);OLED_RES_L;delay_ms(100);OLED_RES_H;delay_ms(100); 
OLED_SendCommand(0xAE); //关闭显示OLED_SendCommand(0xD5); //设置时钟分频因子,震荡频率OLED_SendCommand(80);   //[3:0],分频因子;[7:4],震荡频率OLED_SendCommand(0xA8); //设置驱动路数OLED_SendCommand(0X3F); //默认0X3F(1/64)OLED_SendCommand(0xD3); //设置显示偏移OLED_SendCommand(0X00); //默认为0
OLED_SendCommand(0x40); //设置显示开始行 [5:0],行数.
OLED_SendCommand(0x8D); //电荷泵设置OLED_SendCommand(0x14); //bit2,开启/关闭OLED_SendCommand(0x20); //设置内存地址模式OLED_SendCommand(0x02); //[1:0],00,列地址模式;01,行地址模式;10,页地址模式;默认10;OLED_SendCommand(0xA1); //段重定义设置,bit0:0,0->0;1,0->127;OLED_SendCommand(0xC8); //设置COM扫描方向;bit3:0,普通模式;1,重定义模式 COM[N-1]->COM0;N:驱动路数OLED_SendCommand(0xDA); //设置COM硬件引脚配置OLED_SendCommand(0x12); //[5:4]配置
OLED_SendCommand(0x81); //对比度设置OLED_SendCommand(0xEF); //1~255;默认0X7F (亮度设置,越大越亮)OLED_SendCommand(0xD9); //设置预充电周期OLED_SendCommand(0xf1); //[3:0],PHASE 1;[7:4],PHASE 2;OLED_SendCommand(0xDB); //设置VCOMH 电压倍率OLED_SendCommand(0x30); //[6:4] 000,0.65*vcc;001,0.77*vcc;011,0.83*vcc;
OLED_SendCommand(0xA4); //全局显示开启;bit0:1,开启;0,关闭;(白屏/黑屏)OLED_SendCommand(0xA6); //设置显示方式;bit0:1,反相显示;0,正常显示OLED_SendCommand(0xAF); //开启显示
//清屏OLED_Clear( );}

http://www.xdnf.cn/news/3116.html

相关文章:

  • 从Ping到iperf3:深度实战无线网络压测与优化指南
  • C语言之操作符
  • 基本算法之龟速乘
  • 最新DeepSeek-Prover-V2-671B模型 简介、下载、体验、微调、数据集:专为数学定理自动证明设计的超大垂直领域语言模型(在线体验地址)
  • 在原生代码(非webpack)里使用iview的注意事项
  • shell---expect
  • MySQL 中 redo log、undo log 以及 bin log 的区别
  • 北京亦庄机器人马拉松:人机共跑背后的技术突破与产业启示
  • 【Linux】记录一个有用PS1
  • 自创天炎十二戟算法设计,禁止抄袭
  • Elasticsearch:没有 “AG” 的 RAG?
  • 解决STM32待机模式无法下载程序问题的深度探讨
  • 论文阅读:2024 ACM SIGSAC Membership inference attacks against in-context learning
  • 《算法笔记》10.6小节——图算法专题->拓扑排序 问题 C: Legal or Not
  • Spring 转发 form-data 文件上传请求时中文文件名乱码
  • 【大模型面试每日一题】Day 4:低资源语言建模方案
  • vue3 打字机效果
  • 【CUDA pytorch】
  • DAPO:对GRPO的几点改进
  • 模式识别的基本概念与理论体系
  • 智能机器人在物流行业的应用:效率提升与未来展望
  • pycharm导入同目录下文件未标红但报错ModuleNotFoundError
  • iVX 开源战略:多维突破下的产业生态革新与未来图景
  • MCP的基础知识
  • C++从入门到实战(十一)详细讲解C/C++语言中内存分布与C与C++内存管理对比
  • 一种动态分配内存错误的解决办法
  • Chrome插件备忘
  • Godot笔记:入门索引
  • 卷积神经网络
  • 解析2.4G射频芯片采用DFN封装的技术原因