JimOrange
发表于 2024-2-18 22:26:00
本帖最后由 JimOrange 于 2024-3-1 22:34 编辑
第十八集:先占楼。
JimOrange
发表于 2024-3-1 22:34:58
第十九集:先占楼。
JimOrange
发表于 2024-3-1 22:35:07
本帖最后由 JimOrange 于 2024-5-3 22:08 编辑
第二十集:串口通信, USART(同步通信)意味着它可以通过外部时钟信号进行同步传输,
UART(异步通信)仅支持异步通信方式,即无需外部时钟信号,仅通过波特率发生器生成时钟;
全双工:
波特率:每秒可以传输多少位数据。
用于改善传输距离的芯片:
串口一:
串口二:
JimOrange
发表于 2024-3-1 22:35:20
第二十一集:先占楼。
JimOrange
发表于 2024-3-1 22:35:35
第二十二集:先占楼。
JimOrange
发表于 2024-3-1 22:35:49
第二十三集:先占楼。
JimOrange
发表于 2024-3-1 22:36:04
第二十四集:先占楼。
JimOrange
发表于 2024-3-1 22:36:21
第二十五集:先占楼。
JimOrange
发表于 2024-3-1 22:36:49
第二十六集:先占楼。
JimOrange
发表于 2024-3-1 22:37:06
本帖最后由 JimOrange 于 2024-3-2 21:36 编辑
第二十七集:软件模拟SPI。SPI-串型外设接口(Serial Peripheral Interface), 高速、全双工,同步的通信总线。
只占用4根管脚线:SS/CS(片选,Slave Select/Chip Select, 通常低电平有效)、MISO(主输入从输出,Master input Slave output)、MOSI、SCK(串行时钟信号,Serial Clock).
时钟极性 (CKP/CPOL): CKP为0,表示时钟空闲时为低电平,反之高电平。
时钟相位 (CKE/CPHA): CPHA为0,表示时钟信号第一个跳变沿采样,如果CPHA为1,则第二个跳变沿采样。
MSB:高位开始读写; LSB:地位开始读写
/////////////////////////////////////////////////
void SPI_Init(){
//CPOL模式0
CS = 1; //不选中该器件
MISO = 1;
WP = 1;
MOSI = 1;
SCLK = 0; //spi模式0,sclk初始化为0
}
void SPI_WriteByte(u8 dat)
{
u8 i;
for (i = 0; i != 8; i++)
{
if (dat & 0x80)
MOSI = 1;
else
MOSI = 0;
SCLK = 1; //下降沿读取
SCLK = 0;
dat << 1;
}
}
u8 SPI_ReadByte()
{
u8 i, data = 0;
for (i = 0; i != 8; i++)
{
SCLK = 1;
if (MISO)
data |= 0x01;
SCLK = 0;
dat << 1;
}
return data;
}
MSB:(Most Significant Bit)指的是最高有效位,LSB:(Least Significant Bit)指的是最低有效位。
Flash测试,我使用了外部Flash测试模块,芯片为W25Q32FV,用户手册Device ID:0x15. (15h)
CS = 0;
SPI_WriteByte(0xAB);
SPI_WriteByte(0x00);
SPI_WriteByte(0x00);
SPI_WriteByte(0x00);
ID = SPI_ReadByte();
CS = 1;