发 帖  
原厂入驻New
[问答] stm32f103全屏点亮oled出现杂点
413 单片机 STM32 嵌入式
分享
/**
  * @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


捕获.PNG

0
2020-7-28 15:30:46   评论 分享淘帖 邀请回答
2个回答
好吧我傻逼了两个gpio忘记配置了
2020-7-28 16:09:52 1 评论

举报

1 条评论
2020-7-28 16:12:49 1 评论

举报

1 条评论
  • 2020-7-28 20:32

    <b>借宝地一用:专业生产NVMe扩展卡、阵列卡、USB卡、串口卡的厂商,品种多可定制。</b>
    13428923118
    http://www.linkreal.com.cn/Upfiles/Prod_X/202051968878.jpg

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
关闭

站长推荐 上一条 /8 下一条

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