单片机项目开发实例_学习单片机和嵌入式开发?这个项目是你入坑的不二之选...

56d5a34dea91f2c367ffc15b3a8ef725.png

MCU,中文简称单片机。即将 CPU、存储器(RAM和ROM)、多种 I/O 接口等集成在一片芯片上,形成的芯片级计算机。 到目前为止,中国的单片机应用和嵌入式系统开发走过了二十余年的历程,随着物联网的兴起,单片机和嵌入式开发逐渐受到越来越多的关注。

今天推荐的这个开源项目就是专为MCU项目开发提速的代码框架,也是刚刚入选 GVP 的项目,一起来学习一下吧!

项目名称:BabyOS

项目作者:bean

开源许可协议:MIT

项目地址:https://gitee.com/notrynohigh/BabyOS

项目简介

BabyOS 适用于 MCU 项目,她是一套管理功能模块和外设驱动的框架。

对项目而言,缩短开发周期。项目开发时选择适用的功能模块及驱动。直接进入功能代码编写的阶段。

7281cf9ee7d7cc8dc8dbc133624353b5.png

对工程师而言,减少重复工作。调试过的功能模块和驱动代码放入 BabyOS 中进行管理,以后项目可以直接使用,去掉重复调试的工作。

适用项目

使用裸机开发的项目推荐基于BabyOS进行,使用操作系统开发的项目,BabyOS可作为功能库及驱动库使用。

使用方法

添加文件

bos/core/ 核心文件全部添加至工程

bos/config/ 配置文件及设备列表文件,全部添加至工程

bos/driver/ 选择需要的驱动添加至工程,将b_hal.h内定义的硬件接口取消注释

bos/hal/hal/ 硬件抽象层,将需要的文件添加至工程,根据具体平台进行修改

bos/hal/utils/ 底层实用代码,全部添加至工程

bos/modules/ 功能模块,全部添加至工程

bos/algorithm/ 实用算法,选择需要的添加至工程

bos/thirdparty/ 第三方开源代码,将需要的添加至工程

增加系统定时器

例如使用滴答定时器,中断服务函数调用:void bHalIncSysTick(void);

注:定时器的周期与b_config.h里_TICK_FRQ_HZ要匹配

选择功能模块

b_config.h进行配置,根据自己的需要选择功能模块。

a408570335a5dcb5f83196a955db46d6.png

注册设备

//           设备        驱动          描述B_DEVICE_REG(W25QXX, bW25X_Driver, "flash")//如果没有注册任何设备,取消B_DEVICE_REG(null, bNullDriver, "null")的注释    //B_DEVICE_REG(null, bNullDriver, "null")  

使用范例

以b_kv功能模块为例,先在b_config里面使用b_kv。

取消硬件接口的注释

b_hal.h中取消如下部分的注释,并根据实际连接图修改GPIO和SPI号。

#define HAL_W25X_SPI                    B_HAL_SPI_2#define HAL_W25X_CS_PORT                B_HAL_GPIOB             #define HAL_W25X_CS_PIN                 B_HAL_PIN12

修改硬件抽象层b_hal_spi.c内SPI的操作(依赖硬件平台,使用STM32 HAL库为例)

void bHalGPIO_WritePin(uint8_t port, uint8_t pin, uint8_t s){    GPIO_PinState sta = (s) ? GPIO_PIN_SET : GPIO_PIN_RESET;    HAL_GPIO_WritePin(GPIO_PortTable[port], GPIO_PinTable[pin], sta);}

基于SPIFLASH使用KV功能

#include "b_os.h"    //头文件//b_config.h配置文件中使能KV存储int main(){    uint8_t buf[128];    //......         bInit();    //初始化,外设的初始化会在此处调用        //下面举例使用:W25QXX和KV存储功能模块,其中W25QXX已经添加到b_device_list.h    if(0 == bKV_Init(W25QXX, 0xA000, 4096 * 4, 4096)) //初始化KV存储,指定存储设备W25QXX    {        b_log("bKV_Init ok...");    }    //存储键值对(可用于存储系统配置信息)    bKV_Set((uint8_t *)"name", (uint8_t *)"BabyOS", 7);    bKV_Get((uint8_t *)"name", buf);    b_log("name:%s", buf);     //......    while(1)    {        //.....        bExec();      //循环调用此函数        //.....    }}

如果不使用功能模块,单独对设备进行操作,使用如下方式进行:

//举例使用W25QXX读取数据,从0地址读取128个字节数据至buf{    int fd = -1;    fd = bOpen(W25QXX, BCORE_FLAG_RW);    if(fd == -1)    {        return;    }    bLseek(fd, 0);    bRead(fd, buf, 128);    bClose(fd); }

以上就是该项目的简单介绍,如果你觉得这个项目对你可以有所帮助,记得去项目主页给它点一个 Star 哦(点击下方了解更多即可直达项目主页):https://gitee.com/notrynohigh/BabyOS/wikis

Gitee 上还有更多硬件相关开源项目,点击链接即可查看:https://gitee.com/explore/hardware

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值