有没有用stm32f103zet6驱动oled的源程序?

自己搞了程序,可是报错,可有人可指导一二,搭一把手,帮忙搞搞

因为你没有提供具体的错误信息,我无法确定你遇到了什么问题,以下提供一个基于STM32F103ZET6驱动OLED显示屏的示例程序,仅供参考:

//头文件
#include "stm32f10x.h"

//OLED引脚定义
#define OLED_GPIO SPI1_NSS_GPIO_Port

#define OLED_CS GPIO_Pin_4  //cs
#define OLED_DC GPIO_Pin_3  //dc

void OLED_WriteCmd(uint8_t cmd){

GPIO_ResetBits(OLED_GPIO, OLED_DC);  //低电平为命令
SPI_I2S_SendData(SPI1,cmd);  //SPI发送数据
while (SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);//等待传输结束
}

void OLED_WriteData(uint8_t data){

GPIO_SetBits(OLED_GPIO,OLED_DC);  //高电平为数据
SPI_I2S_SendData(SPI1,data);
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
}

void OLED_Init(void){

 //初始化GPIO和SPI
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1,ENABLE);
 
 //配置GPIO管脚
 GPIO_InitTypeDef GPIO_InitStruct;
 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;  
 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStruct.GPIO_Pin = OLED_CS|OLED_DC;
 GPIO_Init(OLED_GPIO,&GPIO_InitStruct);


 // SPI参数设置:低速模式、CPOL=0 CPHA=0 
 SPI_InitTypeDef SPI_InitStruct;
 SPI_InitStruct.SPI_Direction = SPI_Direction_1Line_Tx;  
 SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
 SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
 SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;  
 SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;  
 SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;  
 SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;  
 SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;  //高位先发
 SPI_Init(SPI1,&SPI_InitStruct);
 SPI_Cmd(SPI1,ENABLE);
 
 GPIO_SetBits(OLED_GPIO,OLED_CS);  //保持CS高电平
 
 //OLED复位,然后等待30ms
 GPIO_ResetBits(OLED_GPIO,GPIO_Pin_5);   //RST
 Delay(50);  
 GPIO_SetBits(OLED_GPIO,GPIO_Pin_5);       
 Delay(50);  

//关显示模块并设置显示位置 
OLED_WriteCmd(0xAE);  
OLED_WriteCmd(0x00);
OLED_WriteCmd(0x10);  
OLED_WriteCmd(0x40);  
OLED_WriteCmd(0x81);  
OLED_WriteCmd(0xCF);  
OLED_WriteCmd(0xA1);  
OLED_WriteCmd(0xC8);  
OLED_WriteCmd(0xA6);  
OLED_WriteCmd(0xA8);  
OLED_WriteCmd(0x3F);  
OLED_WriteCmd(0xD3);  
OLED_WriteCmd(0x00);  
OLED_WriteCmd(0xd5);  
OLED_WriteCmd(0x80);  
OLED_WriteCmd(0xD9);  
OLED_WriteCmd(0xF1);  
OLED_WriteCmd(0xDA);  
OLED_WriteCmd(0x12);  
OLED_WriteCmd(0xDB);  
OLED_WriteCmd(0x40);  
OLED_WriteCmd(0x20);  
OLED_WriteCmd(0x02);  
OLED_WriteCmd(0x8D);  
OLED_WriteCmd(0x14);  
OLED_WriteCmd(0xA4);  
OLED_WriteCmd(0xA6);   

//开启显示模块
 OLED_WriteCmd(0xAF);
}

int main(void)
{
OLED_Init();
while(1){
//这里可以添加其他操作
}
}


注意事项:

1.OLED引脚需要正确连接,防止因接口连接不对导致程序不能正常运行。
2.SPI需要在主机审计上激活,并且发送数据时必须等待传输结束,保证数据完整性。
3.具体代码可能会由于硬件不同而出现一些问题和差异,仅供参考。

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7451160
  • 你也可以参考下这篇文章:用stm32f103c8t6点亮0.96寸oled屏(附带百度云例程)
  • 除此之外, 这篇博客: 基于STM32F103将采集的温度-湿度值通过串口输出,用OLED屏显示自己的学号和姓名以及显示AHT20的温度和湿度,滑动显示长字符中的 (一)、实验内容 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    1. 学习I2C总线通信协议,使用STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出。具体任务: 1)解释什么是“软件I2C”和“硬件I2C”? (阅读野火配套教材的第23章“I2C–读写EEPROM”原理章节) 2)阅读AHT20数据手册,编程实现:每隔2秒钟采集一次温湿度数据,并通过串口发送到上位机(win10)。
    2. 理解OLED屏显和汉字点阵编码原理,使用STM32F103的SPI或IIC接口实现以下功能: 1)显示自己的学号和姓名; 2)显示AHT20的温度和湿度; 3)上下或左右的滑动显示长字符,比如“Hello,欢迎来到重庆交通大学物联网205实训室!”或者一段歌词或诗词(最好使用硬件刷屏模式)。
  • 以下回答由chatgpt基于相关博客总结生成:

    抱歉,我无法提供用STM32f103zet6驱动OLED的源代码。但是,我可以提供一些参考:

    1.阅读OLED屏幕模块的数据手册和相关资料,了解其工作原理和接口类型(SPI或I2C)。

    2.根据资料确定使用SPI还是I2C通信方式,编写初始化代码,设置正确的参数和配置。

    3.编写显示信息的程序,包括显示学号和姓名、AHT20的温湿度、滑动显示长字符等等。

    4.注意调试过程中可能出现的通信问题,如数据传输错误或传输速率不稳定等,及时进行排查和修复。

    5.最后,建议多查阅相关资料和参考代码,借鉴其他人的经验和方法,不断优化和改进自己的代码。