我的Stm32f103rct6开发板下载oled程序后无法运行,但在proteus中程序可以正常运行。

文件链接信息

烧录信息

开发板接口


我的Stm32f103rct6开发板下载oled程序后无法运行,但在proteus中程序可以正常运行。

文件链接信息




上午好☀️☀️☀️️
本答案参考通义千问
你的问题描述是:在STM32F103RCT6开发板上下载OLED程序后无法运行,但在Proteus中可以正常运行。这表明程序本身没有问题,但硬件或烧录配置可能存在问题。
如果使用I2C:
// 示例:I2C初始化代码
I2C_InitTypeDef I2C_InitStruct;
I2C_InitStruct.I2C_Mode = I2C_Mode_I2C;
I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStruct.I2C_OwnAddress1 = 0x00;
I2C_InitStruct.I2C_Ack = I2C_Ack_Enable;
I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStruct.I2C_ClockSpeed = 100000; // 100kHz
I2C_Init(I2C1, &I2C_InitStruct);
I2C_Cmd(I2C1, ENABLE);
如果使用SPI:
// 示例:SPI初始化代码
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;
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_Init(SPI1, &SPI_InitStruct);
SPI_Cmd(SPI1, ENABLE);
注意: 确保
I2C1或SPI1的GPIO引脚已正确配置并启用。
Delay_ms())// 示例:OLED初始化函数
void OLED_Init(void) {
Delay_ms(100); // 延时等待OLED稳定
OLED_Write_Cmd(0xAE); // 关闭显示
OLED_Write_Cmd(0xD5); // 设置时钟分频比
OLED_Write_Cmd(0x80);
OLED_Write_Cmd(0xA8); // 设置多路复用率
OLED_Write_Cmd(0x3F);
OLED_Write_Cmd(0xD3); // 设置显示偏移
OLED_Write_Cmd(0x00);
OLED_Write_Cmd(0x40); // 设置起始行地址
OLED_Write_Cmd(0x8D); // 电荷泵设置
OLED_Write_Cmd(0x14);
OLED_Write_Cmd(0x20); // 设置内存模式
OLED_Write_Cmd(0x00);
OLED_Write_Cmd(0xA1); // 设置段重映射
OLED_Write_Cmd(0xC8); // 设置扫描方向
OLED_Write_Cmd(0xDA); // 设置COM引脚硬件配置
OLED_Write_Cmd(0x12);
OLED_Write_Cmd(0x81); // 设置对比度
OLED_Write_Cmd(0xCF);
OLED_Write_Cmd(0xD9); // 设置预充电周期
OLED_Write_Cmd(0xF1);
OLED_Write_Cmd(0xDB); // 设置VCOMH电压倍率
OLED_Write_Cmd(0x20);
OLED_Write_Cmd(0xA4); // 全屏显示开启
OLED_Write_Cmd(0xA6); // 正常显示
OLED_Write_Cmd(0xAF); // 开启显示
}
重点: 确保所有OLED命令都正确发送,并且延时足够。
.hex或.bin格式SystemInit()或RCC_APB2PeriphClockCmd()是否调用// 示例:系统时钟配置
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = 72;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 4;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK |
RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
| 问题点 | 解决方案 | |--------|----------| | 硬件连接错误 | 检查OLED引脚、电源、地线 | | 通信接口配置错误 | 检查I2C/SPI配置及GPIO设置 | | OLED驱动代码问题 | 确认驱动与OLED型号匹配 | | 烧录配置问题 | 使用ST-Link Utility重新烧录 | | 系统时钟问题 | 确保时钟配置正确 |
如果你愿意提供代码片段或具体烧录日志,我可以进一步帮助你排查问题!