1

I am working on a project on 20*2 character oled(US2066) so I wrote a code for configuration of SPI and code has not any error or warning but the SPI doesnt work on my code what is the problem?

The configuration of SPI is:

    void SPI_Port_Config()
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);

    SPI_InitStruct.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_32;
    SPI_InitStruct.SPI_Direction=SPI_Direction_1Line_Tx;
    SPI_InitStruct.SPI_DataSize=SPI_DataSize_8b;
    SPI_InitStruct.SPI_FirstBit=SPI_FirstBit_LSB;
    SPI_InitStruct.SPI_Mode=SPI_Mode_Master;
    SPI_InitStruct.SPI_NSS=SPI_NSS_Soft;
    SPI_InitStruct.SPI_CPHA=SPI_CPHA_1Edge;
    SPI_InitStruct.SPI_CPOL=SPI_CPOL_High;
           
        //SPI_I2S_ITConfig(SPI1,SPI_I2S_IT_RXNE,ENABLE);
        
    SPI_Init(SPI1,&SPI_InitStruct);
        
        SPI_Cmd(SPI1, ENABLE); 
}

Data and Command functions basically like this


  void char_command(unsigned char i)
{
      
        GPIO_ResetBits(GPIOE,GPIO_Pin_7);//cs pin=GPIO_Pin_0
  
        delay_ms(10);
   
    send_byte(i);
        delay_ms(1);
        while (!(SPI1->SR & (SPI_I2S_FLAG_TXE)));      
        
 
    GPIO_SetBits(GPIOE,GPIO_Pin_7);
}
void char_data(unsigned char i)
{
        GPIO_ResetBits(GPIOE,GPIO_Pin_7);//cs pin
        
        delay_ms(10);
    
        send_byte(i);
        delay_ms(1);
        while (!(SPI1->SR & (SPI_I2S_FLAG_TXE)));
        
        data_counter++;                  
    GPIO_SetBits(GPIOE,GPIO_Pin_7);
}
void send_byte(unsigned char data)
{
        first_byte=(data&0x0F)<<4;
        second_byte=((data&0xF0)>>4)<<4;
        
        transmitter_byte=(second_byte<<12)|(first_byte<<4);
            
    SPI1->DR=first_byte;
        delay_ms(1);
        while (!(SPI1->SR & (SPI_I2S_FLAG_TXE)));
    SPI1->DR=second_byte;
        delay_ms(1);
        while (!(SPI1->SR & (SPI_I2S_FLAG_TXE)));          
}

I wrote 2 function as data_start and command_start for contionus transmition.How contionus transmition works shown below. enter image description here

void command_start(void)
{       
        GPIO_ResetBits(GPIOE,GPIO_Pin_7);//cs pin=GPIO_Pin_0
        delay_ms(10);
        SPI1->DR=0x5F; 
        delay_ms(1);
        while (!(SPI1->SR & (SPI_I2S_FLAG_TXE)));
        delay_ms(10);
        GPIO_SetBits(GPIOE,GPIO_Pin_7);
}
void data_start(void)
{
  
        GPIO_ResetBits(GPIOE,GPIO_Pin_7);//cs pin=GPIO_Pin_0
        delay_ms(10);
        SPI1->DR=0x1F; 
        delay_ms(1);
        while (!(SPI1->SR & (SPI_I2S_FLAG_TXE)));
        delay_ms(10);
        GPIO_SetBits(GPIOE,GPIO_Pin_7);
}
And Main
void CHAR_Init(void)
{
  GPIO_SetBits(GPIOA,CHAR_SPI_RES); //reset HIGH – inactive
         delay_ms(1); //delay
        
     command_start();
  char_command(0x2A); //function set (extended char_command set)
  char_command(0x71); //function selection A
        data_start();
     char_data(0x00); // disable internal VDD regulator (2.8V I/O). char_data(0x5C) = enable regulator (5V I/O)
     command_start();
  char_command(0x28); //function set (fundamental char_command set)
  char_command(0x08); //display off, cursor off, blink off
  char_command(0x2A); //function set (extended char_command set)
  char_command(0x79); //OLED char_command set enabled
  char_command(0xD5); //set display clock divide ratio/oscillator frequency
  char_command(0x70); //set display clock divide ratio/oscillator frequency
  char_command(0x78); //OLED char_command set disabled
  char_command(0x08); //extended function set (2-lines)
  char_command(0x06); //COM SEG direction
  char_command(0x72); //function selection B
  
        data_start();
     
     char_data(0x00);    //ROM CGRAM selection
     
     command_start();
     
  char_command(0x2A); //function set (extended char_command set)
  char_command(0x79); //OLED char_command set enabled
  char_command(0xDA); //set SEG pins hardware configuration
  char_command(0x10); //set SEG pins hardware configuration
  char_command(0xDC); //function selection C
  char_command(0x00); //function selection C
  char_command(0x81); //set contrast control
  char_command(0x7F); //set contrast control
  char_command(0xD9); //set phase length
  char_command(0xF1); //set phase length
  char_command(0xDB); //set VCOMH deselect level
  char_command(0x40); //set VCOMH deselect level
  char_command(0x78); //OLED char_command set disabled
  char_command(0x28); //function set (fundamental char_command set)
  char_command(0x01); //clear display
  char_command(0x80); //set DDRAM address to 0x00
  char_command(0x0C); //display ON
       delay_ms(100); //delay

 }
ChristianYami
  • 586
  • 1
  • 9
  • 17

0 Answers0