接收3个字节时 就进入硬件错误了, HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET); HAL_SPI_Transmit(&SPI_Handler2,&txbuf,3,1000); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET); HAL_Delay(1); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET); HAL_SPI_TransmitReceive (&SPI_Handler2,&txbuf,recvbuf,3,100); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET); 每次走到 HAL_SPI_TransmitReceive ( )就死机了 有啥办法修复? |
txbuf,recvbuf,这两个都是怎么定义的?
如果都是数组的话,那么传的参数应该都是数组名或数组元素0的地址。
“HAL_SPI_TransmitReceive (&SPI_Handler2,&txbuf,recvbuf,3,100); ”
你在,这条中使用&txbuf,应该是错误的。除非你的txbuf是一个变量,但是变量的话,发送3个长度那显然也不对。
找到问题所在了,
我不确定这个错误和编译器有没有关系,我用的编译器是GCC
由于声明的发送或者接受缓存数组没有4字节对齐,所以在访问时出错了,
下面是HAL库中的部分代码,我觉得可能是忘了改8位模式的代码了
这是16位收发的代码
下面是8位模式的处理代码
自己修改库文件我怕改出BUG,所以简单的解决办法是
给发送和接收数组前加上字节对齐声明
__ALIGN_END char RecvRDAC_buf[6];
这样接收数据的时候就运行正常了