问题遇到的现象和发生背景
使用三线的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); //启动传输
}
运行结果及报错内容
我的解答思路和尝试过的方法
修改SPI配置参数均不能改变多出来一部分数据