# BabyOS_HDSC **Repository Path**: zhouyong_bing/BabyOS_HDSC ## Basic Information - **Project Name**: BabyOS_HDSC - **Description**: 基于华大MCU HC32L136K8TA运行BabyOS代码 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: https://gitee.com/notrynohigh/BabyOS - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 7 - **Created**: 2021-04-23 - **Last Updated**: 2021-04-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 建立工程移植BabyOS ## 1.下载资料 ​ [](ftp://HdscCustomer:HdscGuest2019!@ftp.hdsc.com.cn/%E8%B5%84%E6%96%99%E4%B8%8B%E8%BD%BD/HC32L136_SDK/) ​ ![](https://gitee.com/notrynohigh/BabyOS_HDSC/raw/master/doc/file_list.png) ## 2.准备开发环境 工程模板:HC32L136_TEMPLATE_Rev1.0.0 MDK pack包:HC32L136_IDE_Rev1.0.0\HC32L136_IDE_Rev1.0.0\MDK_IDE FLM文件:HC32L136_DDL_Rev1.2.0\HC32L136_DDL_Rev1.2.0\mcu\MDK\config 板载调试工具是CMSIS-DAP,选择对应的DEBUG方式即可。 ## 3.添加华大提供的驱动 文件路径:HC32L136_DDL_Rev1.2.0\HC32L136_DDL_Rev1.2.0\driver ## 4.添加BabyOS代码 仓库地址: 克隆代码后将bos文件夹复制到工程目录。 bos/core/ 核心文件全部添加至工程 bos/config/ 配置文件及设备列表文件,全部添加至工程 bos/driver/ 选择需要的驱动添加至工程,将b_hal.h内定义的硬件接口取消注释 bos/hal/hal/ 硬件抽象层,将需要的文件添加至工程,根据具体平台进行修改 bos/hal/utils/ 底层实用代码,全部添加至工程 bos/modules/ 功能模块,全部添加至工程 bos/thirdparty/ 第三方开源代码,将需要的添加至工程 b_hal.h内使用#include "hc32l136k8ta.h"替换#include "stm32f1xx_hal.h" ## 5.修改BabyOS硬件抽象层API内容 首先修改b_hal_gpio.c 以及 b_hal_uart.c 具体的查看代码。 ## 6.初始化串口0输出打印 ### 6.1初始化PA9PA10引脚 ![](https://gitee.com/notrynohigh/BabyOS_HDSC/raw/master/doc/uart_gpio.png) ```C void InitGPIO() { stc_gpio_config_t stcGpioCfg; DDL_ZERO_STRUCT(stcGpioCfg); stcGpioCfg.enDir = GpioDirOut; Gpio_Init(GpioPortA,GpioPin9,&stcGpioCfg); Gpio_SetAfMode(GpioPortA,GpioPin9,GpioAf1);//TX stcGpioCfg.enDir = GpioDirIn; Gpio_Init(GpioPortA,GpioPin10,&stcGpioCfg); Gpio_SetAfMode(GpioPortA,GpioPin10,GpioAf1);//RX } ``` ### 6.2初始化串口实现输出 ```C //9600bps UartMode1 void InitUart() { uint16_t u16Scnt = 0; stc_uart_config_t stcConfig; stc_uart_irq_cb_t stcUartIrqCb; stc_uart_multimode_t stcMulti; stc_uart_baud_t stcBaud; en_uart_mmdorck_t enTb8; DDL_ZERO_STRUCT(stcConfig); DDL_ZERO_STRUCT(stcUartIrqCb); DDL_ZERO_STRUCT(stcMulti); DDL_ZERO_STRUCT(stcBaud); stcUartIrqCb.pfnRxIrqCb = NULL; stcUartIrqCb.pfnTxIrqCb = NULL; stcUartIrqCb.pfnRxFEIrqCb = NULL; stcUartIrqCb.pfnPEIrqCb = NULL; stcUartIrqCb.pfnCtsIrqCb = NULL; stcConfig.pstcIrqCb = &stcUartIrqCb; stcConfig.bTouchNvic = FALSE; if(TRUE == stcConfig.bTouchNvic) { EnableNvic(UART0_IRQn,IrqLevel3,TRUE); } stcConfig.enRunMode = UartMode1; stcConfig.enStopBit = Uart1bit; stcMulti.enMulti_mode = UartNormal; Uart_SetMultiMode(UARTCH1,&stcMulti); enTb8 = UartDataOrAddr; Uart_SetMMDOrCk(UARTCH0,enTb8); Uart_Init(UARTCH0, &stcConfig); Uart_SetClkDiv(UARTCH0,Uart8Or16Div); stcBaud.u32Pclk = Sysctrl_GetPClkFreq(); stcBaud.enRunMode = UartMode1; stcBaud.u32Baud = 9600; u16Scnt = Uart_CalScnt(UARTCH0,&stcBaud); Uart_SetBaud(UARTCH0,u16Scnt); Uart_ClrStatus(UARTCH0,UartRC); Uart_EnableFunc(UARTCH0,UartRx); } ``` ## 7.初始化滴答定时器 ```C SysTick_Config(4000); //4M主频,1ms中断 void SysTick_Handler(void) { bHalIncSysTick(); //调用BabyOS的计数 } ``` ## 8.测试log ```C void TestLog() { b_log("BabyOS HC32L136\r\n"); } int32_t main(void) { /*******************************************************************MCU Init**/ InitClock(); InitGPIO(); InitUart(); /************************************************************************/ bInit(); while(1) { bExec(); BOS_PERIODIC_TASK(TestLog, 1000); } } ``` ![](https://gitee.com/notrynohigh/BabyOS_HDSC/raw/master/doc/log.png)