STM32L051上使用RT-Th (二、CubeMX配置)
STM32L051上使用RT-Th (二、CubeMX配置)
STM32L051上使用RT-Th (二、CubeMX配置)
点击搜索

STM32L051上使用RT-Th (二、CubeMX配置)

时间: 2024-04-21 来源:消防监测

  配置我们应该根据原理图进行,本应用所用到的外设原理图如下(无线通讯模块没有放进来,使用的是串口TXD3和RXD3,另外使用的外部8Mhz):

  我们按照 时钟,调试接口,串口,GPIO,定时器,工程选项 依次配置,下面就简单列一下步骤:

  选择完时钟就可以在 Clock Configuration 中配置系统时钟,直接把系统时钟改成最大的 32Mhz,点击确定,系统会自动修改好时钟树:

  普通GPIO设置,2个按键输入,一个LED输出,2个IO口做软件I2C:

  我们设置两个硬件定时器,一个1S,一个1ms,我们大家可以根据自己使用不使用选择初始化。

  完成上述步骤,点击CubeMX右上角 GENERATECODE 生成工程。根据我以前的博文说明,生成好了以后,别打开,直接关闭CubeMX即可,然后回到 RT-Thread Studio,出现下面的弹框点击确定即可。

  完成以后多了cubemx 文件夹,然后编译一下,正常结果如下(其实我自己走流程的时候,出过一次问题,后面小节会说明):

  在《RT-Thread记录(一、RT-Thread 版本、RT-Thread Studio开发环境 及 配合CubeMX开发快速上手)》中我建议不需要添加,因为里面有些中断响应函数, RT-Thread 内核有自己的实现方式。但是这里我还是添加了, 但是要把stm32f1xx_it.c 文件中 一些中断响应函数的给注销了,因为在RT-Thread 内核有另外的地方有实现!

  我的做法是,除了下图自己后面程序设计需要使用到的,其他的都给删除了,注意这里方便说明用的是函数声明部分,需要在stm32f1xx_it.c文件中函数实现部分删除:

  按照上面 1.1 小节的基础步骤设置 ,完成以后,在CubeMX最后一步生成工程的时候居然卡死了,我只能强制退出CubeMX任务,重新点击CubMX Settings 打开CubeMX进行配置。

  居然没有SConscript,编译报错了,即便我重新复制进去,也没用……

  一般来说,如果编译除了问题,我们该从编译结果去查找问题,然后分析解决,但是对这种软件联动的自动化配置,我还是建议重新操作尝试解决。所以我把工程全部删除,然后重新来一遍看看。

  因为考虑到CubeMX卡死过一次,项目出问题了,两个软件没有成功的关联,所以我是重新操作了一次正常了。

  完成上面的配置,我们的基本框架就已经搭建好了,剩下的就是实现应用程序了,那么在实际的操作之前,我们先简单验证一下整体的框架没问题,简单测试下LED和按键,串口的话要单独一篇文章分析。

  首先我们得在 main.c 文件中包含必备头文件,和在main线程中做基本的初始化:

  其实这个步骤就和裸机一样,我们可完全把 main 当成裸机中的main函数,所有的程序在main中实现,也能。 这种方式就类似于ESP32-C3 使用ESP-IDF 开发环境中,大部分操作都在 app_main 任务中实现, app_main 也不过是 FreeRTOS 启动时候创建的一个任务。

  记得在上一篇博文中我们提到过 一个main 线K不能浪费,要么我们在main里面多做一些工作,要么就是到时候把main线程的大小改小。

  I2C 数据采集,这个部分需要移植一下代码,然后采集实现部分需要用一个线程来实现,计划是定时器到了一定的计数之后,发送一个信号量使得线程唤醒采集一次;

  无线模块串口通讯,这个部分是和上一步联动的,定时器到了定时时间,通知传感器采集数据,然后把数据放置无线通讯协议中发送出出去,这个部分还得用一个线程实现,串口的通讯;

  LED灯,其实可有可无,但是作为我们第一个基础应用,还是加上也没关系,LED的切换,到时候可以随意加在哪里,比如采集到了数据成功发送以后,LED灯闪烁一次;

  按键,按键其实也可有可无,但是还是因我们的第一个基础应用,我想把我常用的按键驱动移植过来试一试,根据以往经验,按键驱动也需要一个线程,而且这个线字节的空间;

  定时器,依照产品所需要的的定时时间释放信号量,使得数据采集线程开始工作,定时器是硬件定时器,使用中断实现不用额外线程;

  然后在主函数中写一个LED灯切换的逻辑(此部分太简单了,所以截个图看看就行了):

  然后新建一个线程,给到时候按键驱动移植使用,这里就用简单的按键解决方法,大小设定为512字节。

  值得注意的是,我们新建任务只能用静态初始化的方式,因为我们没定义使用heap,新建的线程大小直接影响RAM空间大小。

  我们有一个1S的定时,我们也来简单测试一下,具体的测试方式和我们在记录九中的一致:《RT-Thread记录(九、RT-Thread 中断处理与阶段小结)》

  但是这次我们加了stm32f1xx_it.c 文件,所以我们这次直接在stm32f1xx_it.c 文件中修改(再次说明,实际使用中中断响应函数中不要添加打印操作,这里只是测试测试!!!):

  在小内存芯片上使用操作系统,程序运行占用的RAM大小我们不容忽略,我们在应用中务必学会观察内存占用情况:

  完成CubeMX基础步骤以后,默认只添加了两个.c文件,与初始工程的比较:

  修改完配置,表示着我们的基础框架基本搭建好了,我们多添加了GPIO、串口,和定时器的驱动程序:

  说明!上面几张图因为刚开始,所以贴了和初始工程的比较,往后的比较我不可能从初始工程开始贴图,只能与上一次工程完善的结果做比较:

  本文的简单测试,程序运行时候需要占用 RAM的大小: 1536+5184= 6720 字节,我们的芯片 RAM:8192字节。结语

  本文依然还处于工程配置阶段,再次手把手做了次教学,怎么样去使用 STM32CubeMX 配合 RT-Thread Studio开发。

  STM32与Actility ThingPark的合作实现高效的无线固件更新

  在物联网(IoT)领域,无线固件更新(FUOTA)技术的引入明显提高了设备管理的效率和灵活性。STM32与Actility ThingPark平台的结合,为开发 ...

  在“嵌入式学习006_Systick使用(一)”中,详细的介绍了Systick中寄存器的使用方法,用到了很多函数,实际上到了3 5版本的标准固件库中,移 ...

  用到GPIO口 PA0~PA11共12个引脚因为是共阳所以12,9,8,6为电源输入,其他引脚均为接地,所以对于芯片来说12,9,8,6高位输出,其他设定 ...

  这是我在做单片机最小系统板时候碰到的问题,之前虽然也做过相似的板子,可是未曾出现过无源晶振不起振的问题。下面是我在遇上问题后的一些 ...

  7 1电源管理概述处理器广泛地利用门时钟来禁能那些未用的功能和未用功能块的输入,因此只有正在有效使用中的逻辑才会消耗动态功率。ARMv7-M ...

  适用 STM32 通用 Bootloader ,让 OTA 更加 Easy

  站点相关:综合资讯51单片机PIC单片机AVR单片机ARM单片机嵌入式系统汽车电子消费电子数据处理视频教程电子百科其他技术STM32MSP430单片机资源下载单片机习题与教程