本帖最后由 ArterySW 于 2022-2-28 21:21 编辑
最近意外的发现一款优秀的国产芯片——雅特力的AT32F403A
以下是摘自雅特力官网: 雅特力科技AT32F403A系列高效能微控制器,搭载32位ARM Cortex-M4内核,配合先进制程有效提升整体效能达240MHz的运算速度。内建的单精度浮点运算单元(FPU)及数字信号处理器(DSP),搭配丰富的外设及灵活的时钟控制机制,能满足多种领域应用。完善的内存设计,最高可支持1MB闪存存储器(Flash)及224KB随机存取存储器(SRAM),其闪存存储器执行零等待的优异表现,超越业界同级芯片水平。
240MHz主频,单精度浮点运算单元(FPU) 224KB SRAM一看到这些参数感觉就被种草了,没想到国产的MCU也能做的这么好,不管是性能还是价格上基本上是完全吊锤STM32F103。于是迫不及待的整了一块AT32F403A的板子回来,长下图这样
'
进入正题 因为以前一直使用的是STM32F103,所以这次先把环境搭好,再进行下一步操作,于是先移植个CMSIS RTOS V1封装层来试试水,这次使用的是之CMSIS RTX,freeRTOS版本后面有时间再搞
首先去官网下载雅特力的BSP,类似于STM32 的标准库
下载好了我们可以看到以下的文件结构
然后我们进project\at_start_f403a\examples\gpio\led_toggle\mdk_v5这个工程来作为模板工程,越简单越好,所以我这里选择的是LED的工程
RTX源文件的位置C:\Users\sonnytu\AppData\Local\Arm\Packs\ARM\CMSIS\5.7.0\CMSIS,每个人可能安装的位置可能不一样用evetything 搜索一下就能找到,目录如下,然后我们后面说的都用相对于这个文件夹下的目录了,这样比较省事
我们在middlewares新建一个文件夹rtx,然后我们将RTOS\RTX里的文件复制到middlewares\rtx下
然后在KEIL工程中添加文件如下 因为AT32F403A是M4内核,所以这里选择的是HAL_CM4.c ,而STM32F103是M3内核选的是HAL_CM3.c
然后在KEIL工程中添加头文件路径如下
然后在C/C++ Define中添加__CORTEX_M4F,__CMSIS_RTOS,__FPU_PRESENT,意思是使用CMSIS封装层,使用浮点
然后在at32f4xx_it.c中屏蔽以下几个中断,因为这几个中断被系统占用了
void SVC_Handler(void) void PendSV_Handler(void) void SysTick_Handler(void)
开始编译,编译通过,说明RTOS源文件和路径都正确添加了
接下来配置RTX运行参数在RTC_Conf_CM.c中配置,参数配置成和下面一样即可,主要是要配置正确的主频,我这里使用默认的240Mhz
一切准备就绪后,接下来写个任务运行看看效果
在Debug模式下观看cnt的值,看到cnt[0]每隔1S增加1,cnt[1]每隔500ms增加1,说明移植成功
至此CMSIS RTX 移植结束,其实AT32F403A移植RTOS还是比较简单的,和STM32F4系列的是一模一样,因为内核是一样的,后面开始使用各个外设,看了一下AT32F403A和STM32F103的寄存器,外设的寄存器基本都一样,只要之前用过STM32F103那么上手是很容易的 |