## 基于STM32体验BabyOS
再以STM32F107进行说明。相关的例子在 https://gitee.com/notrynohigh/BabyOS_Example
### 准备基础工程
基础功能需要做到以下几点:
①MCU时钟及片内外的初始化:
初始化时钟、GPIO、滴答定时器和串口1。
②实现用于心跳的定时器:
将滴答定时器作为心跳时钟。
```c
static void _ClockInit()
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1 | RCC_APB2Periph_AFIO, ENABLE);
}
static void _GpioInit()
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
static void _UartInit()
{
NVIC_InitTypeDef NVIC_InitStruct;
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
NVIC_Init(&NVIC_InitStruct);
USART_Cmd(USART1, ENABLE);
}
void BoardInit()
{
_ClockInit();
_GpioInit();
_UartInit();
}
```
```C
//滴答定时器
SysTick_Config(SystemCoreClock / TICK_FRQ_HZ);
NVIC_SetPriority(SysTick_IRQn, 0x0);
```
### 添加BabyOS代码
| 路径 | 部分/全部 | 用于快速体验 |
| -------------- | ------------ | ------------------------------------------------------------ |
| bos/algorithm | 全部添加 | *全部添加* |
| bos/core | 全部添加 | *全部添加* |
| bos/drivers | 根据需要添加 | *暂时不添加其中文件* |
| bos/hal | 全部添加 | *全部添加* |
| bos/mcu | 根据需要添加 | *添加bos/mcu/st/stm32f10x/路径代码* |
| bos/modules | 全部添加 | *全部添加* |
| bos/thirdparty | 根据需要添加 | *添加bos/thirdparty/nr_micro_shell/路径代码* |
| bos/utils | 全部添加 | *全部添加* |
| bos/_config | | *b_config.h 全局 配置文件
b_device_list.h 注册设备的文件
b_hal_if.h 驱动接口文件* |
编译器添加两个路径即可:
`bos/`
`_config/` 如果配置文件拷贝到其他路径了,则添加相应路径即可。
### 修改配置
确认已安装python,双击 _config/b_config.bat


### 调用必要的函数
包含头文件 `b_os.h`
①滴答定时器中断服务函数调用 `bHalIncSysTick();`
```C
void SysTick_Handler()
{
bHalIncSysTick();
}
```
②调用 `bInit(); bExec();`
```C
int main()
{
BoardInit();
SysTick_Config(SystemCoreClock / TICK_FRQ_HZ);
NVIC_SetPriority(SysTick_IRQn, 0x0);
bInit(); //bos初始化
bShellInit(); //shell初始化
while (1)
{
bExec(); //bos执行函数
}
}
```
③由于勾选了shell功能模块,所以需要在串口接收中断服务函数里调用`bShellParse`,将数据喂给模块。
### 快速体验结果
BabyOS的shell模块默认支持查询版本的指令,输入 `bos -v` 便可以查询到版本。
