合泰HT32F52352 RT-Thread操作系统移植

文章介绍了Holtek的HT32F52352系列单片机,基于Cortex-M0+内核,适用于低功耗应用。同时,详述了如何将RT-ThreadNano实时操作系统移植到该单片机上,包括添加源码、配置系统时钟、适配中断处理和FinSH组件,以实现命令行输入和输出功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HT32F52352系列

该系列的Holtek单片机是一款基于ARM Cortex-M0+处理器内核的32-bit高性能低功耗单片机。Cortex-M0+是把嵌套向量中断控制器(NVIC)、系统节拍定时器(Systick Timer)和先进的调试支持紧紧结合在一起的新一代处理器内核。

该系列单片机可借助Flash加速器工作在高达48Mhz的频率下,以获得较大的频率。他提供128KB的嵌入式Flash存储器用作程序/数据存储,16KB的嵌入式SRAM存储器用作系统操作和应用程序运作。此系列单片机具有多种外设,如ADC、IIC、USART、UART、SPI、IIS、GPTM、MCTM、SCL、CRC-16/32、RTC、WDT、PDMA、EBI、USB2.0 FS、SW-DP(串行线调试端口)等。在唤醒延迟和功耗方面,几种省电模式提供了具有灵活性的较大优化方案,此举在低功耗应用方面尤为值得考虑。

以上这些特性使得该系列单片机可以广泛地适用于各种应用,如大型家用电器应用控制、电源监控、报警系统、消费类产品、手持式设备、数据记录应用、马达控制等。

官网:https://www.holtek.com.cn/web/guest/home

  1. 实时操作系统移植

RT-Thread Nano

RT-Thread Nano简介

RT-Thread Nano是一个极简版的硬实时内核,他是由C语言开发,采用面向对象的编程思维,具有良好的代码风格,是一款可裁剪的、抢占式实时多任务的RTOS。其内存资源占用极小,功能包括任务处理、软件定时器、信号量、邮箱和实时调度等相对完整的实时操作系统特性。适用于家电、消费类电子、医疗设备、工控等领域大量使用的32位ARM入门级MCU的场合。

图1.1 RT-Thread软件框图

上图是RT-Thread Nano的软件框图,包含支持的CPU架构与内核源码,还有可拆卸的FinSH组建。

支持架构:ARM:Cortex M0/M3/M4/M7等、RISC-V及其他。

功能:线程管理、线程间同步与通信、时钟管理、中断管理、内存管理。

移植步骤

1.准备一份裸机源码工程

2.下载RT-Thread Nano源码

RT-Thread官网下载网址:https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-nano/nano-port-iar/an0040-nano-port-iar

3.添加RT-Thread Nano到工程

(1)在裸机工程下新建文件夹rtthread文件夹

(2)把Nano源码中的include、libcpu、src文件夹复制到裸机工程新建的rtthread文件夹下

(3)把Nano源码文件夹rtthread/bsp 中的board.c和rtconfig.h两个文件复制到裸机工程新建的rtthread文件夹下

(4)打开裸机工程,新建rtthread文件夹,并在分组下添加源码:

  • 添加工程下rtthread/src/文件夹所有文件到工程。

  • 添加工程下rtthread/libcpu/文件夹中相应内核的CPU移植文件及上下文切换文件:cpuport.c以及context_iar.S。

  • 添加rtthread/文件夹下的board.c。

4.添加头文件路径

5.适配RT-Thread Nano

中断和异常处理:

屏蔽工程中的异常处理函数HardFault_Handler()和悬挂处理函数PendSV_Handler()。

系统时钟配置:

需要在board.c中实现系统时钟配置。

解决报错问题:

需添加RTE-Components.h

/* RT-Thread config file */

#ifndef __RTTHREAD_CFG_H__
#define __RTTHREAD_CFG_H__

#include "RTE_Components.h"

#define RT_THREAD_PRIORITY_MAX  8

#define RT_TICK_PER_SECOND    1000

#define RT_ALIGN_SIZE   4

#define RT_NAME_MAX       16

#define RT_USING_COMPONENTS_INIT


#define RT_USING_USER_MAIN

#define RT_MAIN_THREAD_STACK_SIZE     612


#define RT_DEBUG
#define DBG_LEVEL         DBG_LOG
//#define RT_DEBUG_INIT 1

#define RT_USING_OVERFLOW_CHECK


#define RT_USING_HOOK

#define RT_USING_IDLE_HOOK

#define RT_USING_TIMER_SOFT         1
#if RT_USING_TIMER_SOFT == 0
#undef RT_USING_TIMER_SOFT
#endif

#define RT_TIMER_THREAD_PRIO        4

#define RT_TIMER_THREAD_STACK_SIZE    1024

#define RT_TIMER_TICK_PER_SECOND    1000

#define RT_USING_SEMAPHORE

#define RT_USING_MUTEX

#define RT_USING_EVENT

#define RT_USING_MAILBOX

#define RT_USING_SIGNALS

#define RT_USING_MESSAGEQUEUE

#define RT_USING_HEAP

#define RT_USING_SMALL_MEM

#define RT_USING_TINY_SIZE

#define RT_USING_MEMPOOL

#define RT_USING_MEMHEAP



#define RT_USING_CONSOLE

#define RT_CONSOLEBUF_SIZE          128

#define RT_CONSOLE_DEVICE_NAME      "uart0"



#if defined(RTE_FINSH_USING_MSH)
#define RT_USING_FINSH
#define FINSH_USING_MSH
#define FINSH_USING_MSH_ONLY

#define __FINSH_THREAD_PRIORITY     6
#define FINSH_THREAD_PRIORITY       (RT_THREAD_PRIORITY_MAX / 8 * __FINSH_THREAD_PRIORITY + 1)

#define FINSH_THREAD_STACK_SIZE     600

#define FINSH_HISTORY_LINES            5

#define FINSH_USING_SYMTAB

#endif

#if defined(RTE_USING_DEVICE)
#define RT_USING_DEVICE
#endif


#endif

(1)

(2)

(3)

(4)

(5)

(6)

(7)

(8)

6.在Nano上添加UART控制台(实现打印)

实现串口初始化:

实现rt_hw_console_output:

7.在Nano上添加FinSH组件(实现命令输入)

RT-Thread FinSH是RT-Thread的命令组件(shell),提供一套供用户在命令行调用的操作接口,主要用于调试或查看系统信息。

添加FinSH源码到工程:

(1)复制Nano源码中components文件夹下的finsh文件夹到工程中。

(2)打开工程新建finsh分组,添加工程中finsh文件夹下的所有.c文件,并在工程中添加finsh文件夹的路径

(3)在rtconfig.h中使能#define RT_USING_FINSH宏定义

实现rt_hw_console_getchar

要实现FinSH组件功能:既可以打印也能输入命令进行调试,控制台已经实现了打印功能,现在还需要在board.c中对接控制台输入函数,实现字符输入:

### HT32F52352 微控制器 RTOS 配置与使用教程 HT32F52352 是一款基于 ARM Cortex-M0 内核的微控制器,广泛应用于嵌入式系统设计中。对于该微控制器的实时操作系统 (RTOS) 配置和固件开发,以下是详细的说明: #### 1. 支持的 RTOS 类型 HT32 系列微控制器通常可以兼容多种主流的 RTOS 解决方案,例如 FreeRTOS 和 uC/OS-II。FreeRTOS 是一种轻量级的操作系统内核,适用于资源受限的小型设备,因此非常适HT32F52352 这样的 MCU- **FreeRTOS**: 提供任务调度、信号量、消息队列等功能,能够显著提升多任务处理能力[^4]。 #### 2. 开发环境准备 在配置 RTOS 前,需搭建适 HT32F52352 的开发环境。推荐使用的集成开发环境 (IDE) 包括 Keil MDK 或 IAR Embedded Workbench。此外,还需要下载并安装 HT32 官方提供的 SDK 及其配套文档。 - 使用官方固件库能极大简化驱动程序编写过程,类似于 STM32 中提到的情况[^1]。然而需要注意的是,如果追求极致性能,则可能需要绕过部分高级封装接口直接操作寄存器。 #### 3. RTOS 初始化流程 以下是基于 FreeRTOS 的初始化步骤概述(不包含具体实现细节): ```c #include "FreeRTOS.h" #include "task.h" // 创建两个简单的测试任务 void vTaskFunction(void *pvParameters); int main() { // 初始化硬件外设... // 启动第一个任务 xTaskCreate(vTaskFunction, "Task1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL); // 启动第二个任务 xTaskCreate(vTaskFunction, "Task2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 2, NULL); // 开始调度器运行 vTaskStartScheduler(); } void vTaskFunction(void *pvParameters) { const char* taskName = (char*) pvParameters; while(1){ printf("%s is running\n", taskName); vTaskDelay(pdMS_TO_TICKS(1000)); // 模拟工作负载延迟一秒 } } ``` 上述代码片段展示了如何定义基本的任务以及启动它们的方法[^5]。 #### 4. 外设驱动适配 当引入 RTOS 后,原先单线程下的中断服务例程(ISR)可能会变得复杂化。此时应考虑采用邮箱(mailbox), 排队(queue)等方式来传递数据给相应的高优先级任务处理而不是阻塞当前执行路径[^6]。 另外关于 IO 引脚分配等问题,请参照具体的开发板资料获取确切信息[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值