婆娑梵净山 2023-12-25 01:41 采纳率: 89.5%
浏览 19
已结题

I2C和OLED通信异常

为什么我写的代码无法下载到程序不执行,另外

HAL_I2C_Master_Transmit(&hi2c,address,Sendbuff,sizeof(Sendbuff),HAL_MAX_DELAY);
这一段如果不在OLED.c加i2c.h就无法报错,另外还有什么要改的吗。
我的这些代码最大的问题是什么 
#ifndef _OLEDEXTISETUP_H
#define _OLEDEXTISETUP_H
#include "stm32f4xx_hal.h"
#include "I2C.h"
#include "sys.h"
#define OLEDVCC                 GPIO_PIN_11
#define OLEDGND                 GPIO_PIN_12
#define  SDA                    GPIO_PIN_9
#define SCL                     GPIO_PIN_10

#define address                 0x78
 
void singnallininit(void);
void gpioinittype(void);
void SDLK(uint8_t mode);
void SCLK(uint8_t mode);
void oled_init(void);
void oled_text(void);
#endif 


 
 #include "I2C.h"
I2C_HandleTypeDef  hi2c;
 void i2cinit()
 {
 hi2c.Instance = I2C1;
  hi2c.Init.ClockSpeed = 400000;
  hi2c.Init.DutyCycle = I2C_DUTYCYCLE_2;
  hi2c.Init.OwnAddress1 = 0x00;
  hi2c.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  hi2c.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  hi2c.Init.OwnAddress2 = 0;
  hi2c.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  hi2c.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  if (HAL_I2C_Init(&hi2c) != HAL_OK)
    {
 }
    }
void I2C_MspHandler(I2C_HandleTypeDef *i2cHandle)
{
      GPIO_InitTypeDef inites;
  if(i2cHandle->Instance==I2C1)
 {
  __HAL_RCC_I2C1_CLK_ENABLE();
    inites.Pin=SDA|SCL;
  inites.Mode=GPIO_MODE_OUTPUT_PP;
    inites.Pull=GPIO_PULLUP;
    inites.Speed=GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOA,&inites);
  __HAL_RCC_I2C1_CLK_ENABLE();
    __HAL_RCC_GPIOA_CLK_ENABLE();
 }
}

void SETUP()
{
SCLK(1);
delay_ms(2);
SDLK(0);
SCLK(0);
 
oled_text();    
SCLK(1);
SDLK(0);
delay_ms(2);
SDLK(1);
} 


#include "OLED.h"

 GPIO_InitTypeDef inites;
 uint16_t mode;
 
void gpioinittype()
{
  __HAL_RCC_GPIOA_CLK_ENABLE();
  inites.Pin= OLEDVCC|OLEDGND;
  inites.Mode=GPIO_MODE_OUTPUT_PP;
    inites.Pull=GPIO_PULLUP;
    inites.Speed=GPIO_SPEED_FREQ_HIGH;
        HAL_GPIO_WritePin(GPIOA,OLEDGND,GPIO_PIN_RESET);
      HAL_GPIO_WritePin(GPIOA,OLEDVCC,GPIO_PIN_SET);
     HAL_GPIO_Init(GPIOA, &inites);
     }        
void singnallininit()
{
    __HAL_RCC_GPIOA_CLK_ENABLE();
  inites.Pin=SDA|SCL;
  inites.Mode=GPIO_MODE_OUTPUT_PP;
    inites.Pull=GPIO_PULLUP;
    inites.Speed=GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOA,&inites);
} 
    void SDLK(uint8_t mode)
    {
        if(mode==1)
        {HAL_GPIO_WritePin(GPIOA,SDA,GPIO_PIN_SET);
             
        }
    else 
    {HAL_GPIO_WritePin(GPIOA,SDA,GPIO_PIN_RESET);
             
        }
    }
    
  void SCLK(uint8_t mode)
    {
        if(mode==1)
        {HAL_GPIO_WritePin(GPIOA,SDA,GPIO_PIN_SET);
                HAL_GPIO_Init(GPIOA,&inites);
        }
    else 
    {
        HAL_GPIO_WritePin(GPIOA,SDA,GPIO_PIN_RESET);
            HAL_GPIO_Init(GPIOA,&inites);
        }
    }
    void  oled_sencmd(u8 cmd)
    {
    u8 Sendbuff[2];
        Sendbuff[0]=0x00;
        Sendbuff[1]=cmd;
        HAL_I2C_Master_Transmit(&hi2c,address,Sendbuff,sizeof(Sendbuff),HAL_MAX_DELAY);
    }
    void oled_init()
 {
   oled_sencmd(0xAE);
    oled_sencmd(0x02);
      oled_sencmd(0x40);
      oled_sencmd(0xB0);
      oled_sencmd(0x81);
      oled_sencmd(0xCF);
      oled_sencmd(0xA1);
      oled_sencmd(0xA6);
      oled_sencmd(0xA8);
      oled_sencmd(0x3F);
      oled_sencmd(0xAD);
      oled_sencmd(0x8B);
      oled_sencmd(0x33);
      oled_sencmd(0xC8);
      oled_sencmd(0xD3);
      oled_sencmd(0x00);
         oled_sencmd(0xD5);
          oled_sencmd(0xC0);
             oled_sencmd(0xD9);
              oled_sencmd(0x1F);
                 oled_sencmd(0xDA);
                  oled_sencmd(0x12);
                     oled_sencmd(0xDB);
                      oled_sencmd(0x40);
                          oled_sencmd(0xAF);
 }


```c++
  #include "usart.h"
 #include "I2C.h"
 #include "LCD.h"
#include "OLED.h"
int main(void)  
{  
HAL_Init();                        //初始化HALStm32_Clock_Init(336,8,2,7);      //设置时钟,168Mhz
    delay_init(168);

    //初始化延时函
    while(1)
    { 
 
    singnallininit();
    i2cinit();
    delay_ms(2);
    oled_init();
 oled_text();
    }
     
}



 void oled_text()
 {
   oled_sencmd(0xB0);
     oled_sencmd(0x02);
   oled_sencmd(0x10);
     uint8_t sendbuffR[]={0x40,0XAA};
     HAL_I2C_Master_Transmit(&hi2c, address,sendbuffR,sizeof(sendbuffR),HAL_MAX_DELAY);
 }


  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-25 19:08
    关注

    【相关推荐】




    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月20日
  • 已采纳回答 2月12日
  • 创建了问题 12月25日