MCU通信协议(一):SPI协议
SPI概述
SPI(Serial Peripheral
Interface,串行外设接口)协议是一种全双工通信协议,SPI最主要的特点是:
一主多从:即一个主设备(主机)同时和多个串行设备(从机)通信;
同步全双工:具有时钟线作为同步信号,主机和从机需要共地,如果从机没有独立供电还需要主机提供供电口;能够同时发送和接收数据;
简单且高速:SPI的时序简单,因为线多端口多没有电平瓶颈(每新加一个从机主机就要增加一个SS端口进行片选,例如三个从机就要三个主机SS端口),主机输出配置成推挽输出,输入(MISO)配置成浮空或者上拉输入,电平驱动能力强;通信速率极高(几十Mbps);
四根通信线,接口开销大:SCK(Serial
Clock)、MOSI、MISO、SS(Slave
Select),其中MOSI、MISO其中的M代表主机Master,S代表从机Slave,分布代表主机发从机收,主机收从机发,MISO就接在从机的MISO上,MOSI就接在从机的MOSI上(一般命名上,从机作为没有主控的设备,MISO会命名成输出端,如DO、SDO等,MOSI会命名成DI、SDI等, ...
开源器件--温湿度传感器DHT11
参考文章:《DHT11详细介绍》:http://t.csdn.cn/L0M3r
本文实验平台:MM32F527x平台验证通过
开源器件这个系列将记录一系列我接触到的各种器件驱动模块,现在开源的资料众多,编程已经是基于模块化的思想,尤其是Arduino、Micropython等语法简单的开发语言的入局,大大降低了开发者开发难度。对于最经典的32位产品STM32而言,意法半导体公司也停止了标准库的更新,转而投入HAL库开发。以上无一例外是隐藏了部分底层原理结构换取调用的便捷性,这种对用户友好的做法很大程度上会带来系统性能的牺牲。接下来的这款DHT11的开发虽然简单,但是debug过程也遇到了一些与性能有关系的问题值得记录,与其让它烂在网盘里,不如发出来可能会对别人有所启发。
DHT11工作时序
DHT11采用单总线通信方式,过程为: 1
主从机引脚初始化,主机拉高总线至VCC,从机高电平下无应答; 2
主机发出通信请求,拉低总线电平至少18ms,再拉高总线电平20-40us,切换至浮空输入监听从机响应;
3
从机识别到主机信号,发起响应:从机拉低总线电平80us,再拉高电平 ...
格式化输出与数据类型
俗语说浅水淹死人,作为Hello
World的第一门必修语法,格式化输出就是这样的存在。明明熟背在心,隔几个礼拜不print就只记得print和printf了,每次要用都要上网再查一次。干脆在这篇博文,简单归纳一下C语言、python两大块常用的格式化输出语法。
参考文章: 《printf()用法详解》
《简述strcpy、sprintf、memcpy》 《C/C++中volatile关键字详解》
C语言 printf sprintf fprintf
printf
最简单用法: 1printf("Hello World")
和python的print和C++的cout不同,printf不能直接输出字符数据,如printf(a)这种写法是错误的,必须经过格式化参数输出,参数以下:
123456789参数 数据类型 说明 %d(%i) int 十进制有符号32bits整数 %u unsigned ...
stm32标准库开发(一):八种GPIO模式介绍
八种GPIO模式
stm32定义了GPIO的八种模式,分别为4种输入模式和4种输出模式,使用场合、时机有所不同:
12345678910typedef enum{ GPIO_Mode_AIN = 0x0, GPIO_Mode_IN_FLOATING = 0x04, GPIO_Mode_IPD = 0x28, GPIO_Mode_IPU = 0x48, GPIO_Mode_Out_OD = 0x14, GPIO_Mode_Out_PP = 0x10, GPIO_Mode_AF_OD = 0x1C, GPIO_Mode_AF_PP = 0x18}GPIOMode_TypeDef;
输入模式
GPIO_Mode_AIN:模拟输入模式;这是最容易区分的模式,只有需要模拟输入时才需要这种模式,例如AD模数转换。
后面三种模式可以放在一起讨论
GPIO_Mode_IN_FLOATING:浮空输入模式
GPIO_Mode_IPD:下拉输入模式
GPIO_Mode_IPU:上拉输入模式
这三个输入模式是配置红框位置而来,开关如果全 ...
引导程序:LILO与GRUB
前几天看到一篇很好的文章,将LILO和GRUB两种引导程序描述了一遍。刚好搭建了这个博客,就发上来看看,既是记录,也是分享。本文参考的文章放在开头表达对原作最大敬意:
《引导加载程序之争:了解 LILO 和
GRUB》:https://blog.51cto.com/u_15930680/5990075 《BIOS、UEFI、Boot
Loader都是些什么》:https://zhuanlan.zhihu.com/p/336441128
BIOS与Bootloader
无论在PC,还是嵌入式系统,需要运行操作系统,就绕不开引导加载程序,复杂的PC引导程序可以由BIOS来完成,实际上BIOS是闭源的,没有严格的标准,不同的厂商做的BIOS不同,也有采用开源UEFI,有的称UEFI
BIOS,总而言之,传统的BIOS已经很少见了,计算机要考虑效率、性能、安全等问题,UEFI、BIOS、Bootloader都是混合在用,只是习惯上还是叫BIOS而已,主要功能一般描述为:对硬件进行初始化,对软件进行抽象。现在的BIOS固化发展过程:
ROM(不能修改)->PROM(一次性修改 ...