
嵌入式与C语言
嵌入式相关知识
啤酒大大
是时候静下心来做点什么了。。。
展开
-
状态机的设计思想与单片机按键检测的实现方式
一. 什么是状态机我们以生活中的小区的停车系统为例:停车杆一般没车的是不动的(初态),有车来的时候需要抬杆(状态1),车通过需要放杆(状态2),如果在放杆的过程中突然有车,又需要抬杆(状态3)。。。就是说我们需要将不同的情况划分为不同的状态,每个状态对应相应的操作。这只是状态机的一个很简单的举例。如果单个状态也是一个状态机的话,那么就会形成状态机套状态机,有点类似于C++里的父类和子类。其...原创 2019-12-17 15:17:23 · 1073 阅读 · 0 评论 -
单片机AD采样的几种算法
1、限幅滤波法(又称程序判断滤波法) A、方法: 根据经验判断,确定两次采样允许的最大偏差值(设为A) 每次检测到新值时判断: 如果本次值与上次值之差<=A,则本次值有效 如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值 B、优点: 能有效克服因偶然因素引起的脉冲干扰...转载 2019-10-31 15:58:17 · 9924 阅读 · 0 评论 -
51单片机模拟I2C读写M24LR04
目录一、 有关M24LR04的介绍二、 I2C的读写时序三、 参考代码四、 调试中遇到的问题一、 有关M24LR04的介绍M24LR04是ST公司的一款NFC芯片,支持ISO15693和ISO1800-3等协议,存储结构2048x32位。在RF模式下,采用13.56Mhz无线电载波通信;在I2C模式下,作为从机应答主机的请求。该芯片支持写数据加密,支持一组I2C密码和三...原创 2019-10-31 15:29:28 · 1120 阅读 · 0 评论 -
机智云OTA过程MCU端程序设计学习(三)
这篇我们接着分析boot部分的程序设计。MCU重启后首先运行的就是boot程序,通过判断flag区有没有新固件更新的标志,如果有就更新固件;没有就跳转到app程序。1. 官方关于boot程序流程的介绍2. 我们先来看看main函数的逻辑int main(void){ SystemInit();#ifdef DEBUG usart1_init();#endif...原创 2019-12-13 18:00:58 · 602 阅读 · 0 评论 -
机智云OTA过程MCU端程序设计学习(二)
这篇我们主要是学习下app部分固件的设计逻辑。1. 初始化过程中开辟一个环形缓冲区,设置串口为中断接收,重写串口中断回调函数,也就是每次接收一个字节的数据就往环形缓冲区里丢一个数据。void gizwitsInit(void){ pRb.rbCapacity = RB_MAX_LEN; pRb.rbBuff = rbBuf; if(0 == rbCrea...原创 2019-12-13 18:01:11 · 1653 阅读 · 1 评论 -
机智云OTA过程MCU端程序设计学习(一)
1.写在前面: 一般利用云端更新MCU端固件的机制是:云端通过一个能联网的模块(例如wifi,4G等)将固件信息传输到MCU端。整个过程也就是 云端(TCP)-->模块(串口)-->MCU。当然这其中还涉及到固件完整性的校验,传输过程的稳定性等等。通过接受双方会选择校验机制确保固件的一致性,例如CRC、MD5、Hash等。2.关于机制云与STM32的固件更新的说明 ...原创 2019-12-13 18:01:23 · 852 阅读 · 0 评论 -
关于0.96OLED的显示过程详解(I2C通信方式)
一. 关于OLED显示屏的介绍通常我们所用的OLED屏有白色、蓝色、黄蓝双色等几种;屏的大小为0.96寸,像素点为128*64,所以我们也称之为0.96OLED屏或者12864屏。内部驱动IC为SSD1306;通信方式一般为SPI或者I2C。如下图所示,配置哪种模式主要是根据BS0、BS1和BS2这三个管脚的电平逻辑来的。二. I2C通信地址与通信过程 如手...原创 2019-12-03 15:01:23 · 44151 阅读 · 17 评论 -
C语言的可变参数与字符的输入输出
一.可变参数的处理当我们在写程序的时候,如果传入的参数是确定的,那么依次处理就行;如果参数的长度不确定,该怎么处理呢?在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表。如 void func (...)另外C语言提供了一套标准的处理方法。先来看看下面的例子。(该函数实现的是:将不定长度的字符输出)#include "stdarg.h"void...原创 2020-01-16 17:00:24 · 1322 阅读 · 0 评论