当前位置: 首页 > news >正文

[STM32U3] 【NUCLEO-U3C5ZI 测评】 MODBUS主站+从站

感谢21IC平台提供NUCLEO-U3C5ZI评估机会,开发板做工十分精良,板载CAN接口,居然还有一M2存储接口,虽然当前用不上,也算是意外之喜。

拿到开发板子,首先用CubeMX配置一个简单的工程点灯跑起来来点儿信心,点亮很顺利。
接下来就要切入正题了,对于超多外设、超大内存的U3C5ZI来说,并行执行各种复杂任务势在必行,使用RTOS在所难免。CubeMX配置项目可以直接选择THREADX,这个RTOS认证很多,飞机汽车都可使用,本次评测就用这个操作系统打底了。
1、操作系统添加
CubeMX选择中间件里面的THREADX,然后要做些简单的配置,本次测试的配置如下图所示:
内存池管理要开起来,这个后面CMSIS-OS中间层要用。


2、调试串口
板载的ST-LINK连接在芯片的UART1上,用UART1做一个SHELL控制台方便调试打印,如下图所示,可以通过串口做运行时交互。


3、MODBUS
本次试验的重点来了,MODBUS主站和从站
USART2做主站,PA2-PA3
USART3做从站,PB10-PB11
两个串**叉相连后,两个站点可以通过MODBUS通信了。
PA2-PB11
PA3-PB10

调试过程中遇到一点小插曲,可能这颗芯片出来时间太短,官方库居然有个狗血的漏洞,USART2的时钟获取是缺失的,无论LL库还是HAL库都会获取失败,导致U2波特率设置错误,缺失如下所示。


我用LL库,修改如下就可以正常工作了。


MODBUS任务代码如下:

复制
  1. void qc_task(const void *argv)
  2. {
  3. qc_cmd_type mcmd;
  4. uu8 bdone;
  5. /* 主站配置 */
  6. modbus_master_init(QC_MODE_MASTER,115200, MB_PAR_NONE);
  7. modbus_master.os_event_send = mb_os_send;
  8. modbus_master.extend =0;
  9. /* 从站配置 */
  10. modbus_slave_init(QC_MODE_SLAVE,115200, MB_PAR_NONE);
  11. modbus_slave.os_event_send = mb_os_send;
  12. modbus_slave.extend = &qc_mb_slave_box;
  13. /* 命令配置 */
  14. mcmd.id =1;
  15. mcmd.wdat = mb_tst.reg_w;
  16. mcmd.rdat = mb_tst.reg_r;
  17. mcmd.wa = word_make(0xF,5);
  18. mcmd.wn =4;
  19. mcmd.ra = word_make(0x00,0x10);
  20. mcmd.rn =6;
  21. mcmd.callback = qc_callback;
  22. mcmd.attr = QC_MB_ATTR_HOLD_RW;
  23. mqc_stc_cmd_req(&modbus_master, 0, &mcmd);
  24. mqc_stc_cmd_req(&modbus_slave, 0, &mcmd);
  25. mcmd.wa = word_make(0x10,12);
  26. mcmd.wn =0;
  27. mqc_stc_cmd_req(&modbus_master, 1, &mcmd);
  28. mqc_stc_cmd_req(&modbus_slave, 1, &mcmd);
  29. mcmd.wa = word_make(0x0C,8);
  30. mcmd.wn =8;
  31. mcmd.ra = word_make(0x0C,8);
  32. mcmd.rn =8;
  33. mcmd.wdat = mb_tst.reg_w;
  34. mcmd.rdat = mb_tst.reg_r;
  35. mcmd.attr = QC_MB_ATTR_HOLD_RW;
  36. modbus_master.fun->stc_cmd_req(2, &mcmd);
  37. mqc_dyna_cmd_req(&modbus_master, &mcmd);
  38. mqc_dyna_cmd_req(&modbus_master, &mcmd);
  39. /* 任务处理 */
  40. for(;;)
  41. {
  42. osDelay(2);
  43. if(modbus_master.com_st == QC_RX_END)
  44. {
  45. NOP1();
  46. }
  47. if(modbus_slave.com_st == QC_RX_END)
  48. {
  49. NOP1();
  50. }
  51. qc_mb_data_handle();
  52. qc_mb_poll(&modbus_master);
  53. qc_mb_poll(&modbus_slave);
  54. }
  55. }

链接成功后,在调试状态可以观测两路MODBUS运行状态,一主一从如下:



下面附上代码链接,感兴趣的小伙伴可以一起研究:

复制
  1. https://gitee.com/open-instrument/NUCLEO-U3C5ZIQ

NUCLEO-U3C5ZIQ: NUCLEO-U3C5ZIQ 评估


---------------------
作者:aple0807
链接:https://bbs.21ic.com/icview-3521128-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

http://www.jsqmd.com/news/1216707/

相关文章:

  • 2026年7月最新唐山劳力士官方售后客服电话及服务网点地址查询 - 劳力士官方服务中心
  • 2017年6月12日:时间管理与历史回顾
  • 转行成功公式:行业洞察×能力迁移×时机把握
  • 《我的世界》三角洲山头服与TTK测试:PVP赛季服玩法全解析
  • 上海百达翡丽回收价格查询及靠谱平台实测排行(2026年7月最新) - 嘉价奢侈品回收平台
  • Cordova插件开发与选型全指南
  • Kimi LeetCode 3620. 恢复网络路径 C++实现
  • 贪心算法在Karate Competition问题中的应用与优化
  • AI Mind 的多会话短期记忆容器:如何隔离多个聊天上下文
  • 艾尔登法环修改器下载代码 手残党必备
  • 如何永久保存微信聊天记录:打造个人数字记忆宝库的终极指南
  • 百达翡丽中国官方售后服务中心|最新地址及服务热线权威信息公告(2026年7月最新) - 百达翡丽服务中心
  • 生命涌现的小龙虾技能之【Pet Vaccination Reminder (Facial Recognition) | 宠物疫苗接种到期提醒(面部识别)】简介
  • Android NFC标签ID读取实现与优化指南
  • 终极指南:如何通过Qwerty Learner同时提升英语打字速度和单词记忆能力
  • Serverless不够用?混合架构实现确定性执行
  • Python概率模拟实践:从二项分布到游戏抽卡系统验证
  • 2026广州卫生间、阳台、地下室与屋顶防水维修指南,三类服务定位如何比较 - 盛隆防水
  • Minecraft服务器管理:快速筛选与显示创造模式玩家技术方案
  • Router 路由管理:pushUrl、replaceUrl、back 与参数传递
  • 影刀RPA 时间日期处理:定时任务与日期计算完全攻略
  • Java编程语言:从基础到企业级开发全解析
  • 欧米茄中国专柜官方服务电话2026年7月最新,客户热线客户必读 - 欧米茄官方服务中心
  • 佳能TS3380,TS3480,G1810,G2810,G4810,MG3580,MG3680,MG6880,IP2780,IP8780,IX6780故障码5b00,1700,p07,e08,5b02
  • 旅游信息管理系统
  • Codeforces Div.3竞赛解析与算法精讲
  • 深入解析TI OMAP PRCM时钟管理器:从DPLL原理到低功耗实战
  • 2026广州综合防水补漏榜单:看懂卫生间、阳台、地下室与屋顶维修与售后安排 - 盛隆防水
  • Amazon Redshift实战调优:DISTKEY、SORTKEY与WLM配置生死细节
  • Prompt Injection防护实战:基于847测试用例的多层防御框架