相当于手动更新CCR的值
特点:

  1. 定时器连续运行不中断,中间执行代码不影响计时精度
    流程:
  2. 重置CNT寄存器
  3. 启动定时器
  4. 设置输出高电平
  5. 计算CCR的值
  6. 等待CNT到达当前CCR计数器

    /*
    定时器频率 250Mhz,则TIMx->CNT每4ns就加一
    如果需要延迟0.4us则需要100个定时器时钟
    */
    #define WS2812_T0H    100
    #define WS2812_T1H    200
    #define WS2812_T0L    212
    #define WS2812_T1L    112
    #define WS2812_RESET  12500
    
    
    void Bsp_Ws2812Write(uint32_t* pdata, int length) {
     uint16_t count = 0;
     
     TIMx->CNT = 0;
     HAL_TIM_Base_Start(&htimx);
     PIN = 1;
     for (int i = 0; i < length; i++) {
         uint32_t data = *pdata++;
         for (int d = 0; d < 24; d++) {
             if (data & 0x800000) {
                 /* 发送1 */
                 count += WS2812_T1H;
                 while (TIMx->CNT - count > 0);
                 PIN = 0;
                 count += WS2812_T1L;
                 while (TIMx->CNT - count > 0);
                 PIN = 1;
             } else {
                 /* 发送0 */
                 count += WS2812_T0H;
                 while (TIMx->CNT - count > 0);
                 PIN = 0;
                 count += WS2812_T0L;
                 while (TIMx->CNT - count > 0);
                 PIN = 1;
             }
             data <<= 1;
         }
     }
     /* 复位 */
     PIN = 0;
     count += WS2812_RESET;
     while (TIMx->CNT - count > 0);
     HAL_TIM_Base_Stop(&htimx);
    }

模拟开关,兼容 1.8V 逻辑电平

供电

VDD 为正供电,VSS 为负供电,GND 为地
如果单电源供电,即 VSS = GND,则 VDD 的范围为 5-24V
如果为双电源供电,即 VSS < GND < VDD,则需满足 5V <= VDD - VSS <= 24V,且 VDD >= 5V

逻辑控制

EN#A0A1A2 为逻辑控制引脚,可接受电压范围 GND ~ VDD
兼容1.8V电平,即 <= 0.8V 认为是低电平,> 1.35V 认为是高电平 (赞!)

其他的4051的高电平电压很高,需要高达 VSS * 0.7,这不得不再加两个三极管产生这个高电平

模拟开关的电压范围

整个 VSS ~ VDD 范围可用,但是在 VSS + 4V ~ VDD - 4V 的范围内达到最佳性能(内阻最小,60Ω)
对电流方向无要求
2025-05-15T04:02:29.png

一种是小号的 SOD-123SOD-323SOD-523,相当于电阻的尺寸 120608050603
一种是大号的 SMASMABSMC,这三种又叫 DO-214ACDO-214AADO-214AB,相当于电阻尺寸的 201021143220

2025-04-28T06:39:28.png

AD9288 是一个双通道的8位高速ADC芯片,最高采样里100M,两个通道可以组合成一个200M的单通道ADC

引脚说明

2025-04-26T05:21:37.png

AINAAINA# 通道A差分输入
AINBAINB# 通道B差分输入
DFS 数据输出格式选择,0:二进制输出,1:补码输出
REFOUT 参考电压输出,1.25V (1.2V - 1.3V)
REFINAREFINB 两个通道的参考电压输入,与REFOUT引脚短接再接个0.1uF对地电容
S1S2 ADC工作模式切换,见下表
ENCAENCB 时钟输入信号
D0A - D7AD0B - D7B ADC采集数据并口输入,输出数据与采样点间隔4个时钟信号
VD 模拟地
VDD 数字地
GND

工作模式说明

S1 和 S2 的电平决定芯片的工作模式

S1S2说明
00通道A和通道B均休眠
01通道A工作,通道B均休眠
10通道A、通道B都工作
11通道A、通道B都工作,且通道B的数据输出延迟半个周期

模式2和模式3时序图

2025-04-26T06:02:12.png

  1. 时钟上升沿TA时间过后开始采样
  2. 经过四个周期之后数据采样完毕
  3. 第四个周期的上升沿TPD之后数据准备完毕,可以读取
  4. 第五个周期的上升沿TV之后,数据开始切换为下一个采样点的数据

模式4时序图

模式4是给合并双通道准备的,为了实现双通道合并,则需要错开采样时间,即时钟A和时钟B的相位要间隔180度(或者说时钟A和时钟B的波形需要相反、通道B的时钟要比通道A晚半个周期)
在时钟错开的情况下,通道A和通道B的数据输出时间也是错开的,不便于单片机读取数据,所以模式4就把通道B的数据输出延迟半个周期

模式3和模式4 在 通道A和通道B的时钟相反时的数据区别
2025-04-26T06:28:39.png

中断优先级用于处理当同时产生多个终端事件时,中断的执行顺序问题
中断优先级分两种类型:抢占优先级 和 子优先级

优先级数字越小,优先级越高

运行规则:如果抢占优先级更高,则暂停当前中断,进入高优先级中断,否则按子优先级排序执行

优先级组:指定 抢占优先级 和 子优先级 分别有多少个优先级数字可选