完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
`/** * @Brief SPI_FLASH初始化 * @param 无 * @retval 无 */ void SPI_FLASH_Init(void) { SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; /* 使能SPI时钟 */ FLASH_SPI_APBxClock_FUN ( FLASH_SPI_CLK, ENABLE ); /* 使能SPI引脚相关的时钟 */ FLASH_SPI_CS_APBxClock_FUN ( FLASH_SPI_CS_CLK|FLASH_SPI_SCK_CLK| FLASH_SPI_MISO_PIN|FLASH_SPI_MOSI_PIN, ENABLE ); /* 配置SPI的 CS引脚,普通IO即可 */ GPIO_InitStructure.GPIO_Pin = FLASH_SPI_CS_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(FLASH_SPI_CS_PORT, &GPIO_InitStructure); /* 配置SPI的 SCK引脚*/ GPIO_InitStructure.GPIO_Pin = FLASH_SPI_SCK_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(FLASH_SPI_SCK_PORT, &GPIO_InitStructure); /* 配置SPI的 MISO引脚*/ GPIO_InitStructure.GPIO_Pin = FLASH_SPI_MISO_PIN; GPIO_Init(FLASH_SPI_MISO_PORT, &GPIO_InitStructure); /* 配置SPI的 MOSI引脚*/ GPIO_InitStructure.GPIO_Pin = FLASH_SPI_MOSI_PIN; GPIO_Init(FLASH_SPI_MOSI_PORT, &GPIO_InitStructure); /* 停止信号 FLASH: CS引脚高电平*/ SPI_FLASH_CS_HIGH(); /* SPI 模式配置 */ // FLASH芯片 支持SPI模式0及模式3,据此设置CPOL CPHA SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(FLASH_SPIx , &SPI_InitStructure); /* 使能 SPI */ SPI_Cmd(FLASH_SPIx , ENABLE); } u8 SPI_FLASH_SendByte(u8 byte,u8 cmd) { SPI_FLASH_CS_LOW(); SysTick_Delay_Us(1); if(cmd==0) { SPI_FLASH_DC_LOW(); } else { SPI_FLASH_DC_HIGH(); } SysTick_Delay_Us(1); /* 等待发送缓冲区为空,TXE事件 */ while (SPI_I2S_GetFlagStatus(FLASH_SPIx , SPI_I2S_FLAG_TXE) == RESET); /* 写入数据寄存器,把要写入的数据写入发送缓冲区 */ SPI_I2S_SendData(FLASH_SPIx , byte); /* 等待接收缓冲区非空,RXNE事件 */ // while (SPI_I2S_GetFlagStatus(FLASH_SPIx , SPI_I2S_FLAG_RXNE) == RESET); /* 读取数据寄存器,获取接收缓冲区数据 */ return 0;//SPI_I2S_ReceiveData(FLASH_SPIx ); SPI_FLASH_CS_HIGH(); SysTick_Delay_Us(1); } void LCD_Set_Pos(u8 x, u8 y) { SPI_FLASH_SendByte(0xb0+(y>>3),0); SPI_FLASH_SendByte(((x&0xf0)>>4)|0x10,0); SPI_FLASH_SendByte((x&0x0f)|0x01,0); } void LCD_Fill(u8 bmp_data) { u8 y=0,x=0; for(y=0;y<8;y++) { SPI_FLASH_SendByte(0xb0+y,0); SPI_FLASH_SendByte(0x01,0); SPI_FLASH_SendByte(0x10,0); for(x=0;x<128;x++) SPI_FLASH_SendByte(bmp_data,1); } } void LCD_Init(void) { SPI_FLASH_CS_HIGH(); SPI_FLASH_RES_HIGH(); SysTick_Delay_Ms(50); SPI_FLASH_RES_LOW(); SysTick_Delay_Ms(50); SPI_FLASH_RES_HIGH(); SysTick_Delay_Ms(50); SPI_FLASH_SendByte(0xae,0);//--turn off oled panel SPI_FLASH_SendByte(0x00,0);//---set low column address SPI_FLASH_SendByte(0x10,0);//---set high column address SPI_FLASH_SendByte(0x40,0);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F) SPI_FLASH_SendByte(0x81,0);//--set contrast control register SPI_FLASH_SendByte(0xcf,0); // Set SEG Output Current Brightness SPI_FLASH_SendByte(0xa1,0);//--Set SEG/Column Mapping 0xa0左右反置 0xa1正常 SPI_FLASH_SendByte(0xc8,0);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常 SPI_FLASH_SendByte(0xa6,0);//--set normal display SPI_FLASH_SendByte(0xa8,0);//--set multiplex ratio(1 to 64) SPI_FLASH_SendByte(0x3f,0);//--1/64 duty SPI_FLASH_SendByte(0xd3,0);//-set display offset Shift Mapping RAM Counter (0x00~0x3F) SPI_FLASH_SendByte(0x00,0);//-not offset SPI_FLASH_SendByte(0xd5,0);//--set display clock divide ratio/oscillator frequency SPI_FLASH_SendByte(0x80,0);//--set divide ratio, Set Clock as 100 Frames/Sec SPI_FLASH_SendByte(0xd9,0);//--set pre-charge period SPI_FLASH_SendByte(0xf1,0);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock SPI_FLASH_SendByte(0xda,0);//--set com pins hardware configuration SPI_FLASH_SendByte(0x12,0); SPI_FLASH_SendByte(0xdb,0);//--set vcomh SPI_FLASH_SendByte(0x40,0);//Set VCOM Deselect Level SPI_FLASH_SendByte(0x20,0);//-Set Page Addressing Mode (0x00/0x01/0x02) SPI_FLASH_SendByte(0x02,0);// SPI_FLASH_SendByte(0x8d,0);//--set Charge Pump enable/disable SPI_FLASH_SendByte(0x14,0);//--set(0x10) disable SPI_FLASH_SendByte(0xa4,0);// Disable Entire Display On (0xa4/0xa5) SPI_FLASH_SendByte(0xa6,0);// Disable Inverse Display On (0xa6/a7) SPI_FLASH_SendByte(0xaf,0);//--turn on oled panel LCD_Fill(0x00); //初始清屏 LCD_Set_Pos(0,0); } 主函数就初始化了屏幕和spi外设后加了全屏填充oxff ` |
|
相关推荐
4个回答
|
|
好吧我***了两个gpio忘记配置了
|
|
1 条评论
|
|
dc和res脚忘记配置
|
|
|
|
把所有的引脚都配置好再试试
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-spi编程示例之spi编写程序
421 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第三十七章 image图像对比实验
406 浏览 0 评论
398 浏览 1 评论
465 浏览 0 评论
关于RT-Thread studio添加freemodbus控件失败的问题
739 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11636 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-8 03:28 , Processed in 0.855980 second(s), Total 88, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号