DDZZ669

  • 2024-09-15
  • 发表了主题帖: CMake构建实战读书笔记02-简单构建与CMake基础语法

    本篇来学习《CMake构建实践 项目开发卷》的第1~3章中的一些知识点。 # 1 简单构建 ## 1.1 构建静态库 按照书中内容,编写测试代码: a.c ```c #include void a() {     printf("a\n"); } ``` b.c ```c #include void b() {     printf("b\n"); } ``` libab.h ```c void a(); void b(); ``` main.c ```c #include "libab.h" #include int main() {     a();     b();         return 0; } ``` 然后编写Makefile来进行编译 ```makefile main: main.o libab.a         gcc main.o -o main -L. -lab #链接静态库并生成主程序     main.o: main.c         gcc -c main.c -o main.o #c文件生成目标文件     libab.a: a.o b.o         ar rcs libab.a a.o b.o #归档,将a.o和b.o打包为静态库     a.o: a.c         gcc -c a.c -o a.o #c文件生成目标文件     b.o: b.c         gcc -c b.c -o b.o #c文件生成目标文件         clean:         rm *.o *.a main || true ``` 编译运行的结果如下: ## 1.2 构建动态库 动态库的测试代码可以直接使用刚才静态库的测试代码 只需要修改Makefile ```makefile main: main.o libab.so         gcc main.o -o main -L. '-Wl,-R$$ORIGIN' -lab #链接静态库并生成主程序     main.o: main.c         gcc -c main.c -o main.o #c文件生成目标文件     libab.so: a.o b.o         gcc -shared a.o b.o -o libab.so #生成动态库     a.o: a.c         gcc -fPIC -c a.c -o a.o #c文件生成目标文件     b.o: b.c         gcc -fPIC -c b.c -o b.o #c文件生成目标文件         clean:         rm *.o *.so main || true ``` 编译运行的结果如下: # 2 安装CMake 本篇的测试环境的Ubuntu20.04,默认是没有CMake的 可以使用如下指令来安装CMake ```sh sudo apt-get install cmake ``` 安装完成之后,可以写一个cmake文件进行简单测试: # 3 CMake基础语法 ## 3.1 CMake程序种类 CMake程序根据文件名,分为两类: - 名为CMakeLists.txt的文件:用于组织构建项目源程序的目录结构 - 扩展名为.cmake的程序:又可分为脚本程序和模块程序两种 ## 3.2 CMake注释 CMake注释可分为单行注释嗯和多行注释两种 ```cmake # 单行注释 #[[ 多行注释 可以换行]] ``` ## 3.3 命令调用 CMake的命令调用类似于C语言中的函数调用。 先书写命令名称,后面括号里的命令参数 ```cmake message(a b c) # 输出 “abc” ``` ## 3.4 命令参数 ### 3.4.1 引号参数 用引号包裹在内的参数 ```cmake message("hello cmake!") ``` ### 3.4.2 非引号参数 未被引号包裹的参数,这种参数不能包含任何空白字符,也不能包含圆括号,#符号,双引号或反斜杠 ```cmake message("x;y;z") # 引号参数 message(x y z) # 多个非引号参数 message(x;y;z) # 非引号参数 ``` ### 3.4.3 括号参数 ```cmake message([===[ abc def ]===]) ``` ## 3.5 变量 ### 3.5.1 普通变量 通过set方式进行变量的定义。 示例代码: ```cmake function(f)         set(a "我是修改后的a")         set(b "我是b")         set(c "我是c" PARENT_SCOPE) endfunction() set (a "我是a") f() message("a: ${a}") message("b: ${b}") message("c: ${c}") ``` 运行结果 分析运行结果: - 第一行是输出变量a的值,即全局中set的a的值 - 第二行是输出变量b的值,b在全局中没有定义,输出为空 - 第三行是输出变量c的值,c虽然在全局中没有定义,但在函数中,c通过PARENT_SCOPE将其定义到父级的作用域中 ### 3.5.2 缓存变量 缓存变量比普通变量多了CACHE和FORCE参数,缓存变量具有全局的作用域,因此不需要PARENT_SCOPE参数。 示例代码: ```cmake cmake_minimum_required(VERSION 3.16) project(MatchOrder) set(a 缓存变量 CACHE STRING "") set(a 普通变量) message("\${a}: ${a}") message("\$CACHE{a}: $CACHE{a}") ``` 运行结果: ### 3.5.3 环境变量 环境变量具有全局的作用域,不支持使用参数列表来定义值。 main.cmake ```makefile message("main \$ENV{PATH}: $ENV{PATH}") set(ENV{PATH} "path") message("main \$ENV{PATH}: $ENV{PATH}") execute_process(         COMMAND ${CMAKE_COMMAND} -P setenv.cmake         OUTPUT_VARIABLE out ) message("${out}") message("main \$ENV{PATH}: $ENV{PATH}") ``` 这里将PATH环境变量设置为“path”,查看PATH的值,然后再调用setenv.cmake程序后,查看PATH的值 setenv.cmake的内容如下,就是清空了PATH的值 ```makefile message("before setenv \$ENV{PATH}: $ENV{PATH}") set(ENV{PATH}) #清空 message("after setenv \$ENV{PATH}: $ENV{PATH}") ``` 运行结果如下: 分析运行结果: - PATH默认我Linux系统的环境变量 - 在main.cmake中修改之后,变为了path - 在setenv.cmake子进程中的PATH,使用的是父进程的PATH,因此也是path - 在setenv.cmake中将PATH清空 - 再回到主进程查看PATH,仍为主进程修改的“path” 这是因为,CMake的set命令仅对当前CMake进程有些,因此setenv.cmake中将PATH清空,不会影响setenv.cmake中PATH的值。 ## 3.6 列表 列表,即用分号隔开的字符串, ## 3.7 控制结构 类似于C语言中的if、while、for语句 ### 3.7.1 if条件分支 if条件分支的语法 ```cmake if()         ... elseif()         ... else()         ... endif() ``` ### 3.7.2 while判断分支 while判断分支的语法 ```cmake while()         ...         ...break()         ...         ...continue()         ... endwhile() ``` ### 3.7.3 foreach遍历循环 foreach遍历循环的语法 ```cmake foreach( )         ... endforeach() ``` 例子 ```cmake foreach(x A;B;C D E F)         message("x: ${x}") endforeach() message("---") set(list X;Y;Z) foreach(x ${list})         message("x: ${x}") endforeach() ``` 运行结果如下: ## 3.8 条件语法 条件语法,即判断某个条件为真或假 ### 3.8.1 常量、变量和字符串条件 常量条件,CMake中支持的真和假的常量定义如下 | 常量类型 | 常量值                                           | 条件结果 | | -------- | ------------------------------------------------ | -------- | | 真值常量 | 1、ON、YES、TRUE、Y,或非零数值                  | 真       | | 假值常量 | 0、OFF、NO、FALSE、Y、IGNORE、空字符串、NOTFOUND | 假       | ### 3.8.2  逻辑运算 三种逻辑运算: - 与:AND - 或:OR - 非:NOT ### 3.8.3 单条件参数 根据单个参数进行判断的条件,例如 ```cmake set(a 1) if(DEFINED a)         meaasge("DEFINED a为真") endif() ``` 这里if中的a是一个参数 ### 3.8.4 双条件参数 通过两个参数的取值来判断的条件,例如 ```cmake set(a 1) if(2 GREATER a)         meaasge("2 GREATER a为真") endif() ``` 这里if中的2和a是两个参数 ### 3.8.5 括号和优先级 CMake中条件语法求值的优先级从高到低: - 当前最内层括号中的条件 - 单参数条件 - 双参数条件 - 逻辑运算条件NOT - 逻辑运算条件AND - 逻辑运算条件OR ## 3.9 命令定义 可以自定义一些宏,以及函数 ### 3.9.1 宏定义 宏定义的语法,可以传参数 ```cmake macro( [...])         ... endmacro() ``` ### 3.9.2 函数定义 函数定义的语法,可以传参数 ```cmake function( [...])         ... endfunction() ``` ### 3.9.3 参数的访问 - ${ARGC}:表示参数的个数 - ${ARGV}:表示完整的实参列表 - ${ARGN}:表示无对应形式参数的实际参数列表 - ${ARGV0}:表示第1个参数,依此类推 实例代码: ```cmake macro(my_macro p)         message("ARGC: ${ARGC}")         message("ARGV: ${ARGV}")         message("ARGN: ${ARGN}")         message("ARGV0: ${ARGV0}, ARGV1: ${ARGV1}") endmacro() function(my_func p)         message("ARGC: ${ARGC}")         message("ARGV: ${ARGV}")         message("ARGN: ${ARGN}")         message("ARGV0: ${ARGV0}, ARGV1: ${ARGV1}") endfunction() my_macro(x y z) my_func(x y z) ``` 运行结果如下: 宏与函数的运行结果类似,这里开分析宏的运行结果: - ARGC表示接收到的参数个,有3个参数 - ARGV表示完整的实参,为x;y;z - ARGN表示无对应形式参数的实参,这里的宏在定义的时候,仅定义了一个参数p,实际传入的是x;y;z,因此x对应p,无对应的实参为y;z - ARGV0和ARG1为传入的前两个参数 # 4 总结 本篇介绍了前3章的内容,先是使用gcc与makefile学习简单构建,并在Linux中安装CMake工具,然后开始学CMake的一些基础语法,并进行实际测试。

  • 2024-09-08
  • 发表了主题帖: CMake构建实战读书笔记01-全书内容概览

    收到《CMake构建实践 项目开发卷》了,感谢EE。 1 纸质书实物 看下书的正面 反面 随便翻开一页 2 全书内容概览 2.1 章节介绍 全书分为11章 2.2 第1~3章 第1~3章属于基础,第1章还未涉及到CMake 2.2 第4~6章 第4~6章也属于基础,第4章是常用命令,第5章是一个简单的实践,第6章是CMake构建初探 2.2 第7~9章 第7~9章应该属于CMake的一些进阶知识 2.2 第10~11章 第10章是CMake的策略与兼容介绍,第11章是一个综合性的CMake实践  

  • 2024-08-31
  • 回复了主题帖: 读书入围名单: 《CMake构建实战:项目开发卷》

    个人信息无误,确认可以完成阅读分享计划

  • 2024-05-18
  • 发表了主题帖: 【2023 DigiKey大赛参与奖】开箱帖 舵机云台+RGB8x8+RP2040板子

    参与奖换了3样: 舵机云台x2,RGB8x8,RP2040板子   这个是舵机云台,散件,需要自己组装,有说明书 这个是RGB8x8点阵,需要搭配树莓派使用 这个是RP2040主控的一个板子 舵机云台组装好之后的样子 点阵屏和树莓派组装到一起的样子 以后有时间再玩    

  • 2024-01-31
  • 回复了主题帖: 【年终总结颁奖】2024,让我们保持热爱,奔赴下一场山海!

    已确认个人信息无误

  • 2024-01-19
  • 回复了主题帖: EEWorld 社区 2023年度人物颁奖

     个人信息无误。感谢EE论坛。

  • 2024-01-14
  • 回复了主题帖: “年终总结” 我会是个努力奔跑的人

    lugl4313820 发表于 2024-1-14 20:51 大佬什么时候再来一个满分试用项目呀,你的帖子那真是太优秀了。 谢谢,有机会再参与

  • 发表了主题帖: “年终总结” 我会是个努力奔跑的人

    时间如白驹过隙,转眼已到了2024,抽出时间,总结下2023。 **2015**年加入EE大家庭 23年总共发表了**25**篇帖子 **2023年个人总结**: ①**完成了多少的目标?** 2023没有专门制订详细目标,只在运动健康APP上设置了一个跑步目标,超额完成。 2024打算简单罗列一下生活学习上的目标,看看会不会有什么神奇的效果。 ②**学到了哪些新的知识?** 学习了UML与状态机的一些知识(如帖子分享)。 学习使用了RSIC-V架构的Linux嵌入式系统的应用开发(如帖子分享)。 学习使用了STM32MP157系列运行Linux的开发使用(如帖子分享)。 ③**工作和生活有了什么样的变化?** 工作上,仍然正常进行,项目有序推进。 生活上,来杭漂泊已多年,整体上一如既往;2023终于不再受疫情影响,自由出行回归正常,很好。 ④**谁给了我帮助,有谁鼓励了我,有谁给我留下了深刻的印象?** 这里表扬下敬业的EEworld的管理员,本年能参与两个论坛活动,都是EE管理员单独发消息通知。 **2024整装出发**: ①**给自己设立的目标是什么?** 目标就是尽量实现2024设置的目标,具体的目标暂不展开描述,总体上,在工作、学习、生活上还要努力奔跑。 2024,除了专业知识的学习,可能更多会偏向于提高自身的其它技能,如社交。 ②**对自己的工作、生活有哪些规划?** 工作:提高专业技能,做好产品。 生活:而立之年,期遇良缘。 2024,一起加油~

  • 回复了主题帖: 基于STM32MP157D-DK1的智慧家居控制器

    作品源码显示已审核,但还是点不开,管理员帮忙看下什么情况哈 @lightxixi 资源名称:基于STM32MP157D-DK1的智慧家居控制器-项目源码 链接:https://download.eeworld.com.cn/detail/DDZZ669/630690 这里没有显示在审核: 点击进入又显示审核中: 消息通知中显示已审核: “点击此处查看详情”是这个界面:    

  • 2024-01-09
  • 回复了主题帖: 基于STM32MP157D-DK1的智慧家居控制器

    qiao--- 发表于 2024-1-9 21:35 大佬 资源链接无效,麻烦大佬更新一下 显示还在审核中,审核完链接应该会自动生效

  • 2024-01-08
  • 回复了主题帖: 基于STM32MP157D-DK1的智慧家居控制器

    秦天qintian0303 发表于 2024-1-8 17:29 杭州没有暖气,这屋内只有16度,这的多么冷啊   还好,还好

  • 2024-01-07
  • 发表了主题帖: 基于STM32MP157D-DK1的智慧家居控制器

    本帖最后由 DDZZ669 于 2024-1-7 23:09 编辑   基于STM32MP157D-DK1的智慧家居控制器   作者:码农爱学习(DDZZ669)    一、作品简介 本项目为基于STM32MP157D-DK1的智慧家居控制器,用到的板卡为ST的STM32MP157D-DK1开发板,其芯片为STM32MP157,具有2个A7内核和1个M4内核。作品的实物照片如下: 图 1 作品照片 智慧家居控制器的界面拟采用Qt设置,外接HDMI显示器作为交互屏幕,再外接温湿度传感器(或通过无线节点接收温湿度数据)、摄像头等外设,实现如网络天气展示、室内温湿度展示、家中电器控制、安防监控、音乐视频播放娱乐等功能。   二、系统框图 本项目的系统结构如下: 图 2 系统结构图 主控为STM32MP157,内含两个A7核和一个M1核。A7核运行Linux系统,实现Qt界面程序的运行,摄像头数据的采集等,与无线节点进行TCP通信灯;M4核运行裸机系统或RTOS系统,可用于外接传感器以及外接家中电器的控制开关;A7核与M4核采用OpenAMP通信框架实现异核通信。 此外,STM32MP15D-DK1板块通过插入网线可连接互联网,实现互联网信息(网络天气、网络时间等)的获取;通过家中的路由器,又可与其它无线节点进行通信,例如与温湿度节点通信,可获取温湿度数据,与灯、风扇灯无线节点通信,可控制其开关。   三、各部分功能说明 本项目的功能,主要通过屏幕上的操作界面来呈现,目前可展示的功能包括: 网络天气信息的展示(展示当前城市当天的天气、未来7天的天气等) 家中温湿度的展示(当前温度湿度、历史数据曲线图) 家中电器的控制(灯的控制、风扇的控制) RGB氛围灯的颜色调节控制 摄像头监控(USB摄像头) 音乐播放(播放本地音乐、歌词展示灯) 视频播放(播放本地视频) 时间显示(时钟形式) 图 3 主操作界面 3.1城市天气显示 STM32MP157D-DK1插入网线,可以连接互联网来实现对网络天气信息的获取。 通过http协议获取指定城市的天气数据,包括今天的天气类型,最高最低温度,以及最近7天的天气等。原始数据是json格式的,需要从json数据中解析出天气、温度等信息,然后将这些信息显示到屏幕中。 最终的Qt天气界面如下,点击主界面的天气图标即可进入到如下的天气界面。 上半部分为今天的天气,下半部分为近7天的天气(通过左右滑动可查看后面的天气),通过左上角的返回按钮可回到主界面。 图 4 天气信息界面 3.2室内温湿度显示 除了显示不同城市的天气数据,家庭环境中的温湿度也值得我们关注,考虑有两种方案实现温湿度数据的采集: 方案一:M4核通过IIC接口外接DHT11温湿度传感器采集数据,再通过OpenAMP通信机制将数据发给A7核,最终在Qt界面展示温湿度数据。 方案二:通过无线节点(如ESP8266)外接DHT11温湿度传感器,将数据通过无线TCP直接发送给A7核,最终在Qt界面展示温湿度数据。 由于开发时间紧张,OpenAMP通信机制还在学习中,而方案二的无线方式也更新灵活,本项目目前采用方案二的无线通信方式。 温湿度数据展示的Qt界面如下,STM32MP157D在连接到ESP8266无线节点获取到实时的温湿度数据后,可以显示实时的温度和湿度,如下: 图 5 温湿度信息界面 另外,温湿度的历史数据,可以通过曲线图展示变化趋势,这是温度曲线: 图 6 实时温度曲线图 这是湿度曲线(人为触摸温湿度传感器制造变化数据): 图 7 实时湿度曲线图 3.3家居电器控制 家居电器的控制界面设计如下,目前设计了灯的控制和风扇的控制:           图 8 家中电器控制界面 家中电器的控制,与刚才介绍的温度度传感器类似,也可以考虑两种方案: 方案一:家中电器的控制开关与STM32MP157的M核所控制的引脚相连,A核上运行的Qt操作指令通过异核通信将执行发给M核来控制电器开关。 方案二:家中电器与无线节点(如ESP8266)相连接,Qt操作指令通过无线通信将指令发给无线节点来控制电器开关。 除了简单的开关控制,家中可能还会有RGB氛围灯需要控制,这里也设置了颜色调节操作界面,如下:   图 9 RGB氛围灯颜色调节界面 3.4视频监控 智能家居系统中,视频监控的功能也是必不可少的,本项目通过外接USB摄像头,实现视频监控功能,可以实时查看摄像头的画面。 设计的Qt显示界面和实际的演示效果如下: 图 10 视频监控界面 3.5音乐&视频娱乐 设计了音乐播放器和视频播放器,用于智慧家居中的娱乐功能。音乐播放器的界面如下,具有基础的音乐播放、上一首下一首切换、歌词展示等。 图 11 音乐播放器界面 右下角可展开音乐列表子界面: 图 12 音乐列表 下面是设计的视频播放器的界面: 图 13 视频播放器界面 3.6时钟 设计了一个钟表形状的时钟,通过获取Linux系统实际,可展示当前的时间: 图 14 时钟界面 四、作品源码 源码已上传EEWord下载中心,资源名称: 链接:https://download.eeworld.com.cn/detail/DDZZ669/630690 源码结构   主体代码采用Qt编程,运行在STM32MP157的A7核的Linux系统中,源码位于01-stm32mp157_qt目录中。 该Qt程序内含多个功能,通过子文件夹分类存放: App/QtUi/Skin/MyApp.pro:主体框架部分 Weather:网络天气功能代码 DHT11:温湿度功能代码 LEDFan:电器控制功能代码 RGBLed:RGB氛围灯代码 USBCamera:USB摄像头代码 MusicPlayer:音乐播放器代码 VideoPlayer:视频播放器代码 Clock:时钟代码 ESP8266作为无线节点,外接DHT11温湿度传感器采集数据,通过TCP发送给STM32MP157。 ESP8266采用Arduino编程,源码位于02-dth11tcp目录中。   五、作品功能演示视频 演示视频:基于STM32MP157D-DK1的智慧家居控制器 视频链接1:https://training.eeworld.com.cn/video/38948 视频链接2:https://www.bilibili.com/video/BV1V94y1u7EK 六、项目总结 本项目为基于STM32MP157D-DK1的智慧家居控制器,通过外接HDMI显示器作为操作屏幕,通过编写Qt程序实现智能家居的整体界面,外接摄像头、传感器、与无线节点通信等,实现具体的数据获取与各种控制功能、信息服务功能等。 在整个项目开发中,学习了STM32MP157这款芯片的使用。STM32MP157D-DK1具有ARM A7和Cortex M4双核架构,A7的开发过程中,首先学习了固件烧录,为了进行Qt开发,重新编译了具有Qt功能的系统源码和SDK,从而继续实现Qt程序的开发。M4核的开发过程中,学习了STM32CubeIDE的使用与基础的点灯程序编写,关于A7核与M4核的通信还在学习中。 在开发学习中,将一些开发经验通过文章的形式分享,链接如下: 【DigiKey创意大赛】STM32MP157D-DK1开箱 【DigiKey创意大赛】STM32MP157D固件烧录 【DigiKey创意大赛】STM32MP157D构建Qt镜像 【DigiKey创意大赛】STM32MP157D Qt程序编译运行 【DigiKey创意大赛】STM32MP157D M核程序开发 七、其他 文档下载:  

  • 加入了学习《基于STM32MP157D-DK1的智慧家居控制器》,观看 基于STM32MP157D-DK1的智慧家居控制器

  • 上传了资料: 基于STM32MP157D-DK1的智慧家居控制器-项目源码

  • 发表了主题帖: 【DigiKey创意大赛】STM32MP157D M核程序开发

    之前的文章,都是在A核上进行Linux开发,本篇介绍M核程序的开发。 # 1 新建工程 文件,新建,STM32工程 在搜索框输入STM32MP157D后,选STM32MP157DAC1: 点Next之后,设置工程的名称,例如01_LED: 然后来到这个界面: # 2 配置引脚 使用板子上的LD7来测试,其对应的是PH7引脚: 将PH7引脚设置为Output模式,并右键设置Pin Reserved,选择Cortex-M4 FW 点击左边的System Core,再点到GPIO,可以进行GPIO配置,如上下拉、速率等: 然后时钟可以不用再配置。 项目管理这里,注意勾选如下两项: 最后Ctrl+S保存,会提示要生成代码,点Yes即可。 # 3 修改代码并编译 在main.cpp中,添加控制LED亮灭逻辑代码: ```c HAL_GPIO_WritePin(LD7_GPIO_Port,LD7_Pin,GPIO_PIN_SET); HAL_Delay(500); HAL_GPIO_WritePin(LD7_GPIO_Port,LD7_Pin,GPIO_PIN_RESET); HAL_Delay(500); ``` 点击小锤子图标编译。 # 4 烧录程序 将开发板的BOOT配置BOOT0=OFF,BOOT1=ON。 然后板子的ST-LINK接口连接板子到电脑,配置ST-Link 菜单中Run中选择Debug Configurations... 切换到调试器窗口,选择thru JTAG/SWD link: 然后点击 Aply,Debug 开始调试。 全速运行后,可以看到LD7的橘色灯会循环亮灭:

  • 2024-01-01
  • 回复了主题帖: 【DigiKey创意大赛】STM32MP157D Qt程序编译运行

    Jacktang 发表于 2023-12-30 22:21 执行成功后,会生成sdk目录,怎么判断是成功呢 sdk目录会出现一些文件,最后编译qt程序时也能正常编译

  • 2023-12-30
  • 发表了主题帖: 【DigiKey创意大赛】STM32MP157D Qt程序编译运行

    本帖最后由 DDZZ669 于 2023-12-30 20:50 编辑 # 1 编译安装SDK 编译SDK,在Ubuntu中执行如下指令: ```sh bitbake st-example-image-qtwayland -c populate_sdk ``` 执行成功后,会生成sdk目录,如下: 执行sdk中的脚本,来安装SDK到指定目录: ```sh ./tmp-glibc/deploy/sdk/st-example-image-qtwayland-openstlinux-weston-stm32mp1-x86_64-toolchain-4.2.1-snapshot.sh -y -d /home/xxpcb/myTest/STM32MP157/STM32MPU-Ecosystem-v5.0.0/Developer-Package/SDK ``` # 2 交叉编译Qt 例如编译examples例程中的analogclock程序: ```sh cd ~/myTest/STM32MP157/STM32MPU-Ecosystem-v5.0.0/Developer-Package/SDK/sysroots/cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi/usr/share/examples/gui . ~/myTest/STM32MP157/STM32MPU-Ecosystem-v5.0.0/Developer-Package/SDK/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi qmake && make ``` 最后编译生成analogclock文件 # 3 在板子中运行Qt 将analogclock文件拷贝到板子中运行,效果如下:

  • 2023-12-24
  • 发表了主题帖: 【DigiKey创意大赛】STM32MP157D构建Qt镜像

    本篇来介绍Qt环境配置,需要重新编译带有Qt环境的镜像 # 1 Distribution包的构建 ## 1.1 repo初始化 ```sh cd ~/myTest/STM32MP157/STM32MPU-Ecosystem-v5.0.0/Distribution-Package #repo init python3 ~/bin/repo init -u https://github.com/STMicroelectronics/oe-manifest.git -b refs/tags/openstlinux-6.1-yocto-mickledore-mp1-v23.06.21 #使用国内镜像源 export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo' #repo sync python3 ~/bin/repo sync ``` 初始化完成后,会有一个layers文件夹 ## 1.2 构建系统初始化 首先初始化OpenEmbedded构建环境 ```sh DISTRO=openstlinux-weston MACHINE=stm32mp1 source layers/meta-st/scripts/envsetup.sh ``` 可能需要安装一些依赖: ```sh sudo apt-get update sudo apt-get install build-essential chrpath diffstat gawk gcc-multilib libegl1-mesa libmpc-dev libsdl1.2-dev libssl-dev pylint python3-git python3-jinja2 python3-pip socat texinfo xterm zstd ``` 然后再执行bitbake构建系统 ```sh bitbake st-example-image-qtwayland ``` 构建成功后,可以在deploy/image/stm32mp1目录下看到生成的镜像和相关文件 # 2 烧录 使用这个FlashLayout_sdcard_stm32mp157d-dk1-optee.tsv烧录脚本 与上一篇介绍的烧录方式一样,进行烧录到SD卡。 烧录完成后,搜索板子里qt相关文件。 可以看到搜出需要qt相关的文件,说明是支持qt的系统。

  • 2023-12-10
  • 回复了主题帖: 【DigiKey创意大赛】STM32MP157D-DK1开箱

    秦天qintian0303 发表于 2023-12-10 09:20 需要一个屏      可以接HDMI显示屏

  • 发表了主题帖: 【DigiKey创意大赛】STM32MP157D固件烧录

    本篇介绍STM32MP157D-DK1开发板如何烧录官方固件。 #  1 烧录准备工作 ## 1.1 安装STM32CubeProgrammer 需要安装在Ubuntu虚拟机中。 先下载STM32CubeProgrammer软件:https://www.st.com/en/development-tools/stm32cubeprog.html#get-software 解压安装,安装时会有界面形式的安装提示: ```sh unzip en.stm32cubeprg-lin-v2-15-0.zip ls ./SetupSTM32CubeProgrammer-2.15.0.linux ``` 安装完成后,设置环境变量 ```sh export PATH=/home/xxpcb/myTest/STM32MP157/tool/cubeprog/bin:$PATH ``` ## 1.2 安装USB serial link for flashing 安装命令: ```sh sudo apt-get install libusb-1.0-0 ``` 然后将一些文件拷贝到/etc/udev/rules.d中: ```sh cd ~/myTest/STM32MP157/tool/cubeprog/Drivers/rules sudo cp *.* /etc/udev/rules.d/ ``` ## 1.3 下载镜像 下载STM32MP1 Starter Package镜像,地址https://www.st.com/en/embedded-software/stm32mp1starter.html#get-software 然后拷贝到Ubuntu中并解压: ```sh cd /home/xxpcb/myTest/STM32MP157/STM32MPU-Ecosystem-v5.0.0/Starter-Package tar xvf en.flash-stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21.tar.gz ``` 二进制文件和 Flash 布局文件位于stm32mp1目录中: # 2 烧录 ## 2.1 连接板子与电脑 板子插入SD卡,BOOT拨码开关都拨到0,连接电源线,连接Type-C数据线,按下复位键,Type-C数据线是烧录线,连接Ubintu虚拟机,选DFU这个: ## 2.2 命令行烧录 进入到下载的固件目录 ```sh cd ~/myTest/STM32MP157/STM32MPU-Ecosystem-v5.0.0/Starter-Package/stm32mp1-openstlinux-6.1-yocto-mickledore-mp1-v23.06.21/images/stm32mp1 ``` 查看烧录工具的版本和板子连接信息: ```sh STM32_Programmer_CLI --h STM32_Programmer_CLI -l usb ``` 使用如下命令进行烧录: ```sh STM32_Programmer_CLI -c port=usb1 -w flashlayout_st-image-weston/optee/FlashLayout_sdcard_stm32mp157d-dk1-optee.tsv ``` 烧录成功后的打印信息如下: BOOT拨码恢复到之前的从SD卡启动的状态,连接HMDI显示器查看效果: # 3 总结 本篇介绍了STM32MP157D-DK1开发板烧录官方固件的详细过程,并演示烧录后的效果。

最近访客

< 1/6 >

统计信息

已有634人来访过

  • 芯积分:1842
  • 好友:2
  • 主题:132
  • 回复:152

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言