本文由RT-Thread论坛用户@想当诸侯的小蚂蚁原创发布:https://club.rt-thread.org/ask/article/2966.html
软件
根据厂家demo重新新建工程,工程中包含了gpio、usart。
硬件:
gpio
/* GREEN_LED Port/Pin definition */
#define GREEN_LED_PORT (PortE)
#define GREEN_LED_PIN (Pin00)
/* RED_LED Port/Pin definition */
#define RED_LED_PORT (PortE)
#define RED_LED_PIN (Pin01)
usart4
/* USART RX Port/Pin definition */
#define USART_RX_PORT (PortC)
#define USART_RX_PIN (Pin07)
#define USART_RX_FUNC (Func_Usart4_Rx)
/* USART TX Port/Pin definition */
#define USART_TX_PORT (PortC)
#define USART_TX_PIN (Pin06)
#define USART_TX_FUNC (Func_Usart4_Tx)
添加 RT-Thread Nano 到工程
在 Manage Rum-Time Environment 内打开 RTOS 栏,勾选 kernal,点击 OK 后就将 RT-Thread 内核加入到工程中了。
适配 RT-Thread Nano
中断与异常处理
需要删除工程里中断服务例程文件 hc32f460_interrupts.c中异常处理函数 HardFault_Handler() 和悬挂处理函数 PendSV_Handler(),这两个函数已由 RT-Thread 实现,避免在编译时产生重复定义。
系统时钟配置
需要在 board.c 中实现 系统时钟配置(为 MCU、外设提供工作时钟)与 os tick 的配置 (为操作系统提供心跳 / 节拍)。
void SysTick_Handler(void)
{
rt_os_tick_callback();
}
void rt_hw_board_init(void)
函数中调用系统时钟
SysClkConfig(); //系统时钟初始化
SysTick_Init(RT_TICK_PER_SECOND); //OS Tick 频率配置
void SysClkConfig(void)
所在文件system_hc32f460.c
void SysClkConfig(void)
{
stc_clk_sysclk_cfg_t stcSysClkCfg; //系统时钟
stc_clk_xtal_cfg_t stcXtalCfg; //晶振配置
stc_clk_mpll_cfg_t stcMpllCfg; //PLL
stc_sram_config_t stcSramConfig;
MEM_ZERO_STRUCT(stcSysClkCfg);
MEM_ZERO_STRUCT(stcXtalCfg);
MEM_ZERO_STRUCT(stcMpllCfg);
/* Set bus clk div. 分频 */
stcSysClkCfg.enHclkDiv = ClkSyscl