这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【Let'sdo第1期-功率检测与控制系统DIY】-过程贴2-点灯&OLED

共2条 1/1 1 跳转至

【Let'sdo第1期-功率检测与控制系统DIY】-过程贴2-点灯&OLED

菜鸟
2025-05-15 18:26:01     打赏

本来先做了OLED的测试,后来在PPT上看到有一个基础任务1,LED定时反转,那就增加一个定时反转。

省流版:

一、定时器控制LED反转;

二、OLED显示汉字。

在做OLED显示的过程中,遇到的问题及解决方法:

1、模拟IIC控制时,GPIO输出模式设置问题:知道IIC是开漏输出,所以开始设置GPIO输出模式为上拉输出,结果不显示。通过读例程代码,发现是推挽输出。修改GPIO输出模式为推挽;

2、时钟设置:修改GPIO为推挽输出后,依然不亮。后来读代码,发现里面有Delay函数。突然想到,使用的例程是F103系列的芯片,主频是72MHz,现在使用的是F411,主频变高了。后来把主频改到72MHz,OLED顺利点亮。后来测试了一下OLED可以支持的最高主频,83MHz可以点亮,84MHz就太快了。

下面是具体过程。

1、打开STM32Cube MX,选择  通过MCU创建工程

image.png

2、找到STM32F411RET6,双击;

image.png

3、基础设置

(1)调试方式

image.png

(2)时钟,由于没有焊接外部时钟,这一步可使用默认值;

image.png

(3)GPIO设置:

通过电路图可知,LED连接PA5;

IIC可自定义,本次使用PC10、PC11。

都设置为推挽输出。

image.png

4、定时器设置,本次使用TIM3(本来想使用TIM2呢,结果一看,32位的,太浪费了);

设置时钟源,分频系数,计数值,使能自动重装载,使能TIM3中断。

image.png

image.png

5、时钟树配置,设置主频位72MHz;

image.png

6,项目管理设置(项目名称和保存路径要是英文和数字,不能出现中文,否则不能自动打开工程)

image.png

7,打开工程,编写代码。

1、LED代码

main函数内,打开定时器

	HAL_TIM_Base_Start_IT(&htim3);

中断函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim == &htim3)
	HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);

}

2、OLED代码

1)增加OLED文件夹

image.png

2)、复制网上找的STM32F103代码到相应文件夹

image.png

3)、更改宏定义,适配自己的接口,PC11 为SCLK,PC10为SDIN

#define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11, GPIO_PIN_RESET)//CLK
#define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11, GPIO_PIN_SET)

#define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOC,GPIO_PIN_10, GPIO_PIN_RESET)//DIN
#define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOC,GPIO_PIN_10, GPIO_PIN_SET)

4)、main文件显示

main函数中

	OLED_Init();

循环函数中显示内容

		OLED_ShowChinese(0,0,0,16);
		OLED_ShowChinese(16,0,1,16);
		OLED_ShowChinese(32,0,2,16);
		OLED_ShowChinese(48,0,3,16);
		OLED_ShowChinese(64,0,4,16);
		OLED_ShowChinese(80,0,5,16);
		OLED_ShowChinese(96,0,6,16);
		OLED_ShowChinese(112,0,7,16);
		
		OLED_ShowChinese(0,16,9,16);
		OLED_ShowChinese(16,16,10,16);
		OLED_ShowChinese(64,16,11,16);
		OLED_ShowChinese(80,16,12,16);
		
		OLED_ShowChinese(0,32,13,16);
		OLED_ShowChinese(16,32,14,16);
		OLED_Refresh();

显示结果:

image.png

显示完结果,发现一个问题:

参考别人的,是在主函数初始化中可以显示,我的不行,必须在while循环中显示。后面再研究研究




关键词: 功率     检测    

院士
2025-05-15 18:37:08     打赏
2楼
我倒是觉得楼主做得很不错了

共2条 1/1 1 跳转至

回复

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