社区首页
技术讨论创新帖
全部新帖
资料区
社区活动
联系管理员
★ 社区积分制度
★ 新手必读
★ 申请版主★
首页
|
电子技术
|
嵌入式
模拟电子
单片机
电源管理
传感器
半导体
电子应用
|
工业控制
物联网
汽车电子
网络通信
医疗电子
手机便携
测试测量
安防电子
家用电子
机器人
新能源
电子头条
|
社区
|
论坛
测评
博客
大学堂
|
下载
|
下载中心
电路图
精品文集
电路图
|
参考设计
|
Datasheet
|
活动
|
直播
datasheet
datasheet
文章
搜索
登录
注册
论坛
切换旧版
电子工程世界-论坛
»
论坛
›
电子技术交流
›
单片机
›
stm32/stm8
›
【STM32F411Nucleo测评】modbus&LVGL 屏显从站
返回列表
发新帖
回复
阅
809
|
回
1
pomin
当前离线
一粒金砂(中级)
最后登录
2024-9-13
在线时间
18 小时
威望
161分
芯积分
222分
(兑换)
E金币
0枚
(兑换)
(兑换)
好友
0
pomin
60
帖子
1
TA的资源
一粒金砂(中级)
+ 好友
私信
发表于2024-3-8 21:18
显示全部楼层
【STM32F411Nucleo测评】modbus&LVGL 屏显从站
[复制链接]
> 在电机应用中,尝尝需要获知电机的运行参数,例如转速、温度等,许多驱动板也会带有屏显,或者通过modbus连接到上位机或者组态屏来监控电机状态。本文使用 LVGL 和 Freemodbus 库制作了一个带屏线从站的 demo ## 往期链接 [【STM32F411Nucleo测评】开箱,搭建开发环境,串口输出](https://bbs.eeworld.com.cn/thread-1272849-1-1.html) [【STM32F411Nucleo测评】驱动 1.3 寸 LCD 屏幕](https://bbs.eeworld.com.cn/thread-1272852-1-1.html) [【STM32F411Nucleo测评】移植多功能按键驱动库](https://bbs.eeworld.com.cn/thread-1273453-1-1.html) [【STM32F411Nucleo测评】移植 Freemodbus 库](https://bbs.eeworld.com.cn/thread-1273454-1-1.html) [【STM32F411Nucleo测评】移植 LVGL 界面库](https://bbs.eeworld.com.cn/thread-1273455-1-1.html) 在前文的介绍中,已经完成了对 LVGL 和 Freemodbus 的移植,下面介绍做一个上层应用——modbus LVGL 屏显从站的 demo 制作。 ## GUI Guider 设计界面 GUI Guider 是 NXP 给 LVGL 开发的可视化界面编辑、模拟器,所见即所得,同时也可以在此之上完成对于时间、定时器、界面切换任务的添加,这里绘制了一个 demo 界面,有两个按键、一个滑条和一个标签文本。 设计的操作逻辑如下: - 按下 Down 按键减小速度、Up 按键增大速度 - 滑条可以百分比放缩显示当前速度 - 标签文本显示当前速度
对于上述的功能写代码当然是比较容易实现的,但是这里是在 GUI Guider 中添加这些事件和任务的响应代码。 按下 Down 按键减小速度、Up 按键增大速度时对应的是 Click 事件,这里添加 Click 的事件代码,当 Down 按下后会设置标签文本并且修改滑条的位置 ```c unsigned int speed = 1000; ``` ```c speed-=10; lv_label_set_text_fmt(guider_ui.screen_label_1, "Speed: %dRPM", speed); lv_slider_set_value(guider_ui.screen_slider_1, speed / 16, LV_ANIM_ON); ```
类似的, Up 按键的 Click 事件添加代码 ```c speed+=10; lv_label_set_text_fmt(guider_ui.screen_label_1, "Speed: %dRPM", speed); lv_slider_set_value(guider_ui.screen_slider_1, speed / 16, LV_ANIM_ON); ```
然后在 GUI Guider 中仿真一下,与预期的想法一致,然后生成代码加入到 keil 工程中
添加的文件如下,当然用别的字体的话字体文件跟这个肯定名字不一样
然后就可以把生成的界面代码加载起来了,先在 main.c 中定义一个全局变量 ```c lv_ui guider_ui; ``` 然后在 while(1) 之前加载 GUI Guider 绘制的界面 ```c setup_ui(&guider_ui); ``` 编译烧录到开发板
此时,这个按键是没法操作的,因为在仿真器中加入的是 Windows 的输入设备,在 MCU 端还需要再把按键注册到 LVGL 的输入设备中。 编写 lv_port_indev.c 的代码如下,主要就是在 button_is_pressed 函数中获取按键的电平状态,在初始化时定义按键到 btn_points,按键按下时相当于对应的坐标点被点击。 ```c /*Copy this file as "lv_port_indev.c" and set this value to "1" to enable content*/ #if 1 /********************* * INCLUDES *********************/ #include "lv_port_indev.h" #include "lvgl/lvgl.h" /********************* * DEFINES *********************/ /********************** * TYPEDEFS **********************/ /********************** * STATIC PROTOTYPES **********************/ static void button_init(void); static void button_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data); static int8_t button_get_pressed_id(void); static bool button_is_pressed(uint8_t id); /********************** * STATIC VARIABLES **********************/ lv_indev_t * indev_button; static int32_t encoder_diff; static lv_indev_state_t encoder_state; /********************** * MACROS **********************/ /********************** * GLOBAL FUNCTIONS **********************/ void lv_port_indev_init(void) { /** * Here you will find example implementation of input devices supported by LittelvGL: * - Touchpad * - Mouse (with cursor support) * - Keypad (supports GUI usage only with key) * - Encoder (supports GUI usage only with: left, right, push) * - Button (external buttons to press points on the screen) * * The `..._read()` function are only examples. * You should shape them according to your hardware */ static lv_indev_drv_t indev_drv; /*------------------ * Button * -----------------*/ /*Initialize your button if you have*/ button_init(); /*Register a button input device*/ lv_indev_drv_init(&indev_drv); indev_drv.type = LV_INDEV_TYPE_BUTTON; indev_drv.read_cb = button_read; indev_button = lv_indev_drv_register(&indev_drv); /*Assign buttons to points on the screen*/ static const lv_point_t btn_points[2] = { {60, 60}, /*Button 0 -> x:10; y:10*/ {180, 60}, /*Button 1 -> x:40; y:100*/ }; lv_indev_set_button_points(indev_button, btn_points); } /*------------------ * Button * -----------------*/ /*Initialize your buttons*/ static void button_init(void) { /*Your code comes here*/ } /*Will be called by the library to read the button*/ static void button_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data) { static uint8_t last_btn = 0; /*Get the pressed button's ID*/ int8_t btn_act = button_get_pressed_id(); if(btn_act >= 0) { data->state = LV_INDEV_STATE_PR; last_btn = btn_act; } else { data->state = LV_INDEV_STATE_REL; } /*Save the last pressed button's ID*/ data->btn_id = last_btn; } /*Get ID (0, 1, 2 ..) of the pressed button*/ static int8_t button_get_pressed_id(void) { uint8_t i; /*Check to buttons see which is being pressed (assume there are 2 buttons)*/ for(i = 0; i < 2; i++) { /*Return the pressed button's ID*/ if(button_is_pressed(i)) { return i; } } /*No button pressed*/ return -1; } #include "main.h" /*Test if `id` button is pressed or not*/ static bool button_is_pressed(uint8_t id) { /*Your code comes here*/ if (id) return !HAL_GPIO_ReadPin(KEY0_GPIO_Port, KEY0_Pin); else return !HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin); return false; } #else /*Enable this file at the top*/ /*This dummy typedef exists purely to silence -Wpedantic.*/ typedef int keep_pedantic_happy; #endif ``` 然后在 main.c 的初始化代码中加入 indev 的初始化 ```c lv_init(); lv_port_disp_init(); lv_port_indev_init(); setup_ui(&guider_ui); ``` 编译烧录到开发板,可以看到操作按键修改速度值,modbus主机端也可以实时的监控到这个值
VID_20240305_003609
此帖出自
stm32/stm8论坛
最新回复
lugl4313820
GUI的工具还是非常好用的,感谢分享呀!
详情
回复
发表于 2024-3-9 07:41
回复
分享
扫一扫,分享给好友
复制链接分享
链接复制成功,分享给好友
举报
提升卡
变色卡
千斤顶
lugl4313820
lugl4313820
当前离线
版主
最后登录
2024-9-13
在线时间
165 小时
威望
11857分
芯积分
10616分
(兑换)
E金币
429枚
(兑换)
(兑换)
好友
21
6758
帖子
9
TA的资源
版主
+ 好友
私信
发表于2024-3-9 07:41
显示全部楼层
GUI的工具还是非常好用的,感谢分享呀!
此帖出自
stm32/stm8论坛
回复
举报
返回列表
发新帖
回复
您需要登录后才可以回帖
登录
|
注册
发表回复
回帖后跳转到最后一页
猜你喜欢
【帖子】【STM32F411Nucleo测评】modbus&LVGL 屏显从站
【帖子】【STM32F411Nucleo测评】移植多功能按键驱动库
【帖子】【STM32F411Nucleo测评】驱动 1.3 寸 LCD 屏幕
【帖子】【STM32F411Nucleo测评】开箱,搭建开发环境,串口输出
【帖子】[STM32F4]STM32F469 discovery Kit 测评
【帖子】[STM32]Nucleo-F446RE(主控:STM32F446RE)测评
【帖子】[ STM32F4-discovery开发板测评 ] 初识篇
【帖子】“小身材,大智慧”——STM32 NUCLEO-F031K6测评(一)
活动
更多>>
Arrow&allegro有奖直播:下一代磁感应解决方案:XtremeSense™ TMR 技术如何促进高效应用
瑞萨电子边缘AI 技术研讨会——深圳站, 火热报名中,参会有好礼!
报名有好礼!50元京东卡等您拿!
罗姆有奖直播 | 高输出功率激光二极管—助力激光雷达性能提升
2024 DigiKey 应用说:树莓派 5 在视频直播中的应用
相约秋色~相约北京~恩智浦工业和物联网技术峰会 约起来!
泰科电子工业事业部邀您云逛展 ——打破时间、空间的限制,TE Connectivity 线上工博会为您带来沉浸式VR观展体验
关注有礼 | 泰克中端示波器增“重”计划
开源项目
更多>>
NCP1071SOTGEVB:6 W/12 V 非隔离电源
2S锂电池充电+均衡板 TP5100+ETA3000方案
AD8604DRZ-REEL 符合 PC100 标准的线路输出放大器的典型应用
ADP7118UJ-EVALZ,用于评估 ADP7118 20V、200mA 低噪声 CMOS LDO 的 SOIC 评估板
采用 LTC1929 大电流两相降压转换器的典型应用电路
无刷电机驱动器
LT3091ET7 2 端子电流源的典型应用
EVAL-ADM1275EBZ,用于评估 ADM1275 热插拔控制器和电源监控的评估板
基于阿里云智能的插座(已商用方案分享)
BSP752T 智能电源高端开关典型应用电路
随便看看
【STM32F411Nucleo测评】移植 LVGL 界面库
>STM32F411RE有512KB的Flash和128KB的RAM,资源丰富,本文介绍如何移植LVGL界面库到Nucleo-F411开发板上面##资料获取LVGL是比较知名的嵌入式GUI库,代码在GitHub可以获得,地址https://githublvgl/lvgl,这里移植V80版本的```bashgitclone-brelease/v8/github ...
【STM32F411Nucleo测评】移植 Freemodbus 库
>本文介绍如何移植FreeModbus库,在Nucleo-F411板上实现Modbus通信##资料准备FreeModbus的代码是存放在GitHub的,地址https://githubcwalter-at/freemodbus,拉取到本地,其中关键的就是demo和modbus两个文件夹,demo存放一些移植好的工程,modbus中存放库代 ...
10月16日Arrow&allegro 有奖直播报名中!
10月16日Arrow&allegro有奖直播:下一代磁感应解决方案:XtremeSense™TMR技术如何促进高效应用报名中!>>点击报名直播时间:2024年10月16日(周三)上午10:00直播主题:下一代磁感应解决方案:XtremeSense™TMR技术如何促进高效应用直播简介 ...
麻烦看下这款调节板哪里可以买
【 匠芯创D133CBS】-小火苗-PWM测试
BGA测试座/BGA原型贴片测试插座
vivado版本和modelsim版本的匹配
ccs hex文件生成
提高临时工工作积极性的5个办法
uc/os III可以移植到Fpga上面吗?
查找数据手册?
搜索
EEWorld Datasheet 技术支持
热门标签
源代码
单片机
放大器
TI
ST
电源
分立器件
传感器
测试测量
模拟
电导在线监测仪
电容式互感器
分组交换技术
定时器中断
IoTGateway
串口WIFI
共栅极
热电流
功放
EPROM
相关文章
更多>>
中科院研发全新隔膜 锂电池安全了:内部不再“长刺”
9月13日消息,使用传统商业隔膜的锂电池循环一定次数后,在锂金属阳极表面会出现大量“菜花状”的锂枝晶。 锂枝晶是锂金属电池中常见的问题,它们不仅会导致电池短路,还会加速电池的老化过程。 近日,中国科
我国突破氢离子注入核心技术 100%国产
据国家电力投资集团官方消息,近日,集团所属国电投核力创芯(无锡)科技有限公司核力创芯暨国家原子能机构核技术(功率芯片质子辐照)研发中心,完成了首批氢离子注入性能优化芯片产品客户交付。 这标志着,我国
印度部长:印度产苹果iPhone 16将供应全球
黄仁勋:必要时,英伟达可弃用台积电
博主曝车企对供应链的压价已到疯狂地步:领导不满意价格 立马重新招标
工信部印发《通知》—— 推动移动物联网从“万物互联”迈向“万物智联”
IGBT背后的男人,彻底改变了新能源汽车,获巨额奖金
下代龙芯3B6600明年上半年流片:单核性能领先
Mobileye放弃下代第一方调频连续波激光雷达开发,裁撤相关部门
欧洲法院终裁苹果公司须补缴130亿欧元税款
新帖速递
STM32和无源蜂鸣器播放声音的问题
车规级AECQ200介绍,混合铝电解电容器的选择
嵌入式教程_DSP技术_DSP实验箱操作教程:2-28 搭建轻量级WEB服务器实验
OPA847IDBVR运放器国产替代
AG32VF407测试UART
【得捷电子Follow Me第二期】第一章 收到货物的分享
请问这个红外接收头是什么型号?能用哪个型号代替?谢谢
出售全新未拆封ZYNQ 7Z020 FPGA核心板
用在锂电池供电的水表设置上的LORA模块,当有100块水表集中安装在一个楼道内时,节能
请问一下,当某个端口被设置为 RX0后,这个端口的输入输出方向还有必要设置吗
今年怎么这么难,比疫情时还难,三十了面临失业好迷茫
请教稳压管测试问题
【小华HC32F448测评】关于小华半导体的UART中断发送和PRINTF构造和重定向
【BIGTREETECH PI开发板】 HDMI输出测试
【BIGTREETECH PI开发板】+08.音频测试(zmj)
精选推荐
【ST NUCLEO-WB09KE测评】-5-RTC测试
LS635这款激光雷达芯片比较猛啊
【得捷Follow me第二季第1期】任务提交+红外功能使用
汽车电子之BMS电池管理系统
《智能驾驶之激光雷达算法详解》4、LiDAR-Camera 的外参标定
新能源储能设计 | 动力电池管理系统BMS有哪些安全管理功能?
好书共读——《硬件设计指南:从器件认知到手机基带设计》_第四、五、六部分
要给产品加AI功能,成本似乎高了不少
新能源汽车电池管理系统(BMS)中的传感器应用
电磁干扰的烦恼
相约秋色~相约北京~恩智浦工业和物联网技术峰会 约起来!
2024年10月11日(周五),恩智浦诚邀您相聚北京,来参与“恩智浦工业和物联网技术峰会”,洞见技术发展趋势,共促未来市场发展!
预报从速,好礼等您拿~
查看 »
有奖活动|英飞凌新品情报站:最新 5V XENSIVTM PAS CO2 传感器 知识挑战赛
申请时间:即日起-10月8日
活动奖励:充电宝、螺丝刀套装、散热架、蓝牙耳机、按摩仪、手环
查看 »
泰科电子工业事业部邀您云逛展
打破时间、空间的限制,TE Connectivity 线上工博会为您带来沉浸式VR观展体验
查看 »
有奖直播 | 基于数字孪生的软件工具,助力射频子系统验证
直播时间:9月27日(周五)下午14:00
参与福利:电动牙刷、蓝牙耳机、双肩包、《微波器件测量手册》、《ADS信号完整性仿真与实战》
查看 »
Microchip 有奖直播报名中
直播主题:Microchip mSiC™ 产品及其在电动出行中的典型应用方案
直播时间:2024年9月24日(星期二)上午10:30-11:30
查看 »
免费申请 | MPS MIE 系列隔离式稳压 DCDC 模块!
诚邀您按实际情况填写申请!MPS 对申请信息进行审核,为通过申请的网友发送样品。(每人最多5片)
拿到样片的网友可参加第三期评测活动哦!奖品多多~快来申请免费模块吧!
查看 »
报名直播有好礼~ADI & WT ·世健 MCU 痛点问题探索季
前阵子,我们收集到了很多来自一线工程师反馈的MCU应用难题 9月19日上午10:00 ADI技术专家将在直播间一一答疑解惑,剖析、攻克这些痛点
查看 »
英飞凌有奖直播报名中!
直播时间:9月25日(周三)下午14:00
直播主题:基于英飞凌AIROC™ CYW20829低功耗蓝牙芯片的无线组网解决方案
查看 »
有奖直播:英飞凌新型SSI系列固态隔离器的创新技术与应用设计
直播时间:9月26日(周四)上午10:00
直播福利:露营车、双肩包、保温杯
查看 »
本周精选下载推荐:电源管理基础Dummies
本周小编给大家带来一本超简单、超干货的电子书——《电源管理基础Dummies》!内容深入浅出,排版舒服简洁,分分钟能get到电源管理最核心的知识内容。
查看 »
关闭
站长推荐
1
/10
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
电信业务审批[2006]字第258号函
京公网安备 11010802033920号
Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复
返回顶部
返回列表
论坛首页
版块列表
专业技术中心
TI技术论坛
ST传感器与低功耗无线技术论坛
ADI参考电路
DigiKey得捷技术专区
平头哥RISC-V活动专区
ADI · 世健工业技术
电子技术交流
嵌入式系统
单片机
国产芯片交流
电机驱动控制
FPGA/CPLD
模拟电子
电源技术
PCB技术
RF/无线
传感器
综合技术交流
下载中心专版
大学堂专版
测评中心专版
创意与实践
电子竞赛
DIY/开源硬件专区
淘e淘
创意市集
行业应用
汽车电子
移动便携
医疗电子
工控电子
安防电子
休息一下
聊聊、笑笑、闹闹
工作这点儿事
为我们提意见&公告
EEWorld颁奖专区
信息发布
最新帖子
最新帖子
最新回复
精华
消灭零回复
测评中心
活动中心
积分兑换
E金币兑换
芯积分
厂商专区
TI技术论坛
ST传感器与低功耗无线技术论坛