硬汉嵌入式论坛

 找回密码
 立即注册
查看: 668|回复: 8
收起左侧

[emWin] FSMC模拟8080刷OLED从F1移植到F4后无法使用

[复制链接]

5

主题

16

回帖

31

积分

新手上路

积分
31
发表于 2023-3-29 11:49:30 | 显示全部楼层 |阅读模式
1、STM32F103ZET6上配置的FSMC模拟8080用于刷新OLED(256*64),使用正常;
2、移植至STM32F412RET6后无法使用,时钟、复用、FSMC均已配置,使用NE4、A0,配置写入命令地址为0x6C00000,写入数据地址为0x6C000001;错误现象为:①屏幕显示现象为雪花屏②用逻辑分析仪测得D0-D3数据线无信号输出。
配置已检查过多遍,麻烦各位给一些思路解决一下这个问题,感谢!

代码如下:
/*
*                        RS(DC)——A0——PC3                RD——FSMC_NOE——PC5
*                        WR——FSMC_NWE——PC2        D0——FSMC_D0——PB14
*                        D1——FSMC_D1——PC6         D2——FSMC_D2——PC11
*                        D3——FSMC_D3——PC12        D4——FSMC_D4——PA2
*                        D5——FSMC_D5——PA3                D6——FSMC_D6——PA4
*                        D7——FSMC_D7——PA5         CS——FSMC_NE4——PC4
*                        RESET——PB13
*/


/*******************************************************************************
@name    :InitOLED
@brief   :按键初始化
@param   :None
@return  :None
*******************************************************************************/
void InitOLED (void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
       
        /*GPIOA、B、C时钟使能*/
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC, ENABLE);
       
        /*WR、RS、CS、RD、D1、D2、D3推挽复用输出*/
        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_11|GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
       
        /*D0推挽复用输出*/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
       
        /*D4、D5、D6、D7推挽复用输出*/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource2, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource3, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource5, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource4, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_FSMC);
       
        /*RESET推挽输出*/
        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_13;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
        GPIO_Init(GPIOB, &GPIO_InitStructure);       
       
        InitFSMC();
}


void InitFSMC(void)
{
        FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
        FSMC_NORSRAMTimingInitTypeDef  readWriteTiming;
        FSMC_NORSRAMTimingInitTypeDef  writeTiming;
       
        /*FSMC时钟使能*/
        RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC,ENABLE);
       
        /*读时序设置*/
        readWriteTiming.FSMC_AddressSetupTime = 0x01;
        readWriteTiming.FSMC_AddressHoldTime = 0x00;
        readWriteTiming.FSMC_DataSetupTime = 0x02;
        readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
        readWriteTiming.FSMC_CLKDivision = 0x00;
        readWriteTiming.FSMC_DataLatency = 0x00;
        readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;


        /*写时序设置*/
        writeTiming.FSMC_AddressSetupTime = 0x01;
        writeTiming.FSMC_AddressHoldTime = 0x00;               
        writeTiming.FSMC_DataSetupTime = 0x02;
        writeTiming.FSMC_BusTurnAroundDuration = 0x00;
        writeTiming.FSMC_CLKDivision = 0x00;
        writeTiming.FSMC_DataLatency = 0x00;
        writeTiming.FSMC_AccessMode = FSMC_AccessMode_A;




        FSMC_NORSRAMInitStructure.FSMC_Bank                  = FSMC_Bank1_NORSRAM4;                 //使用NE4
        FSMC_NORSRAMInitStructure.FSMC_DataAddressMux        = FSMC_DataAddressMux_Disable;         //不复用数据地址
        FSMC_NORSRAMInitStructure.FSMC_MemoryType            = FSMC_MemoryType_SRAM;                // FSMC_MemoryType_SRAM;  
        FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth       = FSMC_MemoryDataWidth_8b;             //存储器数据宽度为8bit   
        FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode       = FSMC_BurstAccessMode_Disable;        // FSMC_BurstAccessMode_Disable;
        FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity    = FSMC_WaitSignalPolarity_Low;
        FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait      = FSMC_AsynchronousWait_Disable;
        FSMC_NORSRAMInitStructure.FSMC_WrapMode              = FSMC_WrapMode_Disable;   
        FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive      = FSMC_WaitSignalActive_BeforeWaitState;  
        FSMC_NORSRAMInitStructure.FSMC_WriteOperation        = FSMC_WriteOperation_Enable;           //存储器写使能
        FSMC_NORSRAMInitStructure.FSMC_WaitSignal            = FSMC_WaitSignal_Disable;   
        FSMC_NORSRAMInitStructure.FSMC_ExtendedMode          = FSMC_ExtendedMode_Enable;             //读写使用不同的时序
        FSMC_NORSRAMInitStructure.FSMC_WriteBurst            = FSMC_WriteBurst_Disable;
        FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming;                     //读写时序
        FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct     = &writeTiming;                         //写时序


        FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);                                                //初始化FSMC配置


        FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);                                                //使能BANK1
}



/*******************************************************************************
@name    :Write_cmd
@brief   :SPI写入命令函数
@param   :None
@return  :None
*******************************************************************************/
void Write_cmd(u8 data)
{
        data=data;
        * (__IO u8 *)(FSMC_ADDR_CMD) = data;
}

/*******************************************************************************
@name    :Write_Data
@brief   :SPI写入数据函数
@param   :None
@return  :None
*******************************************************************************/
void Write_Data(u8 data)
{
        data=data;
        * (__IO u8 *)(FSMC_ADDR_DATA) = data;
}

#define FSMC_ADDR_DATA            ((u32) 0x6C000000 | (1<<0))
#define FSMC_ADDR_CMD                 ((u32) 0x6C000000)




回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2023-3-29 12:46:13 | 显示全部楼层
FSMC配置后延迟1秒再访问设备是否正常
回复

使用道具 举报

5

主题

16

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2023-3-29 13:58:42 | 显示全部楼层
eric2013 发表于 2023-3-29 12:46
FSMC配置后延迟1秒再访问设备是否正常

延迟后再访问,D0-D3依旧没有信号输出,只有高电平。如果用CUBEMX直接配出来的FSMC就有信号输出。问题出在哪里了呢。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2023-3-29 15:47:30 | 显示全部楼层
Ronin 发表于 2023-3-29 13:58
延迟后再访问,D0-D3依旧没有信号输出,只有高电平。如果用CUBEMX直接配出来的FSMC就有信号输出。问题出 ...

这个只能自己逐一对比下所有IO配置和FMC配置了,这个就不帮你一个一个对比了。
回复

使用道具 举报

5

主题

16

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2023-3-29 16:06:04 | 显示全部楼层
eric2013 发表于 2023-3-29 15:47
这个只能自己逐一对比下所有IO配置和FMC配置了,这个就不帮你一个一个对比了。

IO与FSMC配置的话已经检查过不下十遍啦,在F103上同样的配置是可以正常使用的,其余的IO初始化我全部屏蔽了,只留下了FSMC的配置。找了两天还是没有找到问题在哪里,还烦请硬汉哥能够帮助解解惑,十分感谢!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2023-3-29 16:10:26 | 显示全部楼层
Ronin 发表于 2023-3-29 16:06
IO与FSMC配置的话已经检查过不下十遍啦,在F103上同样的配置是可以正常使用的,其余的IO初始化我全部屏蔽 ...

这个是我们的,你对比下

[C] 纯文本查看 复制代码
/*
*********************************************************************************************************
*	函 数 名: OLED_ConfigGPIO
*	功能说明: 配置OLED控制口线,设置为8位80XX总线控制模式或SPI模式
*	形    参:  无
*	返 回 值: 无
*********************************************************************************************************
*/
static void OLED_ConfigGPIO(void)
{
#ifdef OLED_SPI3_EN
	/* 1.配置GPIO,模拟SPI */
	{
		GPIO_InitTypeDef GPIO_InitStructure;

		RCC_AHB1PeriphClockCmd(RCC_OLED_PORT, ENABLE);	/* 打开GPIO时钟 */

		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;		/* 设为输出口 */
		GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;		/* 设为推挽输出模式 */
		GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;	/* 上下拉电阻不使能 */
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;	/* IO口最大速度 */

		GPIO_InitStructure.GPIO_Pin = OLED_CS_PIN;
		GPIO_Init(OLED_CS_PORT, &GPIO_InitStructure);

		GPIO_InitStructure.GPIO_Pin = OLED_SCK_PIN;
		GPIO_Init(OLED_SCK_PORT, &GPIO_InitStructure);

		GPIO_InitStructure.GPIO_Pin = OLED_SDIN_PIN;
		GPIO_Init(OLED_SDIN_PORT, &GPIO_InitStructure);
	}
#else
	/* 1.配置GPIO, 设置为FSMC总线。 为了和16位TFT接口兼容,本例子也配置为16位总线,实际只用了其中8位。 */
	{
		GPIO_InitTypeDef GPIO_InitStructure;

		/* 使能FSMC时钟 */
		RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);

		/* 使能 GPIO时钟 */
		RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOG, ENABLE);

		/* 设置 PD.00(D2), PD.01(D3), PD.04(NOE), PD.05(NWE), PD.08(D13), PD.09(D14),
		 PD.10(D15), PD.14(D0), PD.15(D1) 为复用推挽输出 */

		GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC);
		GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FSMC);
		GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_FSMC);
		GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_FSMC);
		GPIO_PinAFConfig(GPIOD, GPIO_PinSource8, GPIO_AF_FSMC);
		GPIO_PinAFConfig(GPIOD, GPIO_PinSource9, GPIO_AF_FSMC);
		GPIO_PinAFConfig(GPIOD, GPIO_PinSource10, GPIO_AF_FSMC);
		GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC);
		GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC);

		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 |
		                            GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 |
		                            GPIO_Pin_15;
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
		GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
		GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
		GPIO_Init(GPIOD, &GPIO_InitStructure);

		/* 设置 PE.07(D4), PE.08(D5), PE.09(D6), PE.10(D7), PE.11(D8), PE.12(D9), PE.13(D10),
		 PE.14(D11), PE.15(D12) 为复用推挽输出 */

		GPIO_PinAFConfig(GPIOE, GPIO_PinSource4 , GPIO_AF_FSMC);
		GPIO_PinAFConfig(GPIOE, GPIO_PinSource5 , GPIO_AF_FSMC);

		GPIO_PinAFConfig(GPIOE, GPIO_PinSource7 , GPIO_AF_FSMC);
		GPIO_PinAFConfig(GPIOE, GPIO_PinSource8 , GPIO_AF_FSMC);
		GPIO_PinAFConfig(GPIOE, GPIO_PinSource9 , GPIO_AF_FSMC);
		GPIO_PinAFConfig(GPIOE, GPIO_PinSource10 , GPIO_AF_FSMC);
		GPIO_PinAFConfig(GPIOE, GPIO_PinSource11 , GPIO_AF_FSMC);
		GPIO_PinAFConfig(GPIOE, GPIO_PinSource12 , GPIO_AF_FSMC);
		GPIO_PinAFConfig(GPIOE, GPIO_PinSource13 , GPIO_AF_FSMC);
		GPIO_PinAFConfig(GPIOE, GPIO_PinSource14 , GPIO_AF_FSMC);
		GPIO_PinAFConfig(GPIOE, GPIO_PinSource15 , GPIO_AF_FSMC);

		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
		                            GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |
		                            GPIO_Pin_15;
		GPIO_Init(GPIOE, &GPIO_InitStructure);

		/* 设置 PD.13(A18 (RS))  为复用推挽输出 */
		GPIO_PinAFConfig(GPIOD, GPIO_PinSource13, GPIO_AF_FSMC);

		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
		GPIO_Init(GPIOD, &GPIO_InitStructure);

		/* 设置 PG12 (LCD/CS)) 为复用推挽输出 */
		GPIO_PinAFConfig(GPIOG, GPIO_PinSource12, GPIO_AF_FSMC);

		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
		GPIO_Init(GPIOG, &GPIO_InitStructure);
	}

	/* 2.配置FSMC总线参数 */
	{
		FSMC_NORSRAMInitTypeDef  init;
		FSMC_NORSRAMTimingInitTypeDef  timing;

		/*-- FSMC Configuration ------------------------------------------------------*/
		/*----------------------- SRAM Bank 4 ----------------------------------------*/
		/* FSMC_Bank1_NORSRAM4 configuration */
		timing.FSMC_AddressSetupTime = 3;
		timing.FSMC_AddressHoldTime = 0;
		timing.FSMC_DataSetupTime = 6;
		timing.FSMC_BusTurnAroundDuration = 1;
		timing.FSMC_CLKDivision = 0;
		timing.FSMC_DataLatency = 0;
		timing.FSMC_AccessMode = FSMC_AccessMode_A;

		/*
		 LCD configured as follow:
		    - Data/Address MUX = Disable
		    - Memory Type = SRAM
		    - Data Width = 16bit
		    - Write Operation = Enable
		    - Extended Mode = Enable
		    - Asynchronous Wait = Disable
		*/
		init.FSMC_Bank = FSMC_Bank1_NORSRAM4;
		init.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
		init.FSMC_MemoryType = FSMC_MemoryType_SRAM;
		init.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
		init.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
		init.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;	/* 注意旧库无这个成员 */
		init.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
		init.FSMC_WrapMode = FSMC_WrapMode_Disable;
		init.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
		init.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
		init.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
		init.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
		init.FSMC_WriteBurst = FSMC_WriteBurst_Disable;

		init.FSMC_ReadWriteTimingStruct = &timing;
		init.FSMC_WriteTimingStruct = &timing;

		FSMC_NORSRAMInit(&init);

		/* - BANK 1 (of NOR/SRAM Bank 1~4) is enabled */
		FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);
	}
#endif
}

回复

使用道具 举报

19

主题

234

回帖

291

积分

高级会员

积分
291
发表于 2023-3-29 16:11:07 | 显示全部楼层
你这里就4个函数,依次使用CUBEMX的代码进行替换进行排查
回复

使用道具 举报

5

主题

16

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2023-4-3 17:54:24 | 显示全部楼层
void InitOLED (void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
       
        /*GPIOA、B、C时钟使能*/
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC, ENABLE);
       
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource2, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource3, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource5, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_OTG_FS);
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_OTG_FS);
        GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_OTG_FS);
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_OTG_FS);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource4, GPIO_AF_FSMC);
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_FSMC);
       
        /*WR、RS、CS、RD、D1、D2、D3推挽复用输出*/
        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_11|GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
       
        /*D0推挽复用输出*/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
       
        /*D4、D5、D6、D7推挽复用输出*/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        /*RESET推挽输出*/
        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_13;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
       
        InitFSMC();
}
问题已解决,具体原因还在分析,根据CUBE配置的端口来进行修改后能够输出对应的信号。需要将D0-D3复用为GPIO_AF_OTG_FS,如果有人遇到此类问题的话,可以参考一下。感谢硬汉哥。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2023-4-4 09:25:23 | 显示全部楼层
Ronin 发表于 2023-4-3 17:54
void InitOLED (void)
{
        GPIO_InitTypeDef GPIO_InitStructure;

这配置不太对,我们的是全部复用的GPIO_AF_FSMC
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-9 22:35 , Processed in 0.263779 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表