配置我们需要根据原理图进行,本应用所用到的外设原理图如下(无线通讯模块没有放进来,使用的是串口TXD3和RXD3,另外使用的外部8Mhz): 我们按照 时钟,调试接口,串口,GPIO,定时器,工程选项 依次配置,下面就简单列一下步骤: 选择完时钟就可以在 Clock Configuration 中配置系统时钟,直接把系统时钟改成最大的 32Mhz,点击确定,系统会自动修改好时钟树: 完成上述步骤,点击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进行配置。 一般来说,如果编译除了问题,我们应该从编译结果去查找问题,然后分析解决,但是对于这种软件联动的自动化配置,我还是建议重新操作尝试解决。所以我把工程全部删除,然后重新来一遍看看。 因为考虑到CubeMX卡死过一次,项目出问题了,两个软件没有成功的关联,所以我是重新操作了一次正常了。 完成上面的配置,我们的基本框架就已经搭建好了,剩下的就是实现应用程序了,那么在实际的操作之前,我们先简单验证一下整体的框架没有问题,简单测试下LED和按键,串口的话要单独一篇文章分析。 其实这个步骤就和裸机一样,我们完全可以把 main 当成裸机中的main函数,所有的程序在main中实现,也是可以。 这种方式就类似于ESP32-C3 使用ESP-IDF 开发环境中,大部分操作都在 app_main 任务中实现, app_main 也不过是 FreeRTOS 启动时候创建的一个任务。 记得在上一篇博文中我们提到过 一个main 线K不能浪费,要么我们在main里面多做一些工作,要么就是到时候把main线程的大小改小。 I2C 数据采集,这个部分需要移植一下代码,然后采集实现部分需要用一个线程来实现,计划是定时器到了一定的计数之后,发送一个信号量使得线程唤醒采集一次; 无线模块串口通讯,这个部分是和上一步联动的,定时器到了定时时间,通知传感器采集数据,然后把数据放置无线通讯协议中发送出出去,这个部分还得用一个线程实现,串口的通讯; LED灯,其实可有可无,但是作为我们第一个基础应用,还是加上也没关系,LED的切换,到时候可以随意加在哪里,比如采集到了数据成功发送以后,LED灯闪烁一次; 按键,按键其实也可有可无,但是还是因为我们的第一个基础应用,我想把我常用的按键驱动移植过来试一试,根据以往经验,按键驱动也需要一个线程,而且这个线字节的空间; 定时器,根据产品所需要的的定时时间释放信号量,使得数据采集线程开始工作,定时器是硬件定时器,使用中断实现不用额外线程; 然后新建一个线程,给到时候按键驱动移植使用,这里就用简单的按键处理方式,大小设定为512字节。 值得注意的是,我们新建任务只能用静态初始化的方式,因为我们没有定义使用heap,新建的线程大小直接影响RAM空间大小。 我们有一个1S的定时,我们也来简单测试一下,具体的测试方式和我们在记录九中的一致:《RT-Thread记录(九、RT-Thread 中断处理与阶段小结)》 但是这次我们加了stm32f1xx_it.c 文件,所以我们这次直接在stm32f1xx_it.c 文件中修改(再次说明,实际使用中中断响应函数中不要添加打印操作,这里只是测试测试!!!): 在小内存芯片上使用操作系统,程序运行占用的RAM大小我们不容忽略,我们在应用中务必学会观察内存占用情况: 修改完配置,表示着我们的基础框架基本搭建好了,我们多添加了GPIO、串口,和定时器的驱动程序: 说明!上面几张图因为刚开始,所以贴了和初始工程的比较,往后的比较我不可能从初始工程开始贴图,只能与上一次工程完善的结果做比较: 本文的简单测试,程序运行时候需要占用 RAM的大小: 1536+5184= 6720 字节,我们的芯片 RAM:8192字节。结语 本文依然还处于工程配置阶段,再次手把手做了次教学,如何使用 STM32CubeMX 配合 RT-Thread Studio开发。 Ⅰ、写在前面 学习本文之前可以查看我前面的文章: STM32CubeMX介绍、下载与安装 STM32CubeMX使用方法及功能介绍 STM32CubeMX新建工程+基本IO配置过程 本文接着前面STM32CubeMX文章结合USART实例,讲述关于STM32CubeMX新建USART工程,以及新建好完成的软件工程。最终通过STM32CubeMX工具配置完成实现USART串口通信的软件工程。 本文使用Keil(MDK-ARM) V5软件为编译环境,如果你没有安装最新版本的软件,请安装Keil(MDK-ARM) V5版本的软件,具体过程可以参考我的一篇文章: MDK-ARM下载与安装 关于本文的更多详情请往下看。 Ⅱ、STM32C 过程 / STM32CubeMX是STM32芯片图形化配置工具,通过简单的操作便能实现相关配置,省去了我们配置各种外设的时间,支持MDK、IAR For ARM、TrueStudio等多种工具。 安装CubeMX分三步: JRE(Java Runtime Environment) STM32CubeMX STM32的HAL固件库 这三部分资料可以在网盘上下载,链接及提取码如下: 链接:提取码:stm3 安装JRE 因为STM32CubeMX是用JAVA开发的,所以需要JRE(Java运行时环境)。 在上文提供的网盘上有安装文件,把文件下载下 工具的安装教程 / STM32Cube 是一个全面的软件平台,包括了ST产品的每个系列。平台包括了STM32Cube 硬件抽象层(一个STM32抽象层嵌入式软件,确保在STM32系列最大化的便携性)和一套的中间件组件(RTOS, USB, FatFs, TCP/IP, Graphics, 等等)。 直观的STM32微控制器的选择和时钟树配置 微控制器图形化配置外围设备和中间件的功能模式和初始化参数 C代码生成项目覆盖STM32微控制器的初始化符合IAR,Keil的和GCC编译器。 对于新的产品设计,我们强烈推荐使用STM32Cube来加速你的开发过程,并为以后的产品平台移植打下良好的基础。 新建工程 打开STM32cubeMX软件,点击New 步骤解析 / CAN基础知识介绍文中介绍了CAN协议的基础知识,以及STM32F4芯片的CAN控制器相关知识,下面将通过实例,利用STM32CubeMX图形化配置工具,来实现CAN通讯的环回测试 一、STM32CubeMX配置 CAN是挂载在APB1总线,配置位时序参数,其他基本参数以及工作模式(此处设置为Loopback环回模式) CAN波特率的计算公式:只需要知道BS1和BS2的设置,以及APB1的时钟频率,就可以方便的计算出波特率。比如设置TS1=8、TS2=6和BRP=6,在APB1频率为45Mhz的条件下,即可得到CAN通信的波特率=45000/6/(8+6+1)=5 目的:在STM32F429实现一个5ms一个interrupt的中断,并且重复触发 我们选用TIM2,可以看到TIM2是在APB1总线总线M 整个Cube的配置为: 其中我要来说下几个参数: 预分频器值(Prescaler value):此部分就是把clock source分频到一个你想要的频率,计数器时钟频率CK_CNT 等于fCK_PSC/ (PSC + 1) 比如我们APB1是90M,我们此部分设置90-1,得到的最终频率是90M/((90-1)+1) = 1MHz 定时器周期(Period):我们设置预分频后得到1MHz,此部分想得到5ms,就是1M Hz Timer实现5ms一个中断 / 1.0:选择STM芯片 启动STM32CubeMx之后,点击File- New Project ,本人使用的是正点原子探索者STM32F407的开发版,因此在搜索栏输入芯片STM32F407ZGT6,然后双击,然后完成新建项目。 注:如果不知道开发板的芯片,可以查看供应商给的原理图或者直接看芯片的标识,建议最好看直接看芯片的标识。 2.0:设置RCC 3.0:设置SYS 注:在BUG里面有很多选项,根据自己开发板的接口选择,由于SWD(Serial Wire Debug)接线简单,现在市场的上开发板基本都是由于这个接口。 4.0:硬件配置 正点原子探索者开发板中,有两个LED与4个按 Cube (杨百军) target=_blank 手册 target=_blank 现场抽取PS5等诸多好礼 SiFive RISC-V 中国技术论坛 上海、北京、深圳 3场线下活动邀您出席! 【新品】STM32H5-Arm® Cortex®-M33 内核,主频高达250MHz,提升性能与信息安全性 【新品】STM32MP13X-支持Linux、RTOS和Bare Metal应用,新一代通用工业级MPU 【新品】Arm® Cortex®-M33处理器内核,运行频率160 MHz,基于Armv8-M架构并带有TrustZone® 站点相关:综合资讯51单片机PIC单片机AVR单片机ARM单片机嵌入式系统汽车电子消费电子数据处理视频教程电子百科其他技术STM32MSP430单片机资源下载单片机习题与教程 |