为什么我写的代码无法下载到程序不执行,另外
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(); //初始化HAL库
Stm32_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);
}