eBox生态圈:简化STM32编程,4个月完成eBox固件库(申精)
本帖最后由 shentqlf 于 2015-10-15 22:08 编辑四个月。。。真是不知该从何说起,这四个月应该说是,除了上班,剩下的时间都贡献给eBox了。
鄙人接触STM32有些年头了,也做过很多工程项目首选的控制器就是STM32,觉得STM32还是比较好用的一款芯片。随着项目的增多,发现每次做电路板回来都要调试板子上各种芯片的驱动,即使以前写过的驱动,也得修改IO等其他配置,说心里话
STM32的配置还是比较复杂的,我倒现在都没记住所有硬件外设的配置方法,每次都要查阅手册和芯片资料,不知各位大侠是不是也有此感觉。所以就心生念头,解决这个问题,让STM32像Arduino一样!这就是eBox最开始的想法。ST官方好像有个
maple,但是我没用过,就看过几眼介绍,然后决定不喜欢。然后就是4个月的熬夜。。。到今天终于完成了软硬件!!!
一、了解什么是eBox
eBox是一个运行在STM32平台上的涵盖了驱动层、系统层、标准应用软件层、用户软件层和bootloader的软硬件一体化的解决方案。丰富的标准驱动和标准应用,像用Arduino那样方便,性能又远高于arduino。操作系统的支持让eBox满足多任务系统的需求;标准应用为你提供多种控制算法、通信协议,满足不同应用场所的需求。
二、程序架构
有了这样一个程序架构,谢代码就可以明确代码功能和依赖关系,有助于代码层次化分明。
三、编程语言
eBox是基于c/c++编程实现的。需要学习简单c/c++的语言知识。
四、外设固件库支持列表
●数字IO,PA0-PG15所有引脚
●ADC1的16个通道,CH1-16
●通用定时器TIM2、3、4的定时中断
●高级定时器TIM1的定时中断
●12路PWM
●16通道的外部中断,可影射所有引脚
●硬件SPI1、2
●硬件I2C1、2
●软件SPI,支持任意IO配置
●软件件I2C,支持任意IO配置
●串口,支持USART1、2、3
●实时时钟RTC
●内部flash编程
目前也就调试了这么多了。外设固件库是对官方固件库的接口重新封装,基本是以外设描述性质的参数去初始化,所有外设具有较为统一的调用方法。
五、驱动库
eBox驱动是eBox固件最大的亮点,在用户下载标准的eBox驱动后只需做简单的IO连接、通信接口连接即可,不需要做何寄存器相关的任何修改即可将驱动程序移植到本地。从根本解决了STM32驱动移植性差的根本问题,大大降低用户驱动开发、调试难度。
驱动框架
目前提供的驱动列表有:
●74HC595串入并出转换芯片驱动
●独立按键(作者认为非常好使的按键程序)
●编码器按键驱动
●LCD1602显示器驱动
●Nokia5110显示器驱动
●DS3231实时时钟驱动
●MPU6050飞控必备的6轴传感器驱动
●L3G4200D三轴数字陀螺仪驱动
●LSM303DHLC三轴电子罗盘驱动
●AT24C02存储芯片驱动
●W25X16系列spi flash存储芯片驱动
●W5500网络控制器驱动
●SD/TF卡驱动
●三基色LED驱动,支持HSV、HSL调色。
●WS2812单线最牛三基色LED控制器,内部自带gamma校正,软件支持HSV、HSL调色。
在限定的格式下下出来的驱动可移植性是非常高的。只要是基于eBox固件库编写的驱动,不需要做任何修改即可用于不同的项目中,当然初始化那个接口中包含了你自己的硬件连接信息。驱动架构在编程指南中有详细介绍。此处不再啰嗦。
六、标准应用层
●常用工程数学、控制库(正在更新。。。)
●网络通信
●文件系统
●色彩控制、转换器
●等等
这一层提供了通用的应用软件,包括通信、文件系统、一些数学、控制算法。方便用户在不同的应用领域的使用。
七、操作系统
自己写的(调度思想是大牛mango提供的)一个全抢占式操作系统。最大支持32个不同优先级任务(优先级不能相同),支持CPU使用率的统计,任务堆栈使用率的统计,任务的挂起。最大的特点就是简单高效,容易上手。
用户可以根据自己的习惯是否使用操作系统。
到此软件基本的状况就是这样了,下面简单的说下硬件
eBox-SPARK
寓意:星星之火、亦可燎原。希望能让更多的用户参与eBox生态圈的发展中,成为大家都认可的平台。方便大家使用。
上图
这是硬件的基本情况、主控选择了STM32F103C8T6,外设主要包含了一个W5500网络控制器、SD/TF卡、按键、LED。
为什么没有添加更多的外设?
一是成本考虑、二是必要性的考虑。SPARK主要是为了引导大家入门eBox的编程。用排针的方式引出来更通用,可以让用户连接自己的外设,做实验。
eBox的宗旨:
彻底简化STM32编程、打造eBox生态圈!
eBox最大的亮点在于,开源驱动的共享。以后每个人写的代码上传到咱们论坛里,让坛友下载后即可以使用。我一个人能写的驱动数量是有限的,只有更多人参与进来才能让驱动丰富起来!
目前核心内容趋于稳定,才面向大家提供了资料,日后会经常更新的。
eBox花费了我的大量精力和时间,其中包含了无数个通宵达旦和大把的人民币。。。
希望坛友支持下!
放个淘宝连接:https://item.taobao.com/item.htm?spm=a230r.1.14.1.UbbK4q&id=522129603565&ns=1&abbucket=16#detail
不知道算不算阿莫先生认为的广告贴。。。如有不妥,我就删除了连接。希望莫大网开一面,资料是第一个传至本坛的。
工程是MDK5建立的
本帖最后由 shentqlf 于 2015-10-15 22:28 编辑
上传一个模拟量读取的代码
//STM32 RUN IN eBox
#include "ebox.h"
void setup()
{
ebox_init();
uart1.begin(9600);
PA7.mode(AIN);
}
int16_t x;
int main(void)
{
setup();
while(1)
{
x = analog_read(&PA7);
uart1.printf("hex = %05d\r\n",x);
x = analog_read_voltage(&PA7);
uart1.printf("val = %04dmv\r\n",x);
uart1.printf("==============\r\n",x);
delay_ms(1000);
}
}
再看一个pwm的代码,频率1K,占空比50% = 500/1000*100%
//STM32 RUN IN eBox
#include "ebox.h"
PWM pwm1(&PB8,1000);
//STM32 RUN IN eBox
void setup()
{
ebox_init();
pwm1.set_duty(500);
}
int main(void)
{
setup();
while(1)
{
}
} 本帖最后由 shentqlf 于 2015-10-17 18:24 编辑
kinsno 发表于 2015-10-17 15:33
说好的OS代码呢,没发现呢?
昨天喝高了~~~
导致昨天没能及时更新,对不住网友了。。。
今天整理了下,把操作系统的代码搞上来。
遗留问题:由于核心代码以lib的形式发布,编译器不会重新编译,导致ebox.h中的
#define USE_OS即使设置为1也不会去重新编译核心代码。所以我重新发了一个带os的固件库。一个是
#define USE_OS 0不带操作系统
#define USE_OS 1带操作系统
两个版本。
修改按键驱动程序中一个变量名字的错误。。。
BUTTON::BUTTON(GPIO* p_pin, uint8_t pull_up)
{
pin = p_pin;
pull_up = pull_up;
}
改为
BUTTON::BUTTON(GPIO* p_pin, uint8_t p_pull_up)
{
pin = p_pin;
pull_up = p_pull_up;
}
本帖最后由 shentqlf 于 2015-10-29 23:58 编辑
修改一个bug。由于笔误导致的串口1的接收中断无法进入。已修正。
vc8fans 发表于 2015-11-6 13:29
都差不多一个月了,总听楼梯响,不见下楼人?????
ebox目前已经开始众筹。众筹链接http://z.elecfans.com/2。我不太清除此楼是否有违阿莫论坛的相关规定。如有可以通知我,可以将此楼删除,或者直接删除此楼回复 上传一个最新版本。固件只修改了一些函数名称和变量名称,没有大的改动。
驱动增加了一些
最大的改动是网络部分,网卡的驱动,socket、tcp优化了很多bug,添加了dns。最重要的更新是添加了MQTT的支持。 yerrmin 发表于 2015-11-26 17:03
楼主可以创建一个git版本库,这样代码太乱
github已经开通
https://github.com/eboxmaker/ebox_stm32 最新代码的地址:
https://github.com/eboxmaker/eBox_STM32F1 支持!!!!!! 抢到了一个沙发!{:lol:} 看起来介绍不错,支持一下 farmerzhangdl 发表于 2015-10-15 18:34
看起来介绍不错,支持一下
谢谢支持 做的挺好的,支持 honami520 发表于 2015-10-15 18:39
做的挺好的,支持
谢谢大神夸奖 在用 MDK5 pack写东西... 不知道 能不能 入门 厉害!先下载点资料看看先了{:victory:} sunday640 发表于 2015-10-15 18:47
不知道 能不能 入门
强大的帮助文档,放心 支持你,大赞 下载资料学习,谢谢 这个得支持楼主了{:victory:},希望能申精成功 非常好的东西,支持下! mark!好的东西!! 嗯,看起来不错。 楼主有没有搞到github上? 辛苦了,做的真用心。 楼主精力真好。加油 怎么感觉怪怪的maple为啥不好用吗? 好东西,比Arduino强太多 顶一个先,感谢楼主分享。 支持,学习! 容易移植到不同的stm32芯片不? 看起来很不错,支持楼主,感谢分享 还没看文档,先问一下,是用的stm32的普通外设库吗?不是cube库吧,操作系统为何不选freertos呢 很好的东西,感谢楼主分享 楼主,最近我也认为STM32的库很渣,但细细一看还是不错的。新的CUBEMX更坑,逼着你用大容量的芯片,不然几下子就给你的FLASH用完。
不过不得不说,CUBEMX的库很漂亮了 强帖流明! 好东西,谢谢LZ无私分享 向LZ学习 weshare 发表于 2015-10-15 19:35
容易移植到不同的stm32芯片不?
可以移植,但是现在没做呢。只支持103系列的。 huike 发表于 2015-10-15 19:49
楼主,最近我也认为STM32的库很渣,但细细一看还是不错的。新的CUBEMX更坑,逼着你用大容量的芯片,不然几 ...
这个环境很多人还不太习惯吧 lzy888 发表于 2015-10-15 19:38
还没看文档,先问一下,是用的stm32的普通外设库吗?不是cube库吧,操作系统为何不选freertos呢 ...
不是的,跟他没关系的,绝对原创! ly8008csko 发表于 2015-10-15 19:25
好东西,比Arduino强太多
我也这么认为。。。 很好啊,但是这种东西对于嵌入式程序员来说是拒绝的。。。
其实跟多是 对JAVA,上位机,3D打印,机器人那些创客。
给了他们很好的简单开发门槛,
但是对于我们来说,学多一种风格,意味着对底层更不熟悉,这个对自己是很不利的。 Vampireyifeng 发表于 2015-10-15 19:12
楼主有没有搞到github上?
。。。。。。。
jcrorxp 发表于 2015-10-15 20:27
很好啊,但是这种东西对于嵌入式程序员来说是拒绝的。。。
其实跟多是 对JAVA,上位机,3D打印,机器人那 ...
这个我觉得没那么死板的,跟之前编程差不多的,编译环境我都没敢换的。 jcrorxp 发表于 2015-10-15 20:27
很好啊,但是这种东西对于嵌入式程序员来说是拒绝的。。。
其实跟多是 对JAVA,上位机,3D打印,机器人那 ...
就是一个正常的工程师的编程思想而已,拿出来跟大家分享下 写得不错,不过不开源的,就不折腾了。 soos 发表于 2015-10-15 20:44
写得不错,不过不开源的,就不折腾了。
不是不想开源的亲,我也想完全开源,请给我点时间。目前应经开放了除了核心的所有代码了 我感觉楼主的方式在未来是趋势,在嵌入式系统中引入面向对象的方法,使用类库封装常用的函数,达到代码复用。 yuanzhengrong 发表于 2015-10-15 20:50
我感觉楼主的方式在未来是趋势,在嵌入式系统中引入面向对象的方法,使用类库封装常用的函数,达到代码复用 ...
是的,面向对象的思想是很大程度上提高了代码复用率的,降低开发者重复造轮子的过程 支持楼主,做的不错! 关注一下~ acchkr 发表于 2015-10-15 21:04
关注一下~
谢谢关注!!! 为楼主点赞! 可不可以理解为,类似arduino ? 不错,支持。简单应用可以几个小时搞定。 why800 发表于 2015-10-15 21:27
不错,支持。简单应用可以几个小时搞定。
恩,我用这套代码做了一套图书馆的门禁系统。两个星期搞定了(包括硬件周期)。。。。 已经很不错了,虽然不会软件,支持一个 看了二楼的例程,确实觉得变简单得多了,希望楼主继续更新更多例程。 如果是个库,然后卖板。估计也难卖的出去,捧场的人多,掏钱的人少。
如果提供代码,估计有人会买。 好东西,没准是个趋势的 关注{:smile:} whatcanitbe 发表于 2015-10-15 21:37
如果是个库,然后卖板。估计也难卖的出去,捧场的人多,掏钱的人少。
如果提供代码,估计有人会买。 ...
正解,其实我也没打算靠板子来挣钱。这套代码主要是为了大家在调试驱动的问题 很不错,值得学习。 点个赞。 不错。 支持一下。 很好的思路,支持 shentqlf 发表于 2015-10-15 20:13
可以移植,但是现在没做呢。只支持103系列的。
希望可以出可以移植的,不然在我这里用处不大,看看吧,需要就下单,支持下楼主!
期待开源,楼主那天开源了,记得通知我啊,一定购买板子, 做的挺用心的{:victory:} weshare 发表于 2015-10-15 21:59
希望可以出可以移植的,不然在我这里用处不大,看看吧,需要就下单,支持下楼主!
...
有很多人说希望移植到飞思卡尔上,飞思卡尔还是很需要的。 hyf88 发表于 2015-10-15 21:59
期待开源,楼主那天开源了,记得通知我啊,一定购买板子,
开源是必然的趋势 工程样板下载了,好像不是MDK开发环境的吗? hyf88 发表于 2015-10-15 22:07
工程样板下载了,好像不是MDK开发环境的吗?
是的。MDK 515 shentqlf 发表于 2015-10-15 22:07
是的。MDK 515
哦哦,,我的是4,我说怎么打不开呢, hyf88 发表于 2015-10-15 22:09
哦哦,,我的是4,我说怎么打不开呢,
升吧。。。,坛里有和谐工具 {:handshake:}狂点赞 支持下,期待楼主的开源,更完善的。 huike 发表于 2015-10-15 19:49
楼主,最近我也认为STM32的库很渣,但细细一看还是不错的。新的CUBEMX更坑,逼着你用大容量的芯片,不然几 ...
Cube的库实在是用着不怎么方便,还是以前的库函数用着舒服 596142041 发表于 2015-10-15 22:24
Cube的库实在是用着不怎么方便,还是以前的库函数用着舒服
哈哈,功能越高级,开销越大,我这套代码设计的时候就特别注意了内存开销。所以占用资源还是很低的 不错 好的东西,支持下! 这个是把单片机当PLC使用的节奏啊。
对于简单的控制,还是能大幅度的降低开发难度的,支持一下。 ahong2hao 发表于 2015-10-15 23:49
这个是把单片机当PLC使用的节奏啊。
对于简单的控制,还是能大幅度的降低开发难度的,支持一下。 ...
有很多山寨的PLC都是STM32做的。。。 shentqlf 发表于 2015-10-16 00:03
有很多山寨的PLC都是STM32做的。。。
PLC的核心不都是单片机吗? 楼主精神可嘉,值得学习! 好东西呀,不过至少这些驱动要开源,方便自己加 支持一把楼主 支持楼主! 好东西啊 ,谢谢 支技LZ,将开源进行到底。。。 期待开源啊 预祝 楼主 板子 大卖,代码早日开源。给创客 带来更多工具。不过 我个人 是一个 官方库都不想用的人,占用flash ,自从被某32芯片 库伤害过一回就不再用库了,喜欢自己奔。
楼主要做大做强 就要开源 并且 主流芯片 都支持! 我也有过这种想法,佩服楼主的毅力。。上班后才知道休息的时间干活没有很大的毅力是干不了的 本帖最后由 kinsno 于 2015-10-16 08:59 编辑
不错,大赞!
楼主强大,必须支持 dengxiaofeng 发表于 2015-10-16 08:26
预祝 楼主 板子 大卖,代码早日开源。给创客 带来更多工具。不过 我个人 是一个 官方库都不想用的人, ...
你的网络控制版也卖的很火啊,你是在常州吗?
kinsno 发表于 2015-10-16 08:35
你的网络控制版也卖的很火啊,你是在常州吗?
我一直 在常州 呵呵 驱动库是亮点,是多少老工程师的经验和宝贝,能做到开源规范形成气候,也是件了不起的事情。 最近也打算弄个类似的工程模板,先学习下{:victory:} 顶楼主,等固件库{:lol:} 楼主精力充沛,赞一个~{:smile:} 收藏备用,谢谢! 厉害,顶一个 不是不想开源,是我现在没能力保护它。你们有什么好的开源建议吗? 这个是好东西,必须支持、学习! 关注一下!