嵌入式单片机项目开发
我将会记录业余开发单片机的一些项目的开发经过,将出现的问题做总结,积累自己的经验同时也帮助别人更好的去学习单片机
Engineer-Bruce_Yang
本科毕业于华南理工大学,现美国卡罗尔工商管理硕士研究生在读,曾就职于世界名企伟易达、联发科技等,多年嵌入式产品开发经验,在智能玩具、安防产品、平板电脑、手机开发有丰富的实战开发经验,现任深圳市云之手科技有限公司副总经理、研发总工程师。
-
原创 stm32cubeMX学习七、使用freertos在cubeMX代码生成规则编程中应该注意的事项
我们来看这段程序:上面这段程序,是串口2的中断服务函数,在这里面完成的是接收一帧\r\n的数据。这样看来,这段程序保护得挺好,在串口在执行接收的过程中不会被中断打断。但它存在隐藏的BUG,我们来看下面这种情况。如果是使用stm32cubeMX生成代码,我们会看到在main.c中调用了串口初始化函数。这样看来没毛病,编程思路都是对的,但是灾难就快要发生了,于是我们在msp初始化函数里添加...2019-08-08 22:37:221363
0
-
原创 stm32cubeMX学习六、Freertos配置综合实践(移植大彩串口屏程序框架)
一节入门了stm32cubeMX SPI 0.96 OLED的配置,这节我们来学习下如何配置freertos,并驱动大彩串口屏。本程序编写基于秉火霸道STM32F103ZET6运行环境。一、配置时钟这里默认配置成64MHz二、配置Freertos系统和一路调试串口(USART2)接下来配置freertos的参数,基本上不用动,满足我当前使用即可,后续需要用再修改.三、配置串口调...2019-08-06 23:02:233024
8
-
原创 stm32f429 HAL库处理串口接收--如何接收带\r\n的串口数据
学习单片机串口协议的都知道,串口接收数据是一个字节一个字节进行接收的。如果不了解,可以查看文章:https://blog.csdn.net/morixinguan/article/details/78495494如果接收的数据协议做如下规定:序列号 长度 状态字 数据长度 数据1 数据2 数据3\r\n中间以空格作为分隔符。那如何来接收这样的一整串数据呢?这串数据...2019-07-30 12:48:061337
0
-
原创 stm32cubeMX学习五、点亮SPI 0.96 OLED
上一节入门了stm32cubeMX DMA串口的配置,这节我们来学习下如何配置SPI点亮0.96OLED的程序本程序编写基于秉火霸道STM32F103ZET6运行环境。这节我们配置SPI1用来控制OLED。其中相关引脚和OLED的连接://说明: //----------------------------------------------------------------//...2019-07-13 23:49:335523
12
-
原创 STM32 使用HAL库调试内部RTC经验总结
本调试过程基于STM32F429如下型号。之前做项目用了正点原子的RTC例程,结果在应用的过程中就出问题了。原子RTC的例程如下://RTC初始化//返回值:0,初始化成功;// 2,进入初始化模式失败;u8 RTC_Init(void){ RTC_Handler.Instance=RTC; RTC_Handler.Init.HourFormat=...2019-07-10 17:14:139201
8
-
原创 解析Esp8266信号级别的方法
Esp8266获取信号级别的方法:即当Esp8266在STA模式下连接了一个路由以后,通过AT+CWJAP?\r\n就可以获取到对应路由器ssid的信号级别了,指令回复大致长这个样子:+CWJAP:"602","f2:41:c8:f4:2c:19",6,-53如上回复文本,-53就是当前ssid的信号级别了。那么到这里就有问题了,到底什么情况下是强?什么情况下是弱呢?参考:https:...2019-07-09 22:31:131445
4
-
原创 stm32cubeMX学习四、DMA串口接收
上一节入门了stm32cubeMX串口的配置,这节我们来学习下编写一个串口DMA接收的程序本程序编写基于秉火霸道STM32F103ZET6运行环境。这节我们配置多一路串口用来做NBIOT-BC28模块的发送和接收,这里我们配置为UART4。在上一节工程的基础上,我们只需要再点点鼠标配置下UART4为DMA接收就可以了,很简单。一、DMA配置注意:如果在cubemx设置为循环接收模式...2019-07-02 00:00:153820
0
-
原创 stm32cubeMX学习三、串口打印Hello world
上一节入门了stm32cubeMX,这节我们来学习下编写一个按键的程序。本程序编写基于秉火霸道STM32F103ZET6开发板进行。一、打开stm32cubeMX软件二、选择芯片型号首先点击File,然后选择New Project,在弹出的页面中搜索您要配置的芯片型号,然后鼠标双击选择stm32f103ZETx这时候会弹出另外一个页面如下,开始做芯片的硬件资源配置工作。三、配置时...2019-06-30 22:00:332166
3
-
原创 stm32cubeMX学习二、按键点灯与灭灯
上一节入门了stm32cubeMX,这节我们来学习下编写一个按键的程序。本程序编写基于秉火霸道STM32F103ZET6开发板进行。一、打开stm32cubeMX软件二、选择芯片型号首先点击File,然后选择New Project,在弹出的页面中搜索您要配置的芯片型号,然后鼠标双击选择stm32f103ZETx这时候会弹出另外一个页面如下,开始做芯片的硬件资源配置工作。三、配置时...2019-06-29 21:30:312914
0
-
原创 stm32cubeMX学习一、循环点亮两盏LED灯
由于现在工作上使用stm32cubeMX在开发,所以也有必要系统的来学习一下stm32cube的使用,以下是我自己学习的总结。本例程基于秉火霸道STM32F103ZET6开发板万事开头难,既然是一个新事物,而且又是简化工程师配置硬件资源工作的,我相信它学习起来肯定比自己去写代码简单N多倍,那咱们还是从点灯开始吧。一、打开stm32cubeMX软件二、选择芯片型号首先点击File,然后选...2019-06-28 23:29:212783
6
-
原创 NBIOT-BC28模块程序操作接口编写(基于STM32F103ZET6)
项目最终实现效果如下,太晚了,明天再把代码和功能实现分享出来!2019-06-23 23:47:083129
8
-
原创 STM32控制ESP8266透传到私有HTTP服务器(Json数据格式)
前面写过一篇文章:ESP8266透传:使用HTTP POST请求发送json格式的数据到虚拟测试桩(HTTP服务器)https://blog.csdn.net/morixinguan/article/details/88419167这节,我们在STM32上用程序来实现:...2019-05-12 19:54:082952
3
-
原创 STM32使用大彩串口屏程序框架使用总结
大彩科技是专注做串口屏的厂家,网址如下:http://www.gz-dc.com/指令格式如下:一般情况下,采用的是CRC格式校验的指令。处理指令方面,大彩提供了一个例程,主要用一个队列来维护。数据结构:#define QUEUE_MAX_SIZE 128 /*!< 指令接收缓冲区大小,根据需要调整,尽量设置大一些*/typedefstruct_...2019-04-29 14:24:554360
3
-
原创 AliOS Things IOT(STM32L496VGTx)开发板上按键控制
我用的是下面这个板子:如图所示,该板子提供了3个可以供用户自由配置和使用的按键,开源资料上提供不是基于Keil的例程,因此为了更快掌握这个开发板的使用,需要重新编写基于Keil环境的代码,这一节,我们来实现3个按键分别控制三个LED灯,当按下任意一个按键时候,LED灯点亮,再按一下,LED灯熄灭。一、关于按键和LED灯的电路原理图如上图所示,三个按键分别为KEY1(PE11),KEY2(PE...2019-10-07 20:41:481095
0
-
原创 点亮AliOS Things IOT(STM32L496VGTx)开发板上的的ST7789 OLED全彩屏
我用的是下面这个板子:如图所示,这个板子的OLED驱动在开源例程里给出,但是不是基于Keil MDK来开发的,只是用CubeMX生成了对应的驱动源码,现在我将它的驱动移植到Keil MDK上来。屏的代码可以参考:https://github.com/alibaba/AliOS-Things/tree/rel_3.0.0/app/example/dk/dk_gui以下是我参考这个源代码移植出...2019-10-03 13:36:011691
0
-
原创 解决AliOS Things IOT(STM32L496VGTx)开发板无法通过USB-STLink下载程序的问题
我用的是阿里的这款开发板,不得不说阿里真的良心啊,一个小板子带那么多模块,还卖那么便宜的价钱,真的爽!在我手上的板子是这个样子:阿里的官方开源是建议用它的vs IED来开发,但我用不习惯,还是希望Keil MDK的方式来开发。接下来写一个点灯的程序,一样还是用STM32CubeMx创建,先来看看板子上的第一个LED的硬件连接图。一、新建一个STM32L496VGTx的工程1.1 配...2019-10-02 23:10:351193
0
-
原创 stm32cubeMX学习十六、如何让代码生成看起来不会那么乱(规范文件定义)
STM32CubeMX生成代码规则如果不做设置的话,main.c文件里就会堆满各种各样的初始化函数等等。。。随着配置,整个项目可能越来越多,代码凌乱不堪,简直是太恶心了。。。如下图所示:我有点强迫症,看到这样的main.c,我会毫不犹豫的思考如何来改善它,幸亏CubeMX有这样的用户需求。如何解决这个问题呢?只需在这里把这个勾打上,风格就不一样了,这样看起来就舒服多了嘛。让我们来欣赏下。...2019-09-24 14:24:382193
0
-
原创 关于STM32 IAP升级之为什么APP执行要&0x2FFE0000这个数值的原因(基于STM32F446RET6)
如下图所示,这是我目前用的一款CPU:STM32F446RET6,大小是512KB我的bootloader编译完以后占用了26KB的FLASH内存。我的APP占用了363K的FLASH内存,主要是因为LCD显示,刷的图片很多,很占内存。为了给以后的Bootloader扩展更多的功能需求,我给我的Bootloader栈顶占用FLASH 0x10000的大小,也就是64k。所以,目前Boo...2019-09-20 10:44:521955
1
-
原创 解决SPI OLED屏驱动(SEPS525)开发过程中全屏刷新慢的问题
我在开发中使用的是这一款OLED驱动:根据厂家提供的开机例程。//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=// Initialization//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=...2019-09-17 11:46:062894
2
-
原创 stm32cubeMX学习十五、步进电机基本功能的使用(基于野火STM32F103ZET6开发板)
本程序编写基于秉火霸道STM32F103ZET6运行环境。今天来玩一下步进电机模块,电机控制,是一门非常高深的学位,如果想去走工控行业需要玩到电机方面的,那么步进电机一定少不了,不管怎么说,我们还是可以把它驱动起来的,以下是我买的一个步进电机驱动模块。步进电机选用的是:28BYJ48-H12这里在软件编程上有一个比较重要参数需要了解一下,就是步距角。那么什么是步距角呢?度娘给你答案,可...2019-09-16 22:09:392957
1
-
原创 stm32cubeMX学习十四、游戏摇杆模块的使用(基于野火STM32F103ZET6开发板)
本程序编写基于秉火霸道STM32F103ZET6运行环境。今天来玩一个PS2游戏摇杆模块,也被称为Joystick,下面来了解下工作原理以及如何来应用。2019-09-09 23:18:571974
2
-
原创 stm32cubeMX学习十三、光遮断器的使用(基于野火STM32F103ZET6开发板)
什么是光遮断器?是怎么来用的?我们打开百度来搜索一下,发现百度百科有详细的介绍。光断续器又称为穿透型光电感应器,光遮断器,光电断续器,光电遮断器,也就是将发光组件与受光组件面对面排列并设置于同一封装内,·利用检测物体通过时会遮光的原理便得以实现检测功能。ROHM将此种穿透型光电感应器称为断续器。光断续器是什么?光断续器又称为穿透型光电感应器,光遮断器,光电断续器,光电遮断器,也就是将发光组件...2019-09-06 13:21:30469
0
-
原创 stm32cubeMX学习十二、为什么配置时钟72MHz却变成了64MHz?(基于野火STM32F103ZET6开发板)
本程序编写基于秉火霸道STM32F103ZET6运行环境。这是还没有配置之前的系统时钟默认值这里默认选择的是HSI(内部时钟源),将时钟频率配置为8MHz。接下来我们根据提示将时钟源调到72MHz(最大)。我们输入72点击OK于是莫名其妙的就变成了64。这是为啥呢?原因:(参考野火提供的HAL库教程)那么我们如何才能配置为72MHz呢?这里我们要配置为外部时钟源...2019-09-02 23:20:001557
2
-
原创 stm32cubeMX学习十一、配置RT-Thread操作系统组件(基于野火STM32F103ZET6霸道开发板)
本程序编写基于秉火霸道STM32F103ZET6运行环境。先来了解下RT-Thread看来RTT非常强大呀,尤其适合在当今物联网概念那么火的情景下使用,减少了企业的开发成本,那这么丰富,免费吗?连个字===>开源!一、获取NANO软件包要获取 RT-Thread nano 软件包,需要在 CubeMX 中添加 https://www.rt-thread.org/downlo...2019-08-30 22:52:574263
2
-
原创 stm32cubeMX学习十、扫码模块程序开发(基于正点原子STM32F407开发板)
本程序编写基于正点原子STM32F407开发板。本文使用的扫码模块是下面这个品牌。扫码模块的应用场景非常广泛,我们可以上百度搜索一下:等等。今天就来说说如何在开发板上实现控制它吧,打开数据手册看引脚配置。该模块是基于串口开发,本例程只接了上述的5个引脚,其余的没有接入。按手册提供的说明,只要我们每次扫码之前将nTrig管脚拉低,即可激活扫码模块,我们先接上Uart测试下效果...2019-08-23 14:24:471616
1
-
原创 stm32cubeMX学习九、带串口屏显示的BootLoader程序开发(基于野火STM32F103ZET6霸道开发板)
本程序编写基于秉火霸道STM32F103ZET6运行环境。关于后面说到的串口屏,可以参考之前的文章:https://blog.csdn.net/morixinguan/article/details/98532571在实际的产品开发中,一般情况下产品需要至少有三个程序。1、BootLoader 引导程序2、APP_BAK 应用程序备份恢复区3、APP 用...2019-08-17 21:31:252383
0
-
原创 stm32cubeMX学习八、驱动AT24C02(基于STM32F103ZET6)
本程序编写基于秉火霸道STM32F103ZET6运行环境。1、看硬件原理图关于AT24C02的部分关于I2C协议,在以往的博客中讲得很详细,这里就不在多说。https://blog.csdn.net/morixinguan/article/details/78509764从该原理图,结合AT24C02的数据手册如下图片:很容易得到I2C的7位设备地址为1010 000,A2,A1,...2019-08-17 00:17:47963
2
-
原创 MCU串口命令解析器的实现
最近更文频率少了,但依然会保持一周一篇原创文章,主要是在做这几个活:1 编写韦东山老师的嵌入式书籍的输入系统章节2 应本公众号粉丝要求,准备造一台智能小车并开源分享3 自己工作上项目的学...2020-05-07 23:56:05434
0
-
原创 圆曾经的小车梦,造一台智能小车(一)
1、智能小车项目基本规划智能小车我们再熟悉不过了,读大学期间,部分优秀且动手能力强的小伙伴参加过各种省级、国家级的竞赛,拿到了不少奖,也算是没有给自己的大学留下遗憾。最近在不少嵌入式相关...2020-05-11 23:47:09413
2
-
原创 圆曾经的小车梦,造一台智能小车(二)
接上一篇文章:圆曾经的小车梦,造一台智能小车(一)由于手上的物料还没有全部到齐,所以还没法往下干,明天晚上下班回家就到了!上节已经说过会了解多平台的开发,所以今天咱们就来了解一个MCU界...2020-05-12 23:30:38475
0
-
原创 TKM32F499评估板串口通信实验
之前买了一块评估板,也写了相应的评测文章,链接如下:TKM32F499评估板使用评测之万事开头难先点个灯压压惊我们在上面这篇文章已经领会了TKM32F499的强大了,接下来进入主题,串口通信实验。1、TKM32F499通用异步收发器(UART)数据结构及参数描述在UART库的头文件里,UART由一个结构体进行维护:typedef struct{ //波特率 uint32_t U...2020-04-30 17:25:42941
2
-
原创 让开源按键组件MultiButton支持菜单操作(事件驱动型)
看到之前一个老友写的MultiButton开源按键组件的剖析讲解,它的设计思想简洁且高效,以下是他的博客介绍的MultiButton这个教程:MultiButton | 一个小巧简单易用的事件驱动型按键驱动模块至于介绍和使用在这里我就不多说了,相信看上面这篇文章你应该就懂了,但我想,能不能跟菜单操作绑定在一块呢?这样我不就可以利用起来,实现一个高效稳定的菜单状态机框架?纵观网上很多写菜单框架...2020-03-30 22:31:29844
0
-
原创 stm32cubeMX学习十九、USB DFU(Download Firmware Update)固件更新
本程序编写基于秉火霸道STM32F103ZET6运行环境。1、产生问题公司的产品,每次生产烧写程序都得把机器拆开,然后插上串行线或者ST-Link进行烧写,产品量产的情况下数量很多,所以生产每次都需要花费很长去时间去给机器烧程序(这里我们用野火的开发板来模拟)。2、现有的硬件接口现在的产品(野火的STM32F103ZET6开发板)有一个USB接口,硬件连接图如下:如图所示,当PD3为...2020-02-20 01:42:074595
19
-
原创 stm32cubeMX学习十八、SD卡虚拟U盘实验
本程序编写基于秉火霸道STM32F103ZET6运行环境。跑这个实验之前吃了一些亏,让我一一道来!1、软件写好了,却发现插入USB线连接到电脑后USB居然没有枚举解决方法:野火的这款开发板上做了一个USB上电使能IO,也就是说,当PD3为低电平时,USB才能正常工作,如果不去使能这个管脚的话,USB自然就不工作了。2、HAL库读写SD卡API版本问题解决方法:我用的是1.8.0的...2020-02-18 19:29:242867
2
-
原创 STM32 HAL串口接收常用的几种方式
通常我们在设计串口协议的时候会有几种规格:一、包头+长度+数据+校验位+包尾二、数据+\r\n三、数据对于第一、第二种处理起来非常容易,直接采用串口接收中断即可,如果觉得效率不够高,那么就让串口接收中断+DMA的方式来处理,给CPU减负。之前也写过类似的文章:stm32f429 HAL库处理串口接收–如何接收带\r\n的串口数据对于第三种,也就是不带包头、包尾的,只有数据,这种我们之...2019-12-10 14:23:301732
0
-
原创 硬件知识之(低压差线性稳压器)LDO的选择
1.低压差线性稳压器低压差线性稳压器是新一代的集成电路稳压器,它与三端稳压器最大的不同点在于,低压差线性稳压器(ldo)是一个自耗很低的微型片上系统(soc)。它可用于电流主通道控制,芯...2020-07-23 23:59:52439
0
-
原创 结构体对齐原则在自定义协议解析时的妙用之法
关于结构体对齐的设置,以GCC 32bit编译为例,我们可以来看看下面这个例子:#include<stdio.h>//默认情况下,结构体一般在内存中的自动对齐格式是4...2020-07-23 23:59:52310
0
-
原创 花最少的时间驱动湿温度传感器之RT-Thread sht3x之(DIY一个小小天气站+万年历)
我们在文章的第一节基础上添加一个sht3x的软件包,在此之前需要先了解下sht3x是什么。1、什么是sht3x?sht3x是温湿度传感器的驱动,它实现了温湿度的单次查询,目前在RT-Th...2020-07-09 13:20:06571
0
-
原创 花最少的时间点亮OLED之RT-Thread u8g2之(DIY一个小小天气站+万年历)
准备花几天时间DIY一个小小天气站+万年历,一来可以送给好友,二来也是蹦着熟悉RT-Thread的目的去学习,以提高自己的工作效率,指不定哪天就用上了,总之技多不压身嘛!1、什么是u8g...2020-07-09 13:20:06893
1
-
原创 搞嵌入式开发却不会写上位机?来了解下小白的福音Micro-Lab(多个案例带你快速入门)...
在工作中,以什么样的方式向领导汇报工作最直接高效呢?当然是图形界面!图形界面更好表达一个程序设计的逻辑思维,一目了然,本次介绍的Micro-Lab出自风媒科技-赵工之手,赵工在前两年也出...2020-06-30 21:20:221363
0