中级会员
 
- 积分
- 274
- 金钱
- 274
- 注册时间
- 2014-2-27
- 在线时间
- 70 小时
|
1金钱
我在使用stm32103的SPI时,因为有两个不同的SPI设备挂在同一个SPI上,需要两个SPI配置相互却换。发生这样的事情,每次却换后的第一个数据错误。使用逻辑分析仪后发现,每次重新配置SPI后发送第一个byte的时候时钟是不对的。
逻辑分析仪采集结果如图

相互却换SPI配置代码如下
SPI第一个设备
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;
hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 10;
if (HAL_SPI_Init(&hspi1) != HAL_OK)
{
Error_Handler();
}
SPI第二个设备
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 10;
if (HAL_SPI_Init(&hspi1) != HAL_OK)
{
Error_Handler();
}
我现在怀疑是HAL_SPI_Init初始化使用的同一个,后面调用了 HAL_SPI_MspInit 使SPI一设备初始化成二设备的GPIO设置
请问有谁有使用过同一个SPI同时通讯两个不同设备的经验,指导一下。谢谢
|
-
|