记:华大HC32F460系列搭建FreeRTOS记录

0x00前言

最近的芯片荒让人十分难受,不少人都开始查看中国国产的芯片,其中MCU比较大的就是华大与兆易、雅特力等厂商,他们各有优劣,因为笔者最近看重了华大的AOS系统,暂时还没有来得及使用,但是还是将最小系统搭建起来了。这里记录一下软件方面的实现。

前情提要:

本文写下时间线中的各个版本号:

  • ddl:1.3.1

  • FreeRTOS:10.4.3

  • User Manual:1.21

技能熟练度
数据结构了解

0x10 准备工作

下列的清单中描述了笔者发现了的需要使用的库与相关的资料

  • 华大的最新ddl库
  • FreeRTOS最新库文件
  • 华大最新的IDE支持包(如果需要IDE)
  • 用户手册

0x11 华大的ddl库

华大的ddl库直接可以在官网1上面找到,截止当前完成的时间,ddl最新版本号为1.3.1。

而IDE支持包和用户手册都可以在下载界面下找到。

ddl库内在当前版本下有一个小BUG,可以直接修改,这个bug将在下文中提到。

0x21 FreeRTOS最新的文件

官网2上的最新库使用即可,但是需要注意的是,当前的FreeRTOS并没有使用到华大相关MCU的example,所以我们需要自己实现一个example。

0x20 环境配置

笔者使用了keil进行配置。在IAR下的配置也是大同小异。可以参考实现。

keil内集成了HC相关的部分调试相关的配置。

IAR则需要在9+的版本下才会有很多的HC相关支持。
在这里插入图片描述

随后的实现仅需要选中CMSIS即可。这里可以选择只用lib而不用src,因为关于FPU的部分开关需要依赖的部分文件这里可能没有。

在这里插入图片描述

随后在内部的编译器设置下选择相关的头文件环境。

在这里插入图片描述

这里的参数可能根据各种情况下的实际配置改变,还是需要因地制宜的添加或者是删除。

随后需要增加相关的标签
在这里插入图片描述

HC32F46x,USE_DEVICE_DRIVER_LIB,ARM_MATH_CM4

这里就是HC32F460相关的参数。其中ARM_MATH_CM4是正常情况下不需要使用的,但是如果使用了DSP相关的库源码,则需要使用这个宏标签。

到这里,基本上就可以完成当前的编译。

0x30 FreeRTOS加入

首先将其解压并放置在规定的位置。

这里需要注意的是,必须要将portable下的文件按照当前需要的型号与核心进行修改,笔者这里留下了M4相关的参数。

这里的FreeRTOSConfig.h的相关参数可以使用同为M4的STM32F407的芯片example,下面的笔记描述了一个已经实现了基本的实现的结构:

#define configUSE_PREEMPTION			1
#define configUSE_IDLE_HOOK				0
#define configUSE_TICK_HOOK				0
#define configCPU_CLOCK_HZ				( SystemCoreClock )
#define configTICK_RATE_HZ				( ( TickType_t ) 10*1000 )   //200,000k/10k = 20,000k
#define configMAX_PRIORITIES			( 5 )
#define configMINIMAL_STACK_SIZE		( ( unsigned short ) 130 )
#define configTOTAL_HEAP_SIZE			( ( size_t ) ( 75 * 1024 ) )
#define configMAX_TASK_NAME_LEN			( 10 )
#define configUSE_TRACE_FACILITY		1
#define configUSE_16_BIT_TICKS			0
#define configIDLE_SHOULD_YIELD			1
#define configUSE_MUTEXES				1
#define configQUEUE_REGISTRY_SIZE		8
#define configCHECK_FOR_STACK_OVERFLOW  0
#define configUSE_RECURSIVE_MUTEXES		1
#define configUSE_MALLOC_FAILED_HOOK	0
#define configUSE_APPLICATION_TASK_TAG	1
#define configUSE_COUNTING_SEMAPHORES	1
#define configGENERATE_RUN_TIME_STATS	0

随后在最后的几行宏定义修改完成:

/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
standard names. */
#define vPortSVCHandler SVC_Handler//SVC_IrqHandler
#define xPortPendSVHandler PendSV_Handler//PendSV_IrqHandler
#define xPortSysTickHandler SysTick_Handler//SysTick_IrqHandler

这里还需要将hc32f46x_interrupts.c内部的相关接口去除。否则直接使用SVC_IrqHandler接口替换掉vPortSVCHandler也可以。

0x40 一个小问题

在合并两者的时候,笔者发现了一个小问题。修改完成后在这里稍稍记录一下:

hc32f46x_clk.h

/**
 *******************************************************************************
 ** \brief  The system clock source.
 **
 ******************************************************************************/
 typedef enum en_clk_sys_source
 {
     ClkSysSrcHRC                   = 0u,   ///< The system clock source is HRC.
     ClkSysSrcMRC                   = 1u,   ///< The system clock source is MRC.
     ClkSysSrcLRC                   = 2u,   ///< The system clock source is LRC.
     ClkSysSrcXTAL                  = 3u,   ///< The system clock source is XTAL.
     ClkSysSrcXTAL32                = 4u,   ///< The system clock source is XTAL32.
     CLKSysSrcMPLL                  = 5u,   ///< The system clock source is MPLL.
 }en_clk_sys_source_t;

CLKSysSrcMPLL修改和上述的风格并未一致,可以选择修改成ClkSysSrcMPLL即可。

0x50 更多

本文首发自 记:华大HC32F460系列搭建FreeRTOS记录,更多文章可进入我的博客详查。


  1. https://www.hdsc.com.cn/Cn/Index/listView/catid/83 ↩︎

  2. https://freertos.org/a00104.html ↩︎

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GreenDreamer

如果帮到了你,还望请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值