xnh 发表于 2024-8-8 15:40:43

比较器学习心得

通过学习和使用STC比较器,我深刻体会到其在嵌入式系统设计中的重要性。比较器不仅具有简单直观的工作原理,而且通过灵活的配置选项和强大的功能扩展能力,可以适应各种复杂的应用场景。同时,我也认识到在使用比较器时需要注意的一些细节问题,如版本差异、外部元件选型和中断处理等。这些经验和教训将对我未来的学习和工作产生积极的影响。

xnh 发表于 2024-8-8 15:44:02

FLASH模拟EEPROM

Flash通常以块(Block)或页(Page)为单位进行擦除和编程,而EEPROM可以单字节或较小的单元进行编程和擦除。
EEPROM在编程和擦除速度上通常比Flash快,特别是在小量数据更新的情况下。
Flash的擦写次数有限(通常为数千至数十万次),而EEPROM的耐用性通常更高。
由于Flash的高密度,它在成本上通常更具优势。

Flash模拟EEPROM的技术实现

通过软件算法和硬件支持,将Flash的大块擦除和编程操作转换为看似单字节或小块的操作。这通常涉及到一个或多个模拟EEPROM的“扇区”在Flash中的实现,每个扇区管理一定数量的数据,并通过软件跟踪每个数据位的状态。
为了延长Flash的寿命,需要实现磨损均衡算法,确保Flash的各个部分被均匀使用,避免某些区域过早达到擦写次数限制。
为了提高模拟EEPROM的性能,可以优化数据访问模式,减少不必要的擦除和编程操作,以及使用缓存技术来减少对Flash的直接访问。

学习Flash模拟EEPROM的过程中,深入理解Flash和EEPROM的技术原理是关键。这有助于我们更好地掌握模拟技术的实现方法和优化策略。

xnh 发表于 2024-8-8 16:18:51

软件模拟SPI

1. SPI的四个主要信号线(SCK时钟线、MOSI主出从入数据线、MISO主入从出数据线、CS片选线)的作用及其时序关系。
2. SPI的几种常见工作模式(如CPOL和CPHA的不同组合)以及数据传输方式(如MSB先传或LSB先传)。

编写软件模拟SPI的代码时,要关注以下几个状况:

时钟信号生成:根据SPI的时钟频率和相位/极性要求,通过软件控制GPIO引脚来模拟时钟信号的上升沿和下降沿。
数据发送与接收:在时钟信号的驱动下,通过GPIO引脚发送数据到MOSI线,并从MISO线读取数据。注意数据位的同步和时序对齐。
片选控制:在数据传输前通过CS引脚选择相应的从设备,并在数据传输完成后释放片选。
中断与轮询:根据应用场景选择合适的通信方式(中断或轮询),以提高系统效率或简化代码结构。

xnh 发表于 2024-8-8 16:42:26

1

本帖最后由 xnh 于 2024-8-8 16:47 编辑

1

xnh 发表于 2024-8-8 16:43:46

2

本帖最后由 xnh 于 2024-8-8 16:47 编辑

2

xnh 发表于 2024-8-8 16:46:11

LED 点亮 按钮的使用 LED闪烁 延迟方法的应用具体代码如下:


#include "stc32g.h"
#include "stc32_stc8_usb.h"
#include "string.h"
#include "stdio.h"

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";

#define MAIN_Fosc       24000000L   //定义主时钟

#define KEY_P32 P32
#define KEY_P33 P33
#define KEY_P34 P34
#define KEY_P35 P35

// 初始化
void sys_init();

void p20_auto_lighten_extinguish();

void p2_lighten_10m(char p);

char putchar(char c)
{
        char temp = {0};
        temp = c;
        USB_SendData(temp, 1); //发送数据缓冲区,长度
        usb_OUT_done();
        return c;
}

// 延时
//========================================================================
// 函数: void delay_ms(u8 ms)
// 描述: 延时函数。
// 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
// 返回: none.
// 版本: VER1.0
// 日期: 2022-6-3
// 备注:
//========================================================================
void delay_ms(u8 ms)
{
    u16 i;
    do{
      i = MAIN_Fosc / 6000;
      while(--i);   //6T per loop
    }while(--ms);
}


void main()
{
        int i = 0;
    P_SW2 |= 0x80;
   
    sys_init();
    usb_init();                                     //USB CDC 接口配置

        EUSB = 1;                                                                   //IE2相关的中断位操作使能后,需要重新设置EUSB
    EA = 1;                                                                   //打开总中断
   
    while (DeviceState != DEVSTATE_CONFIGURED);   //等待USB完成配置
        while (1)
    {
                if (bUsbOutReady)
      {
            USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
            usb_OUT_done();
      }
                if (KEY_P33 == 0)
                {
                        delay_ms(10);
                        if (KEY_P33 == 0)
                        {
                                P21 = 0;
                        }
                } else {
                                P21 = 1;
                }
                if (KEY_P34 == 0)
                {
                        delay_ms(10);
                        if (KEY_P34 == 0)
                        {
                                p20_auto_lighten_extinguish();
                        }
                }
    }
}

void sys_init()
{
        P0M1 = 0x00;   P0M0 = 0x00;
    P1M1 = 0x00;   P1M0 = 0x00;
    P2M0 = 0x00;   P2M1 = 0x00;
    P3M1 = 0x00;   P3M0 = 0x00;
    P4M1 = 0x00;   P4M0 = 0x00;
    P5M1 = 0x00;   P5M0 = 0x00;
    P6M1 = 0x00;   P6M0 = 0x00;
    P7M1 = 0x00;   P7M0 = 0x00;
}

void p20_auto_lighten_extinguish()
{
        P20 = 0;
        delay_ms(500);
        P20 = 1;
        delay_ms(500);
}

void p2_lighten(char p)
{
        P2 = ~(1 << p);
}


xnh 发表于 2024-8-8 17:29:13

打卡 硬件SPI读写FLASH芯片


1. 理解SPI的基础知识
      SPI通信总线,广泛用于MCU、FLASH、传感器等之间的通信。它包含四个主要的信号线:SCK、MOSI、MISO和CS。
      工作模式 时钟极性和相位 (CPOL和CPHA)
2.熟悉FLASH芯片的特性
   不同的FLASH芯片有不同的存储结构和容量,包括页大小、扇区大小
   指令集不同 读取、写入、擦除等
3.SPI通信
   需要根据SPI 芯片要求正确配置
   如屠龙刀 我在代码中 一般配置波特率2400
4.FLASH芯片操作 需要注意优化读写策略减少不必要的擦除操作。

xnh 发表于 2024-8-9 15:47:29

打卡 软件模拟IIC 硬件IIC

IIC总线是一种串行、半双工通信协议,主要用于近距离、低速的芯片通信

IIC有两根主要线路 串行数据线和串行时钟线(SDA、SCL) 用于数据传输和通信 的时间同步
IIC的特点 结构简单、成本低

软件模拟

通过通用输入输出(GPIO)口来模拟器SCL和SDAd时序。实现IIC通信
软件模拟的特点 灵活性高可以在不支持硬件IIC的单片机上模拟实现 同时也存在时间延迟和精度的问题 影响通信的速度和稳定

硬件
硬件实现则是通过单片机内部集成的IIC控制器 直接通过物理线路通信
特点通常稳定性和速度优于软件模拟 但受限于单片机硬件资源

xnh 发表于 2024-8-9 18:38:11

打卡 EEPROM芯片数据读写

51单片机的EEPROM并非传统的EEPROM存储器,是通过DATAFLASH模拟实现的 这种设计使得51单片机不需要外部 EEPROM芯片的情况下能具备数据读写的功能
51单片机 利用IAP技术实现EEPROM读写操作 IAP允许单片机运行时对自身的FLASH存储器进行编程 也就是读写功能
51单片机提供了特殊功能寄存器来管理EEPROM读写操作

读写的流程

读取
1.设置地址寄存器(ISP_ADDRH、ISP_ADDRL)
2.发送读取命令(ISP_CMD=0x01)
3.触发寄存器(ISP_TRIG)进行读取操作 读取的数据存储到数据寄存器(ISP_DATA)中

写入
1.擦除目标扇区数据(注意:51单片机只能将1变为0 不能将0变为1)
2.设置寄存器地址 发送写入命令(ISP_CMD=0x02) 写入数据到寄存器
3.触发寄存器 进行写入操作

擦除

1.设置地址寄存器(注意:通常只设置扇区起始地址的高位部分)
2.发送擦除命令(ISP_CMD=0x03)
3.触发寄存器 执行擦除操作

触发机制

触发存储器(ISP_TRIG)的写入需要连续两次操作 先写入0x46 在写入0xB9 以确保安全性

注意事项
扇区擦除
    51单片机只能将1变为0 不能将0变为1 因此写入数据之前如果目标地址不是全为1(0xFF) 则需要先执行扇区擦除
中断管理
    执行EEPROM读写操作时 需要关闭总中断(EA=0) 确保操作连续不被打断


xnh 发表于 2024-8-12 20:58:32

打卡 PWM1



[*]PWM是一种通过改变信号周期内“高电平”的持续时间与总周期的比例来调节模拟量输出的技术。这种技术广泛应用于电机控制、LED亮度调节等领域。
[*]虽然8051 内核不支持直接输出PWM(脉冲宽度调制)功能,但是可以通过软件或者硬件扩展。使得8051 单片机能产生PWM信号。控制电机、LED亮度调节等。

页: 1 [2] 3
查看完整版本: 跟着冲哥学习 STC32位8051单片机原理及C语言程序设计心德