逆向题(29)nss:3864

nss:3846

我已经把base64忘得差不多了,这个题基本思路我大概知道

#include <stdio.h>
#include <string.h>
​
int main () {
    int v3[65];
    char Source[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    char Destination[65] = {0,};
    char *result;
​
    v3[0] = 16;
    v3[1] = 34;
    v3[2] = 56;
    v3[3] = 7;
    v3[4] = 46;
    v3[5] = 2;
    v3[6] = 10;
    v3[7] = 44;
    v3[8] = 20;
    v3[9] = 41;
    v3[10] = 59;
    v3[11] = 31;
    v3[12] = 51;
    v3[13] = 60;
    v3[14] = 61;
    v3[15] = 26;
    v3[16] = 5;
    v3[17] = 40;
    v3[18] = 21;
    v3[19] = 38;
    v3[20] = 4;
    v3[21] = 54;
    v3[22] = 52;
    v3[23] = 47;
    v3[24] = 3;
    v3[25] = 11;
    v3[26] = 58;
    v3[27] = 48;
    v3[28] = 32;
    v3[29] = 15;
    v3[30] = 49;
    v3[31] = 14;
    v3[32] = 37;
    v3[34] = 55;
    v3[35] = 53;
    v3[36] = 24;
    v3[37] = 35;
    v3[38] = 18;
    v3[39] = 25;
    v3[40] = 33;
    v3[41] = 43;
    v3[42] = 50;
    v3[43] = 39;
    v3[44] = 12;
    v3[45] = 19;
    v3[46] = 13;
    v3[47] = 42;
    v3[48] = 9;
    v3[49] = 17;
    v3[50] = 28;
    v3[51] = 30;
    v3[52] = 23;
    v3[53] = 36;
    v3[54] = 1;
    v3[55] = 22;
    v3[56] = 57;
    v3[57] = 63;
    v3[58] = 8;
    v3[59] = 27;
    v3[60] = 6;
    v3[61] = 62;
    v3[62] = 45;
    v3[63] = 29;
​
    strcpy(Destination, Source);
    for (int  i = 0; i <= 47; ++i ) {
        for (int  j = 0; j <= 63; ++j )
            Source[j] = Destination[v3[j]];
        strcpy(Destination, Source);
    }
​
    printf("%s", Source);
    return 0;
}
​

我们在base64里面的函数可以知道里面有个basechange,是用来改表的,然后我们将里面的代码,用c语言复刻出来,我们可以得打之后的码表

gJ1BRjQie/FIWhEslq7GxbnL26M4+HXUtcpmVTKaydOP38of5v90ZSwrkYzCAuND

<think>好的,用户现在询问的是关于STM32CubeMX中如何配置SPI的Hardware NSS为Disable的问。之前我给出的配置步骤里提到过这个设置,但用户可能需要更详细的指导。首先,我需要回忆STM32的SPI配置,特别是NSS引脚的作用和配置选项。 用户可能是在实际配置时遇到了问,或者在按照之前的教程操作时对这一步不太确定。他们可能不太清楚NSS引脚的作用,或者为什么需要禁用硬件NSS。因此,我需要解释清楚NSS的作用,以及禁用后的影响。 首先,NSS(Slave Select)是SPI协议中用于选择从设备的信号。在硬件模式下,NSS由硬件自动管理,主模式下通常不需要使用,但某些情况下可能需要软件控制。禁用硬件NSS意味着用户需要手动控制片选信号,比如通过GPIO引脚来拉高或拉低CS引脚。 接下来,我需要详细说明在STM32CubeMX中的配置步骤。用户可能想知道在图形界面中如何找到这个选项,具体的位置在哪里,以及相关的参数设置。需要分步骤说明,从选择SPI1开始,到参数设置中的Hardware NSS选项,选择Disable,并确保正确分配GPIO作为软件控制的CS引脚。 同时,用户可能还关心为什么需要这样配置,比如使用软件控制CS的好处,或者硬件NSS可能带来的问。例如,当使用多个从设备时,硬件NSS可能不够灵活,需要软件控制每个设备的片选。 另外,用户可能在代码中看到CS引脚的定义,比如PA4作为GPIO输出,需要解释这部分代码是如何与SPI配置配合的。可能需要提到在初始化代码中如何设置GPIO,以及在数据传输时如何手动控制CS引脚的电平。 还要注意可能的常见错误,比如忘记配置GPIO引脚为输出模式,或者在代码中没有正确控制CS信号,导致SPI通信失败。这时候需要提醒用户在配置后检查GPIO的设置,并确保在传输数据前拉低CS,传输完成后拉高。 最后,用户可能需要一个完整的配置流程示例,结合之前的教程,确保每一步都正确无误。需要确认所有相关配置步骤,包括SPI模式、时钟极性、相位、数据大小等,都正确设置,并且和OLED屏幕的规格相符。 总结来说,用户需要明确的步骤来禁用硬件NSS,理解其背后的原因,以及如何在代码中正确使用软件控制的CS引脚。确保回答清晰,覆盖配置步骤、原理和常见问,帮助用户顺利完成配置。</think>在STM32CubeMX中配置SPI的**Hardware NSS为Disable**是开发中常见的关键操作,以下是详细配置流程及原理说明: --- ### **一、NSS信号的作用** NSS(Slave Select)是SPI协议中用于**选择从设备**的信号: - **硬件模式**:由SPI控制器自动管理片选信号 - **软件模式**:需手动控制GPIO电平实现片选 - **禁用场景**:当使用**多个从设备**或需要**灵活控制片选时序**时 --- ### **二、STM32CubeMX配置步骤** 1. **打开SPI1配置界面** - 左侧外设树找到 `Connectivity` → `SPI1` - 工作模式选择 `Full-Duplex Master` 2. **参数设置** ```plaintext Parameter Settings → Hardware NSS Signal → 选择 Disable ``` 3. **引脚验证** - 确认NSS引脚(默认PA4)已自动变为普通GPIO - 若需使用其他GPIO作为CS: - 在`Pinout View`中手动分配一个GPIO(如PA4) - 设置该GPIO为`GPIO_Output`模式 4. **配置示例(以PA4作为软件CS)** | 引脚 | 功能 | 模式 | |------|---------------|--------------------| | PA4 | GPIO_Output | 推挽输出/高速模式 | | PA5 | SPI1_SCK | Alternate Function | | PA7 | SPI1_MOSI | Alternate Function | --- ### **三、Keil代码实现** 在生成的代码中需手动控制CS信号: ```c // 宏定义简化操作(需根据实际引脚修改) #define OLED_CS_PIN GPIO_PIN_4 #define OLED_CS_PORT GPIOA // 传输数据时的典型操作流程 void SPI_SendData(uint8_t *data, uint16_t size) { HAL_GPIO_WritePin(OLED_CS_PORT, OLED_CS_PIN, GPIO_PIN_RESET); // 拉低CS HAL_SPI_Transmit(&hspi1, data, size, 100); // 传输数据 HAL_GPIO_WritePin(OLED_CS_PORT, OLED_CS_PIN, GPIO_PIN_SET); // 拉高CS } ``` --- ### **四、常见问排查** 1. **SPI无响应** - 检查GPIO时钟是否使能 - 验证CS引脚电平是否在传输期间保持低电平 - 用逻辑分析仪捕捉SCK/MOSI信号波形 2. **通信错位** - 确认SPI的CPOL/CPHA设置与从设备一致 - 检查数据大小设置(通常OLED使用8bit模式) 3. **性能优化** ```c // 使用寄存器直接操作可提高速度(示例代码) void Fast_CS_Control(uint8_t state) { if(state) OLED_CS_PORT->BSRR = OLED_CS_PIN; // 置高 else OLED_CS_PORT->BSRR = (uint32_t)OLED_CS_PIN << 16; // 置低 } ``` --- ### **五、硬件NSS与软件NSS对比** | 特性 | 硬件NSS | 软件NSS | |--------------------|--------------------------|--------------------------| | 控制方式 | 自动触发 | 手动GPIO操作 | | 多从机支持 | 需硬件支持多CS | 灵活扩展 | | 时序精度 | 精确到时钟周期 | 依赖代码执行速度 | | 典型应用场景 | 单一从设备 | OLED/多外设/自定义时序 | --- 通过以上配置,可确保SPI通信在**禁用硬件NSS**时仍能稳定工作。建议在首次配置时使用STM32CubeMX的`Clock Configuration`界面验证SPI时钟频率是否符合从设备要求(一般OLED屏支持0-10MHz范围)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值