柏原崇319 2022-11-30 16:23
浏览 17
已结题

我SPI发送D03E,前面会多出一些高电平数据,怎么去掉。

问题遇到的现象和发生背景

使用三线的SPI分别发送0xd0,0x3e(也就是11010000和00111110),但是示波器显示的数据在前面却有多的高电平数据,该怎么去掉

用代码块功能插入代码,请勿粘贴截图

main.c

extern u8 rdata[6];

int main(void)
{        
    uint8_t spidata1=0x50; 
    uint8_t spidata2=0x3e; 
    Cache_Enable();                          //打开L1-Cache
    HAL_Init();                                    //初始化HAL库
    Stm32_Clock_Init(160,5,2,8);          //设置时钟,400Mhz 
    delay_init(400);                                        //延时初始化
    uart_init(19200);                                    //串口初始化
    SPI4_Init();
    
    HAL_UART_Transmit(&USART1_Handler, (uint8_t *)"请以16进制发送数据\r\n", sizeof("请以16进制发送数据\r\n"), 1000);
    printf("OK\r\n");
    printf("OKKKKKKK\r\n");
    while(1)
    {
        HAL_UART_Receive_IT(&USART1_Handler, (uint8_t *)&rdata, sizeof(rdata));    
        
        SPI4_CS_L;    
        HAL_SPI_Transmit(&SPI4_Handler, (uint8_t *)&spidata1, sizeof(spidata1),1);    
        HAL_SPI_Transmit(&SPI4_Handler, (uint8_t *)&spidata2, sizeof(spidata2),1);
        SPI4_CS_H;            
        delay_ms(100);    
    }
        
}

spi.c

void SPI4_Init(void)
{
    HAL_NVIC_SetPriority(SPI4_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(SPI4_IRQn);
    
  SPI4_Handler.Instance = SPI4;//SPI3
    SPI4_Handler.Init.Mode = SPI_MODE_MASTER;//设置SPI工作模式为主模式
    SPI4_Handler.Init.Direction = SPI_DIRECTION_1LINE;//设置SPI单向或者双向的数据模式:SPI设置为双线模式
    SPI4_Handler.Init.DataSize = SPI_DATASIZE_8BIT;//设置SPI的数据大小:SPI发送接收16位帧结构
    SPI4_Handler.Init.CLKPolarity = SPI_POLARITY_LOW;//时钟极性,空闲状态下为低电平
    SPI4_Handler.Init.CLKPhase = SPI_PHASE_1EDGE;//时钟相位,第一个(上升沿或下降沿)数据被采样
    SPI4_Handler.Init.NSS = SPI_NSS_SOFT;//NSS信号由硬件(NSS管脚)还是软件(SSI位)管理:内部NSS信号由SSI位控制
    SPI4_Handler.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;//NSS信号脉冲失能

    SPI4_Handler.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_ENABLE;//SPI主模式IO状态保持使能
    SPI4_Handler.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;//波特率预分频值256
    SPI4_Handler.Init.FirstBit = SPI_FIRSTBIT_MSB;//指定数据从MSB位(高位数据在前)开始还是LSB位开始
    SPI4_Handler.Init.TIMode = SPI_TIMODE_DISABLE;//关闭TI模式
    SPI4_Handler.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;//关闭硬件CRC校验
    SPI4_Handler.Init.CRCPolynomial = 7;//CRC值计算的多项式
    
    HAL_SPI_Init(&SPI4_Handler);//初始化SPI3
    
    __HAL_SPI_ENABLE(&SPI4_Handler);//使能SPI3

//    __HAL_SPI_ENABLE_IT(&SPI3_Handler, SPI_IT_TXE);//使能SPI3                    
//    SPI4_ReadWriteByte(0xff); //启动传输
}

运行结果及报错内容

img

我的解答思路和尝试过的方法

修改SPI配置参数均不能改变多出来一部分数据

我想要达到的结果

img

  • 写回答

0条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 系统已结题 12月8日
      • 创建了问题 11月30日

      悬赏问题

      • ¥15 Qt Vs2017使用Charts异常
      • ¥15 将位图选入内存DC失败,但没有出错信息
      • ¥20 如何从 .html url 启动/激活 .py 文件(sql debug)
      • ¥15 c#调用soap出错,soapui中可以
      • ¥100 CBIS-DDSM kaggle 资料处理
      • ¥30 python 在 excel 用 OpenPyXL 怎么实现以下代码
      • ¥15 pywinauto 无法捕获到元素
      • ¥15 ARfoundation (可能由于没打开摄像头的)黑屏问题
      • ¥15 pycharm打包项目包含mp3文件,运行exe程序后mp3文件没有执行。
      • ¥15 Quantlib求discount factors