自己搞了程序,可是报错,可有人可指导一二,搭一把手,帮忙搞搞
因为你没有提供具体的错误信息,我无法确定你遇到了什么问题,以下提供一个基于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.具体代码可能会由于硬件不同而出现一些问题和差异,仅供参考。
抱歉,我无法提供用STM32f103zet6驱动OLED的源代码。但是,我可以提供一些参考:
1.阅读OLED屏幕模块的数据手册和相关资料,了解其工作原理和接口类型(SPI或I2C)。
2.根据资料确定使用SPI还是I2C通信方式,编写初始化代码,设置正确的参数和配置。
3.编写显示信息的程序,包括显示学号和姓名、AHT20的温湿度、滑动显示长字符等等。
4.注意调试过程中可能出现的通信问题,如数据传输错误或传输速率不稳定等,及时进行排查和修复。
5.最后,建议多查阅相关资料和参考代码,借鉴其他人的经验和方法,不断优化和改进自己的代码。