
背景 本文用于记录平衡自行车的制作过程,及制作中遇到的问题;总体方案如下:采用采用STM32F103C8T6作为主控单元、MPU-6050作为位姿采集单元、0.96寸OLED显示位姿、无刷电机带动动量轮调节小车平衡、1S锂电池配合5V和12V升压模块作为电源、蓝牙模块用于和微信小程序进行无线通讯和PID调试、舵机用于控制行驶方向和支撑小车。 OLED规格及参数简介 我用的是四针脚IIC通讯的OLED,0.96寸,像素是128*64的,如下所示: ![]() ![]() OLED显示MPU-6050位姿数据 在上一篇专栏建立工程()的基础上,添加OLED驱动函数到iCode文件中,步骤参考上一篇专栏。 ![]() ![]() 在main函数中添加OLED初始化函数,如下所示:
/* USER CODE BEGIN 2 */ /* ************0.96寸OLED初始化设置************* */ char buffer[16;//float转换成char[] OLED_Init(); OLED_ON(); OLED_Clear(); OLED_ShowStr(25,0,"DIY",2); OLED_ShowCN(49, 0, 0);//攻 OLED_ShowCN(65, 0, 1);//城 OLED_ShowCN(81, 0, 2);//狮 OLED_ShowStr(10,2,"Temp:",2); OLED_ShowStr(10,4,"Pitch:",2); /* ************MPU-6050初始化设置************* */ while (MPU_Init()){ //如果初始化失败,继续初始�? printf("MPU_Init_Fail..."); } /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* ************获取和显示温度************* */ float temp = MPU_Get_Temperature()/100.0; sprintf(buffer, "%.1f", temp);//float转换成char[] OLED_ShowStr(68,2,buffer,2); /* **********获取和显示MPU-6050位姿*********** */ GetAngle(); sprintf(buffer, "%.2f", Pitch);//float转换成char[] if (Pitch>=0){ OLED_ShowStr(60,4," ",2); OLED_ShowStr(100,4," ",2); OLED_ShowStr(68,4,(unsigned char*)buffer,2); } else { OLED_ShowStr(100,4," ",2); OLED_ShowStr(60,4,(unsigned char*)buffer,2); } /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } 显示效果如下: ![]() ![]() 创建中文字库 打开字体取模软件PCtoLCD2002.exe,点击【模式】,选择字符模式。 ![]() ![]() 点击【选项】进行如下设置,定义每个汉字的显示大小为16×16像素: ![]() ![]() 输入要取模的文字,点击【生成文字】。 ![]() ![]() 将复制的内容粘贴到驱动函数库中 FONT.h 中 unsigned char F16x16[]数组中:
OLED_ShowStr(25,0," DIY",2); OLED_ShowCN(41,0,0);//攻 OLED_ShowCN(57,0,1);//城 OLED_ShowCN(73,0,2);//狮 显示效果如下: ![]() ![]() 作者:DIY攻城狮 |
新版STM32Cube for Visual Studio Code开发体验
【P-NUCLEO-53L8A1评测】存在检测之动向追踪
STM32
STM32C071RBT6外部中断LED点亮熄灭
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
【STM32N6570-DK评测】摄像头video encoder
实战经验 | STM32CubeIDE实用技巧之工程联调
【STM32H745I-DISCO】基于TouchGFX的工业控制器界面设计
【下载问题解决】关于ST官网下载软件问题解决
【STM32N6570-DK评测】开发环境及LED debug