I2C协议
1.IIC(Inter-Integrated Circuit)总线是一种由NXP(原PHILIPS)公司开发的两线式串行总线,用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。
在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps 以上。 2.软件I2C和硬件I2C ①硬件I2C 直接利用 STM32 芯片中的硬件 I2C 外设。
只要配置好对应的寄存器,外设就会产生标准串口协议的时序。在初始化好 I2C 外设后,只需要把某寄存器位置 1,此时外设就会控制对应的 SCL 及 SDA 线自动产生 I2C 起始信号,不需要内核直接控制引脚的电平。
②软件I2C
直接使用 CPU 内核按照 I2C 协议的要求控制 GPIO 输出高低电平,从而模拟I2C。
需要在控制产生 I2C 的起始信号时,控制作为 SCL 线的 GPIO 引脚输出高电平,然后控制作为 SDA 线的 GPIO 引脚在此期间完成由高电平至低电平的切换,最后再控制SCL 线切换为低电平,这样就输出了一个标准的 I2C 起始信号。
③两者的差别
硬件 I2C 直接使用外设来控制引脚,可以减轻 CPU 的负担。不过使用硬件I2C 时必须使用某些固定的引脚作为 SCL 和 SDA,软件模拟 I2C 则可以使用任意 GPIO 引脚,相对比较灵活。对于硬件I2C用法比较复杂,软件I2C的流程更清楚一些。如果要详细了解I2C的协议,使用软件I2C可能更好的理解这个过程。在使用I2C过程,硬件I2C可能通信更加快,更加稳定。
SPI协议
SPI总线是一种4线总线,因其硬件功能很强,所以与SPI有关的软件就相当简单,使中央处理器(Central Processing Unit,CPU)有更多的时间处理其他事务。正是因为这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如AT91RM9200。SPI是一种高速、高效率的串行接口技术。通常由一个主模块和一个或多个从模块组成,主模块选择一个从模块进行同步通信,从而完成数据的交换。SPI是一个环形结构,通信时需要至少4根线(事实上在单向传输时3根线也可以) SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是MISO(主设备数据输入)、MOSI(主设备数据输出)、SCLK(时钟)、CS(片选)。
利用AHT20采集温湿度并发送到上位机
需要的设备有stm32f103,AHT20,串口,8根线 stm32与串口接线:RX-A9,TX-A10,GND-GND,3.3-3.3 stm32与AHT10连线:SCL–>PB6,SDA–>PB7 ,GND-GND,3.3-3.3 连线接好后烧录程序代码 注意:用的是PB6,PB7引脚 完整代码链接 链接:https://pan.baidu.com/s/1zwTu6UqmDkutvN490Czfbg 提取码:0ckv
/main
#include "delay.h"
#include "usart.h"
#include "bsp_i2c.h"
int main(void)
{
delay_init();
uart_init(115200);
IIC_Init();
while(1)
{
printf("???èêa?è??ê?");
read_AHT20_once();
delay_ms(1500);
}
}
下载编译成功烧录即可 生成HEX文件,进行烧录 之后连接好芯片,进行温度的采集 打开串口,115200比特,观察结果
OLED名字学号的显示
整个工程完整代码 链接:https://pan.baidu.com/s/1fMcnuijiXbh1n1RskQ_jcQ 提取码:swhb 代码下载后对汉字进行字模提取 提取软件 链接:https://pan.baidu.com/s/19gZ-bliFGb1tk4gqdhG01w 提取码:8w4j 之后进行字模提取 下载成功后打开软件,选择宋体,用户定义,编辑码表,选择c文件,最后点击生成
将字模文件加入下面oledfont.h文件里面
在改工程里面test.c名字和学号 后面烧录编译即可 对应连接如下 效果展示
显示AHT20的温度和湿度
代码如下 链接:https://pan.baidu.com/s/1MralN8EJxe_yt_On22qdVg 提取码:mp5a 下载工程编译烧录 效果图如下
oled滚动划屏显示
完整代码如下 链接:https://pan.baidu.com/s/1Jj17TNRwVNaVD758cOFu_w 提取码:z12f 打开工程,修改test.c文件 生成相应的字模 打开相应的文件,加入到oledfont.h里面 然后编译烧录成功即可
效果图如下
总结
本次实验我很认真的完成了,将理论与实践完美的结合,我收获蛮多的,希望下次再能有更多的体会和经历
|