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

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( );}

相关文章:

  • 多类型文件集中查看系统
  • 计算机考研精炼 操作系统
  • 合并两个有序数组
  • 【网工第6版】第6章 网络安全②
  • 基于 IAR Embedded Workbench 的自研 MCU 芯片软件函数与变量内存布局优化精控方法
  • 临床回归分析及AI推理
  • Vue3 + TypeScript 实现 PC 端鼠标横向拖动滚动
  • ModStartCMS v9.4.0 AI
  • 【Linux调整FTP端口】
  • 【人脸去遮挡前沿】三阶段级联引导学习如何突破真实场景遮挡难题?
  • java代码混淆
  • 国产化海光C86架构服务器安装windows实录
  • Elasticsearch:没有 “AG” 的 RAG?
  • 【AI论文】CipherBank:通过密码学挑战探索LLM推理能力的边界
  • 高级测试工程师 的面试题汇总
  • STM32printf重定向到串口含armcc和gcc两种方案
  • Cline原理分析-prompt
  • 【AI平台】n8n入门5:创建MCP服务,及vscode调用MCP测试
  • 解决在Mac上无法使用“ll”命令
  • 《系统分析师-第三阶段—总结(八)》
  • 人民日报钟声:国际社会应共同维护科学溯源的正确方向
  • 体坛联播|欧冠巴萨3比3战平国米,柯洁未进入国家集训队
  • 水利部将联合最高检开展黄河流域水生态保护专项行动
  • 山西太原一居民小区发生爆炸,应急管理部派工作组赴现场
  • 广东省副省长刘红兵任湖南省委常委、宣传部部长
  • 直播电商行业代表呼吁:携手并肩伸出援手助力外贸企业攻坚克难