AT32F415移植FreeRTOS

为什么要使用AT32F415呢?

无意中发现一块电路板上使用的是AT32F415。。。很是好奇这是什么CPU???在网上查了下发现性价比很不错。之前用过GD32F303做产品。下面把AT32F415与GD32F303做个简单的对比。
1、列表参数对比如下图
在这里插入图片描述
从上图对比看来,两款MCU在Flash相同,封闭相同的前提下,AT32F415的SRAM为32K,最高主频150M,GD32F303的SRAM为48K最高主频120M。其它基本相同。+

2、MCU引脚分布对比
在这里插入图片描述
从上图对比可以看出,AT32F415RCxx较GD32F303RCxx少了两组供电,也就是说多了4个I/0。在SRAM够用的情况下AT32F415RCxx完全可以做为GD32F303RCxx的替代。。。。备胎
对于研发人员、以及产品来说最大的诱惑就是性价比!性价比!性价比!重要的事情说三遍!所以在其它的项目上试用了AT32F415。

AT32F415的应用

既然要使用AT32F415了那么要对开发环境等资源了解一下,不查不知道一查发现AT32F415的资料挺多的,公司官网上的资料很全面。可以放心的使用了。下面列出部分开发相关资料:

  1. AT32F415 雅特力官网 https://www.arterytek.com/cn 这在里可以找到你想要的东东。
  2. AT32 MCU图形化配置软件【AT32_Work_Bench】,可以生成初始化C代码。这个工具不错,类似ST的CubeMx;
    ST的CubeMx内有FreeRTOS,完成相关配置可以一并生成代码。AT32_Work_Bench内FreeRTOS,这样就需要手动来完成移植了。
    AT32 MCU图形化配置软件【AT32_Work_Bench】很好上手。

AT32 Work Bench生成测试程序低层代码

1、打开AT32 Work Bench软件,先择要用的MCU型号。然后点击【新建】。
在这里插入图片描述
2、选择外部时钟
在这里插入图片描述
3、配置时钟树 设置为120M

在这里插入图片描述

4、配置调试口为SWD
在这里插入图片描述
5、配置ADC
在这里插入图片描述
ADC开启DMA模式
在这里插入图片描述
ADC_DMA NVIC设置
在这里插入图片描述
6、配置CAN
在这里插入图片描述
CAN NVIC设置
在这里插入图片描述
7、配置TMR3
在这里插入图片描述
TM3 NVIC设置
在这里插入图片描述
8、配置USART1
在这里插入图片描述
USART1 设置NVIC
在这里插入图片描述
9、配置USART2
在这里插入图片描述
USART2 DMA设置
在这里插入图片描述
USART2 NVIC设置
在这里插入图片描述

10、NVIC配置
在这里插入图片描述

在这里插入图片描述
将外设 抢占优先级 都设置为5,是为了FreeRTOS管理AT32F415的中断,如果AT32F415的中断优先级超出FreeRTOS管理范围程序在长时间运行时有可能会出现假死现象。之前发过https://blog.csdn.net/qq_35830231/article/details/125871280#comments_31177263这个帖子。

11、生成代码
在这里插入图片描述
配置完成后 点击【确定】生成代码。

FreeRTOS移植到AT32F415

之前一直使用FreeRTOS已经习惯使用操作系统做程序了。所以着手将FreeRTOS移植到AT32F415。
1、点击 【打开文件夹】
在这里插入图片描述
在MDK_V5中打开工程
在这里插入图片描述
点击 编译后,没有错误、告警。生成代码没有问题。下面准备移植FreeRTOS。
在这里插入图片描述
2、FreeRTOS移植
a、先在网上下个FreeRTOS包。
在生成代码的文件夹下新建FreeRTOS文件夹。
在这里插入图片描述
b、在新建的FreeRTOS文件夹中拷贝FreeRTOS包中的include、portable、source三件文件
在这里插入图片描述
include文件内容如下:
在这里插入图片描述
portable文件内容如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
多的文件都删除。

source文件内容如下:
在这里插入图片描述
c、在MDK工程中新建两个Group
一个是FreeRTOS/source、一个是FreeRTOS/portable
在这里插入图片描述

FreeRTOS/source、FreeRTOS/portable两个文件添加下图中文件。
在这里插入图片描述
编译后会出现一个问题。
在这里插入图片描述
仔细阅读AT32F415手册发现 AT32F415没有浮点运算单元 (FPU)。这可以就是AT32F415性价比高的原因。之前使用过的GD32F303是有浮点运算单元 (FPU)的。
所以不能使用ARM_CM4F中的port.c。要使用…\FreeRTOS\portable\RVDS\ARM_CM3\port.c

在这里插入图片描述
再次编译程序
在这里插入图片描述
发现有两个错误
在这里插入图片描述
将at32f415_int.c中这两个函数屏蔽
在这里插入图片描述
再次编译程序 没有错误了。
在这里插入图片描述
下面建立两个任务测试下。
增加一个运行灯RUNLED测试任务使用
在这里插入图片描述

在这里插入图片描述
创建两个任务
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2c30b9108a04428498b7ede9e8168d22.png

在这里插入图片描述
FreeRTOSConfig.h配置文件修改
修改系统时钟
在这里插入图片描述
修改中断管理范围
在这里插入图片描述

分别屏蔽两个任务中的LED灯,烧录程序,两个任务可以正常运行。

AT32F415应用过程序中遇到问题

项目中增加了Boot更新程序功能,在做BOOT工程时对2路ADC进行了初始化。用户程序中对也2路ADC进行了初始化。ADC使用DMA模式。结果发现每次上后2路ADC的转换结果不对,有时会发生1、2通道的转换结果发生了互换。也就是2通道的结果到1通过了,1通道的结果到2通道了。
最终发现是ADC多次初始化引起的,将BOOT工程中的ADC初始化屏蔽。一切就正常了。

以上是我对AT32F415应用的理解,请大家多多指教!多谢!希望我的分享对你有所帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值