这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 功率监测与控制系统DIY活动开箱帖+stm32f411re使用IIC驱动OLED

共1条 1/1 1 跳转至

功率监测与控制系统DIY活动开箱帖+stm32f411re使用IIC驱动OLED测试

菜鸟
2025-05-10 12:15:30     打赏

安装软件

数据表:https://www.st.com.cn/resource/en/data_brief/nucleo-c092rc.pdf

开发工具入门:https://www.st.com.cn/resource/zh/user_manual/um1727-getting-started-with-stm32-nucleo-board-software-development-tools-stmicroelectronics.pdf

STM32 的集成开发环境:https://www.st.com.cn/zh/development-tools/stm32cubeide.html

STM32Cube 初始化代码生成器(必须安装):https://www.st.com.cn/zh/development-tools/stm32cubemx.html

STM32CubeProgrammer 软件:https://www.st.com.cn/zh/development-tools/stm32cubeprog.html

要安装至少一个STM32Cube 初始化代码生成器(经过测试至少要在6.13版以上)SetupSTM32CubeMX-6.14.1-Win软件,可以使用MDK进行调试也可以使用STM32的集成开发环境(新版需要安装在win10,不兼容win7),需要安装stlink驱动。

 image.png

https://www.st.com/en/embedded-software/stm32cubef4.html下载面向STM32f4系列的STM32Cube MCU软件包(包含HAL、底层APICMSIS、文件系统、RTOS - 以及在各类意法半导体开发板上运行的示例)

image.png 

如果使用keil需要在这个链接:https://www.keil.com/pack/Keil.STM32F4xx_DFP.3.0.0.pack下载keilTM3232f4支持包。

打开 STM32CubeMX,点击“New Project”,选择芯片型号STM32f411re。测试生成代码:

 image.png

缺失固件库,于是打开以下界面,点击对话框:

image.png

在这个链接https://www.st.com.cn/zh/embedded-software/stm32cubef4.html#get-software

下载固件库CUBEF41.28版:

 image.png

安装固件库

image.png

在生成代码时选择1.28库:

image.png

在调试下载过程中还升级了stlink驱动:

 image.png

找到原理图,查询OLED接线,将PA0SDA  PA1SCLPA4VCC  PB0GND

 image.png

打开 STM32CubeMX,点击“New Project”,选择芯片型号,STM32f411repinout界面设置PA0PA1PA4PB0,将PA0PA1设置为开漏输出,PA4PB0设置为推挽输出,时钟保持默认状态,点击GENERATE CODE自动生成初始化代码:

image.png

自动生成代码,再将OLED文件夹拷贝到工程中:

 image.png

在项目管理对话框中将文件添加到工程:

 image.png

在头文件路径中添加OLED.h

 image.png

 

I2C实现代码如下:

void IIC_delay(void)  //需要注意这个函数可以调节通信速度

{u8 t=4;

while(t--);}

void I2C_Start(void)

{OLED_SDA_Set();

OLED_SCL_Set();

IIC_delay();

OLED_SDA_Clr();

IIC_delay();

OLED_SCL_Clr();

IIC_delay();}

void I2C_Stop(void)

{OLED_SDA_Clr();

OLED_SCL_Set();

IIC_delay();

OLED_SDA_Set();}

 

void I2C_WaitAck(void)

{OLED_SDA_Set();

IIC_delay();

OLED_SCL_Set();

IIC_delay();

OLED_SCL_Clr();

IIC_delay();

}

void Send_Byte(u8 dat)

{

u8 i;

for(i=0;i<8;i++)

{

if(dat&0x80)//发送数据

{

OLED_SDA_Set();

    }

else

{

OLED_SDA_Clr();

    }

IIC_delay();

OLED_SCL_Set();

IIC_delay();

OLED_SCL_Clr();

dat<<=1;

  }

}

 

修改SDA  SCL引脚控制代码,将PA0设置为SDA,将PA1设置为SCL

#define OLED_SCL_Clr()   HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET)//SCL

#define OLED_SCL_Set()  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET)

#define OLED_SDA_Clr()  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET)//DIN

#define OLED_SDA_Set()  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET)

main()合适位置中添加代码:

 OLED_Init();

OLED_ColorTurn(0);

    OLED_DisplayTurn(0);

  while (1)

  {OLED_ShowPicture(0,0,128,64,BMP1,1);

OLED_Refresh();

HAL_Delay(100);

OLED_Clear();

OLED_ShowChinese(0,0,0,16,1);//?

OLED_ShowChinese(18,0,1,16,1);//?

OLED_ShowChinese(36,0,2,16,1);//?

OLED_ShowChinese(54,0,3,16,1);//?

OLED_ShowChinese(72,0,4,16,1);//?

OLED_ShowChinese(90,0,5,16,1);//?

OLED_ShowChinese(108,0,6,16,1);//?

OLED_ShowString(8,16,"ZHONGJINGYUAN",16,1);

OLED_ShowString(20,32,"2014/05/01",16,1);

OLED_ShowString(0,48,"ASCII:",16,1);  

OLED_ShowString(63,48,"CODE:",16,1);

OLED_ShowChar(48,48,t,16,1);//??ASCII??    

t++;

if(t>'~')t=' ';

OLED_ShowNum(103,48,t,3,16,1);

OLED_Refresh();

HAL_Delay(100);

OLED_Clear();

OLED_ShowChinese(0,0,0,16,1);  //16*16 ?

  OLED_ShowChinese(16,0,0,24,1); //24*24 ?

OLED_ShowChinese(24,20,0,32,1);//32*32 ?

  OLED_ShowChinese(64,0,0,64,1); //64*64 ?

OLED_Refresh();

  HAL_Delay(100);

   OLED_Clear();

OLED_ShowString(0,0,"ABC",8,1);//6*8 “ABC”

OLED_ShowString(0,8,"ABC",12,1);//6*12 “ABC”

  OLED_ShowString(0,20,"ABC",16,1);//8*16 “ABC”

OLED_ShowString(0,36,"ABC",24,1);//12*24 “ABC”

  OLED_Refresh();

HAL_Delay(100);

OLED_ScrollDisplay(11,4,1);

  }

当然在调试过程中还有头文件修改,数据类型重定义等工作;调试下载观察到

 image.png

 





关键词: stm32f411re     OLED    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]