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;




页: 1 2 3 4 [5] 6
查看完整版本: STC32G12k128K 学习开始,打卡中~实验箱收到了~ !