![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STOpen开源项目
文章平均质量分 74
介绍stopen开源项目的设计过程和相关的流程解析。
子朔不言
物联网,智能设备,智能识别,下一波产业浪潮。深圳市新龙微科技有限责任公司,致力于物联网,智能家居,智慧中控,智能制造,智能控制等设备软硬件研发,提供全方位技术和产品服务.某宝收店铺新龙微有相关产品展示
展开
-
指针详解系列2-常量指针与指针常量
这一章我们详解一下指针的一个修饰符—const。Const修饰符的不同位置,表示的不同的作用,定义如下:char * const Ptr_ConstChar = “a”; const char * pConstChar_Ptr; const char * const pConstChar_ConstPtr = “ab”; 如何识别和记住这些差异,关键点就看const的位置,记住一点,......原创 2020-04-18 00:25:12 · 174 阅读 · 0 评论 -
指针详解系列1-指针的定义
指针的描述(以下的所有地方都基于C89标准):指针与数组,结构,联合等一样也是一种数据对象,其值是另外一个对象的地址(这是重点,指针变量里面保存的内容是另外一个对象的地址)。“指针”得名于这样的事实:其内容“指向”另外一个对象。指针可以指向任何类型(完整类型的或者不完整类型)的对象。一个指针还可以指向其他指针(也就是指向指针的指针),可以实现“多重间接寻址”。更为重要的是指针还可以指向一个函数......原创 2020-04-18 00:18:18 · 948 阅读 · 0 评论 -
2021年1月 编程语言排行榜
C语言依然是王者!编程语言排行榜 TOP 20 榜单:21-50 编程语言排名:原创 2021-05-24 09:15:05 · 211 阅读 · 0 评论 -
STOpen之RTC-片内RTC的可靠初始化及时间转换算法
本章我们将从硬件和软件,应用几个方面来详细的讲解ST32F103的RTC实时时钟的配置方法,编程方法,以及设计注意事项。首先我们看看RTC的框图如下,它除了RTC实时时钟以外,还具有报警功能,报警功能的主要作用就是用来把系统从深度睡眠状态唤醒,从而可以以极低功耗的模式运行系统功能,其唤醒作用和通过外部引脚WKUP唤醒一样。本章我们主要讲解RTC的使用,报警功能另外章节再详细剖析。要使RTC能按照我们预期的方式正常运行,我们先看看其硬件组成:电源RTC部分的电源在系统VDD供电的时候,通过原创 2020-05-10 20:52:36 · 2576 阅读 · 0 评论 -
STOpen硬件设计4-周边模块设计二(CAN+RS485+UART+IO扩展等)
本章继续设计剩余的模块,完成一个基本系统的设计工作,然后就可以开始软件工作了:一个调试UART,一个输出UARTUART的设计相对比较简单,把RX,TX直接连接到需要输出的插座就可以。在本项目设计中,我们一路串口用来输出调试信息(也可以预留其他功能),一路用来连接到扩展板和其他模块通讯。需要注意的几点: 1. 我们的TX,RX的电平是3.3V,如果是连接到PC,需要外部使用带电平...原创 2020-05-02 23:10:42 · 867 阅读 · 0 评论 -
STOpen硬件设计3-周边模块设计一 (RTC+USB+SD+SPI)
在前面两个章节,我们规划了基本的功能模块和IO分配,并且完成了最小系统的设计,接下来我们就需要按照预定的功能模块一步一步的完成剩余的原理图设计工作。在STopen开源平台上,我们计划提供功能如下,接下来我们逐一的实现:每一个电路和对应的参数都是经过严格设计和量产检验的,其中很多设计技巧和参数选择,绝非书本上的教条主义和照本宣科,都具有严格的实战价值,具有极高的参考设计意义,也许能帮助解决你曾经...原创 2020-05-01 23:22:34 · 608 阅读 · 0 评论 -
STM32F103系列类型分类 STM32F10X_MD,STM32F10X_LD,STM32F10X_HD
STM32F103系列 定义规格对应,Mark一下startup_stm32f10x_ld_vl.s: for STM32 Low density Value line devicesstartup_stm32f10x_ld.s: for STM32 Low density devicesstartup_stm32f10x_md_vl.s: for STM32 Medium density...原创 2020-04-29 11:55:15 · 6292 阅读 · 2 评论 -
STopen硬件设计2-基于STM32F103最小硬件系统设计
本章我们接续上一章<STopen硬件设计1-如何分配STM32F103的IO资源>。在完成我们需要的功能定义和IO分配后,我们就可以开始最真实的硬件设计之旅了。本章为最基础篇,旨在引导嵌入式开发小白有一个正确的设计流程和概念,老鸟略过。在此也不讲解专门的设计软件如何操作和使用,重在设计思维和过程及方法。万丈高楼平地起,在复杂的系统也是一个一个部分的组建起来的,设计就是一个加法的...原创 2020-04-26 20:20:19 · 871 阅读 · 0 评论 -
STopen硬件设计1-如何高效的分配STM32F103的IO
在开始设计软件功能之前,我们需要先规划好硬件架构,完成需要的功能设计,同时给软件开发提供一个调试环境和对象,验证软件设计的功能是否满足需求,运行是否正确,是否符合我们的预期结果。万丈高楼平地起,设计一个完整的硬件系统,一般要经过以下几个步骤:第一步就是要列出需要的软件功能模块然后根据功能来分配硬件的IO连接完成外围模块的电路设计最后进行PCB设计。在STopen开源平台上,我...原创 2020-04-22 22:40:43 · 836 阅读 · 0 评论 -
STOpen调试系统2-自由的打造属于自己的printf调试接口
在上一章我们实现了一个最简单的串口接口,本章我们就基于该接口来实现一个属于你自己的功能强大的调试接口。为什么要提供这个接口?在嵌入式系统中,我们如果使用系统的printf接口,在调试完成后,无法自动关闭,需要逐一删除调试语句,非常不方便。但是printf的功能强大,属实是一个调试信息输出的利器,那么怎么办?能否鱼和熊掌兼得呢?答案是肯定的,我们实现一个和printf功能一模一样的接口,但是却能...原创 2020-04-12 22:47:02 · 188 阅读 · 0 评论 -
STOpen调试系统1-天下最简单的uart接口实现
在调试代码的过程中,我们经常采用输出调试信息的方式来查看代码执行顺序和结果,而且对于高效的程序开发来说,也是必不可少的。所以,在一个系统建立起来之前,打造一个好用的调试系统是如此的重要和必要。在pc系统上,我们一般使用printf来实现该功能,而且在标准嵌入式环境也提供了对该函数的支持,前提是我们实现int fputc(int ch, FILE *f)的接口即可。在实现该接口的过程中,我们一般...原创 2020-04-12 22:43:11 · 261 阅读 · 0 评论 -
STOpenIO子系统(三)-IO的电气特性
在前两章我们正确的配置了IO的时钟源,并且打开了相关的使能选项,也配置好了输入和输出路径,接下来就是我们IO操作的最后一步,读取输入数据或者输出数据。理论上你读取IO端口不是1就是0,你输出数据不是1也就是0.但是实际情形往往和你想的大相径庭,读不到正确的数据,输出不了想要的高低电平,这是为什么呢?就是因为你没有正确配置输入输出的上下拉电阻,没有搞明白作为输入端口的输入阻抗和作为输出端口的输出阻...原创 2020-03-28 23:32:39 · 1113 阅读 · 1 评论 -
STOpen IO子系统(二)-IO的模式设置和数据输入输出路径详细剖析
在上一章,我们把IO系统的时钟源进行了一个梳理和详细分析,在正确的配置了相关的系统时钟源和IO模块的时钟源后,接下来还要做一件重要的事情,就是配置IO的输出模式。既然是IO,就有输出也有输入,所以需要配置来选择正确的方向。上图是STM32F103的IO基本结构图。我们把这张图分两部分来解读:第一部分: 输入input,如图中红色部分所示。第一条路径是模拟信号输入路径,它是直达系统的模拟...原创 2020-03-24 23:08:19 · 656 阅读 · 1 评论 -
STOpenIO子系统(一)-IO的时钟配置及使能
两个基本概念:I/O: input/output 输入输出GPIO:General-purpose input/output 通用输入输出在MCU中,I/O是和外界进行数据交互的唯一途径,其作用至关重要。I/O的输出驱动和输入采样都是在时钟驱动下完成的,所以要使用I/O系统,首先要正确的配置时钟系统,给对应的模块提供适合的驱动时钟信号。为了降低系统功耗,STM32F103系列的每一个模块的...原创 2020-03-23 22:58:54 · 1479 阅读 · 1 评论 -
星星点灯(四)-LED流水灯大检阅
《星星点灯(一)-LED点灯初阶》《星星点灯(二)-LED点灯中阶》《星星点灯(三)-LED点灯高阶》《在嵌入式系统高效实现软定时器-STOpen软件定时器》《一个用于嵌入式开发的简单可靠的消息系统-STOpen消息系统》前面几篇文章讲述了我们常用的LED驱动的设计逐渐提高的方法,然后提出了一种消息系统加软件定时器的全新思路来设计如何简单的驱动两颗LED,把一个全新的软件设计架构展现在了...原创 2020-03-22 20:34:09 · 287 阅读 · 1 评论 -
在嵌入式系统高效实现软定时器-STOpen软件定时器
在中低端MCU中,定时器的资源有限,经常会使用起来入不敷出,捉襟见肘。而且有时候不同的场景需要的定时时间不同,操作比较麻烦。比如我们常见的按键扫描,灯闪烁,屏幕闪烁,延时退出等但是我们对这些需求进行仔细分析,基本上都会有如下特点:定时间隔较长(不是us级别),准确度要求不高(相差ms级基本无影响),有一次性定时的,也有循环定时的。针对这种需求,我们在STOpen实现了一组软件定时器,配合消...原创 2020-03-22 18:02:15 · 601 阅读 · 0 评论 -
一个用于嵌入式开发的简单可靠的消息系统-STOpen消息系统
在一般中低端的嵌入式系统里面,程序要么是跑大循环,要么是跑一个简单的操作系统(比如ucos,rtthread,freertos等等),简单和效率是第一要素,毕竟系统硬件资源有限。要在这方寸之间,施展十八般武艺,实属具有一定的挑战性。我们实现了一个简单的类windows的消息系统,让所有的操作都采用消息的机制来传递信息,把模块之间的耦合度降低到最低,并且让程序事务处理起来特别简单,层次分明,逻辑...原创 2020-03-21 21:59:35 · 1249 阅读 · 1 评论 -
STOpen开源平台起航
一直有一个心愿--总结开发经验,分享技术成果,提高嵌入式开发的基础开发的质量,解决嵌入式开发入门瓶颈。经过长时间的思考和准备,终于确定了基本方法和大概方向:第一:不讲高深的理论知识,不去追求高大上的不可琢磨的东西(比如AI,大数据等)。第二:展示的项目代码可以用于批量产品开发。第三:克服传统开发板的缺点,争取有所创新。一.项目使用的平台 STM32F103系列为基础,扩...原创 2020-03-21 21:48:12 · 217 阅读 · 0 评论 -
星星点灯(三)-LED点灯高阶
前面两篇《星星点灯(一)-LED点灯初阶.docx》,《星星点灯(二)-LED点灯中阶.docx》我们把基本教学的LED点灯程序简单的讲解了一遍,并且对其利弊进行了分析。通过这两篇文章我们学会了几个技能:如何把一个开发系统系统跑起来。如果初始化I/O,如何去驱动一颗LED。用软件的方式进行延时控制LED闪烁。现在,请你基本上忘记前面的方法(出来LED初始化和驱动输出相关的可以继续使用),...原创 2020-03-19 22:55:59 · 381 阅读 · 0 评论 -
星星点灯(二)-LED点灯中阶
经过千辛万苦,在上一章《星星点灯(一)-LED点灯初阶》我们终于把LED点亮了,丑是丑了点,但是总是有进步嘛!万丈高楼平地起,有了这个基础,只要我们本着不抛弃,不放弃的精神,来个打破砂锅问到底,我想就会百尺竿头更进一步的。本章,我们把丑小鸭打扮一下,看看能不能离白天鹅更像一点。第一步:代码模块化我们把I/O初始化的代码独立出去,为以后驱动更多的LED做准备,而且由于各种硬件限制原因,可能驱动...原创 2020-03-17 21:48:39 · 242 阅读 · 0 评论 -
星星点灯(一)-LED点灯初阶
是不是大多数学习单片机开发的人都是从一个点亮LED的程序开始的?你也是从这里开始掉进坑里的?what?如此简单,还有坑,我不信!不急,容我慢慢给你道来,把这个简单的LED点灯程序给你分析一下,看看我们在那些地方踩了坑,而自己还一无所知。同时,我们使用两种进阶的方式,来告诉你正确的点灯姿势,最后你将学会如何大气磅礴的设计出高效率的,模块化的,移植性强的点灯程序。要点亮一颗二颗…N颗LED,我们...原创 2020-03-16 23:01:46 · 603 阅读 · 1 评论 -
快速搭建最小Keil MDK最小开发环境
在学习C语言和产品开发的过程中,很多人可能都是从网上下载的一个工程,然后修修改改就用。这不失为一个快速的方法和捷径,能够起到事半功倍的效果。 但是,我说但是啊,你总有需要自己新建工程的时候,这时候你怎么做呢?所以你总得还是学会如何从零开始把一个完整的工程建立起来吧?这就好比小时候走路一样,大人扶着你走了,你最后不得还是自己走啊。这看似简单,其实有可能好多同学搞几天都没有...原创 2020-03-04 17:42:28 · 425 阅读 · 0 评论 -
C语言头文件定义技巧以及注意事项
在<KEIL编译器预处理器和预定义宏(include,ifdef,def等)>一篇中我们详细的介绍了C语言开发过程中经常使用到的一些宏名称及其意义,并且简单展示了其作用。在一个大的项目开发过程中,我们的源文件,头文件一般都会按照模块划分,形成多个文件。同时,各种宏定义,变量定义,函数定义等就会相当的多,这样一来,在我们引用一个定义的时候,就要去包含非常多的头文件进来。在一个C文件前面...原创 2020-03-10 23:39:15 · 2713 阅读 · 0 评论 -
KEIL编译器预处理器和预定义宏(include,ifdef,def等)
Keil使用的C编译器支持常用的编译器预定义宏和对文件进行预处理。在设置界面打开预处理器选项,就可以输出每一个文件对应的预处理文件。当然,你不选择这个选项,编译器也会默认启用预处理编译的,只不过不会对应每一个C文件生成这个预处理结果文件而已。首先,我们了解一下何为预定义宏和预处理器以及他们起什么作用预定义宏:ARM编译器预定义了很多宏,这些宏提供了工具链版本号和编译器选项的相关信息。预处...原创 2020-03-08 21:01:59 · 11644 阅读 · 0 评论