完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
时钟初始化
/* Select HCLK as the clock source of SPI0 */ CLK_SetModuleClock(SPI0_MODULE, CLK_CLKSEL1_SPI0_S_HCLK, MODULE_NoMsk); /* Enable SPI0 peripheral clock */ CLK_EnableModuleClock(SPI0_MODULE); PIN初始化,没有使用PC2(MISO) /* Setup SPI0 multi-function pins */ SYS->GPC_MFP &= ~(SYS_GPC_MFP_PC0_Msk | SYS_GPC_MFP_PC1_Msk | SYS_GPC_MFP_PC3_Msk); // SYS_GPC_MFP_PC2_Msk SYS->GPC_MFP |= SYS_GPC_MFP_PC0_SPI0_SS0 | SYS_GPC_MFP_PC1_SPI0_CLK | SYS_GPC_MFP_PC3_SPI0_MOSI0; // SYS_GPC_MFP_PC2_SPI0_MISO0 SYS->ALT_MFP &= ~(SYS_ALT_MFP_PC0_Msk | SYS_ALT_MFP_PC1_Msk | SYS_ALT_MFP_PC3_Msk); // SYS_ALT_MFP_PC2_Msk SYS->ALT_MFP |= SYS_ALT_MFP_PC0_SPI0_SS0 | SYS_ALT_MFP_PC1_SPI0_CLK | SYS_ALT_MFP_PC3_SPI0_MOSI0; // SYS_ALT_MFP_PC2_SPI0_MISO0 SPI0配置 void SPI0_Init(void) { SPI_Open(SPI0, SPI_MASTER, SPI_MODE_0, 0, 9000000); SPI_EnableAutoSS(SPI0, SPI_SS0, SPI_SS_ACTIVE_LOW); } OLED读写 #ifdef SOFT_SPI void OLED_WR_Byte(u8 dat,u8 cmd) { u8 i; if(cmd) OLED_DC_Set(); else OLED_DC_Clr(); OLED_CS_Clr(); for(i = 0; i < 8; i++) { OLED_SCL_Clr(); if(dat & 0x80) OLED_SDA_Set(); else OLED_SDA_Clr(); OLED_SCL_Set(); dat <<= 1; } OLED_CS_Set(); OLED_DC_Set(); } #else void OLED_WR_Byte(u8 dat, u8 cmd) { if(cmd) OLED_DC_Set(); else OLED_DC_Clr(); SPI_WRITE_TX0(SPI0, dat); OLED_DC_Set(); } #endif main函数 #ifdef SOFT_SPI SPI0_Init_Soft(); #else SPI0_Init(); #endif delay_ms(100); OLED_Init(); UART_SetTimeoutCnt(UART0, 40); UART0->FCR |= (3 << 4); // 设置UART0的串口FIFO为14字节 UART_EnableInt(UART0, (UART_IER_RDA_IEN_Msk | UART_IER_RTO_IEN_Msk)); printf("\n\nCPU @ %dHz\n", SystemCoreClock); printf("\n\nUART Sample Program\n"); t1.IDString = (uint8_t*)"LCC1 V0.0.1"; printf("please input data:\n"); delay_ms(500); AD5764_Init(); while(1) { OLED_Refresh(); OLED_ShowString(0, 1, t1.IDString, 16, 1); } 如果我使用软件模拟SPI,屏幕可以点亮且正常显示,一旦使用硬件SPI0,则不行,起初我以为是SPI的模式、bit数不对,但SPI_MODE_0到SPI_MODE_3,bit数8和32都试过了,还是点不亮,求做过的大佬指点一下吧。急急急。 |
|
相关推荐
1个回答
|
|
请问具体的问题是什么?是无法正确读取OLED的数据还是无法驱动OLED显示?遇到什么错误或异常情况?
根据给出的代码片段,可以看出: 1. 时钟已经被正确初始化,并且SPI0外设时钟已经被使能; 2. SPI0的引脚已经被正确设置,并且没有使用PC2作为MISO信号线; 因此,可能的问题原因可能是在发送OLED命令和数据时,SPI0控制寄存器的配置不正确,或者与OLED通信时的时序不正确。建议检查SPI0时序和控制寄存器的配置是否正确,并根据OLED的数据手册调整通信时序。 |
|
|
|
只有小组成员才能发言,加入小组>>
798 浏览 0 评论
1154 浏览 1 评论
2531 浏览 5 评论
2863 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2713 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1086浏览 3评论
195浏览 2评论
461浏览 2评论
374浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
455浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 01:22 , Processed in 1.059746 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号