# 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/)

## 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引脚

```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);
}
}
```
