(二)、使用STM32创建Micro-ROS工程

1、前提概要

        上一章讨论了实际工程中单片机的选型,以及量产产品中的稳定性,其中大多数车厂的RTOS是采用的Safe QNX,但是我们作为一个商业化比较浓厚的传统行业,且我们平时也没有资金和平台接触到车企的一些平台。

        QNX Neutrino RTOS 安全内核比其他商业操作系统更安全,不仅因为其认证如此,还因为只有微内核才能在系统的各个方面(包括文件系统和网络堆栈)之间提供适当的隔离。 

        但我们本着低成本开发和快速开发的原则,这里也附加了一些个人的思考问题,通过查询一些资料显示特斯的汽车自动驾驶那一块也是基于Linux的操作系统,可能是经过优化的软实时操作系统,甚至说马斯克的火箭上面也是基于Linux开发的;这给我的一个想法是,如果是商用的话是可以通过优化来增加安全保护的。当然安全单片机这个肯定是需要的,目前的情况来看,我的目的很简单就是自己做一套能够学习和足够稳定的系统,甚至可以用于不上路的商业目的,那么我选择STM32和FreeRTOS是完全没有问题的

        由于长期公司做的项目也比较简单,对于一些复杂项目管理上来说,可能使用RTOS会更加方便一些,同时国内FreeRTOS用的人也比较多,教程也多这些都是便利点;从一些个人工作的时长和精力观察看,现在的软件也大多数朝着配置简单,图形化的发展方向去了,生态的搭建促进了软件编程的便捷,也借此机会学习下RTOS和ROS2的开发。

2、开发环境

        由于在Windows下长期开发STM32,但又需要在Ubuntu下面学习ROS2的开发,两个系统交叉开发带来了不变性,好在ST的CubeIDE提供了Linux下的开发界面,这就极大的提高了我们开发的便利性。

        CubeIDE下载地址

        

   

        注册ST账号,下载第二项选择最新版本安装即可。

        安装完成后,可以参考如下Git配置进行开发

        micro_ros_stm32cubemx_utils

3、硬件测试环境

        主机端:Ubuntu22.04 + ROS2 Humble,大家自行选择安装,我这里使用的Debian packages 的方式

        ROS2 Humble安装地址

        硬件:STM32F407VGT6 

4、搭建环境

        打开CubeIDE 新建工程,选择对应MCU

会提示登录然后更新包(可以注册后登录后重新重新新建工程即可)

配置RCC时钟源,根据自己的配置进行选择,我这里是使用了外部晶振

配置FreeRTOS选项,这里选择V2(总体来说就是V2引入了一些新的功能更加强大了)

 在FreeRTOS中将默认的任务的栈空间修改为3000(对于32位微处理器,一个字通常是32位,即四个字节,即3000 * 4 = 12000kB 完全满足micro-ROS的任务开销),同时将内存分配改成静态内存分配,静态内存分配具有更好的性能、可预测性和可靠性。

根据自己的设备来配置串口,如图所示我使用的是串口1

开始配置串口1,将串口的模式选择为 异步通信(仅需收发两个脚) ,将RX和TX的DMA的优先级改为Very High,RX的DMA模式为Circular(循环模式)

TX的DMA配置还是为Normal模式

 将串口中断设置红的全局中断勾选上

在SYS中选择一个我们不用的定时器来作为FreeRTOS的时间基准源,重要的是要确保其稳定性和准确性即可。

配置主时钟源到最大168Mhz

修改代码生产风格,便于管理代码

Ubuntu中我没有看到有生成代码的地方,可以在工程中右击如图的ioc配置文件,点击生成代码即可,也可能跟版本有关系,大家注意下我是找了半天没找到的

附录:(仅限导入到其他IDE编译):

        使用CubeIDE生成的文件默认是CubeIDE的,这里我想了下不使用CubeIDE开发的时候我们可以在CubeMX 生成代码的时候选择 Makefile或者其他文件,大家可自行研究下,两个软件的步骤是一样的,无非是CubeIDE内嵌了CubeMX插件。

  • 21
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值