请教下使用f7系列的单片机使用spi5 怎么sck空闲情况为高 ?
请教下,使用 f7 系列的单片机,使用spi5 , 怎么 sck 空闲情况为高 ?配置如下,
void bsp_InitSPIParam(uint32_t _BaudRatePrescaler, uint32_t _CLKPhase, uint32_t _CLKPolarity)
{
/* 提高执行效率,只有在SPI硬件参数发生变化时,才执行HAL_Init */
if ((s_BaudRatePrescaler == _BaudRatePrescaler)
&& (s_CLKPhase == _CLKPhase)
&& (s_CLKPolarity == _CLKPolarity))
{
return;
}
s_BaudRatePrescaler = _BaudRatePrescaler;
s_CLKPhase = _CLKPhase;
s_CLKPolarity = _CLKPolarity;
/* 设置SPI参数 */
SPI_Handle.Instance = SPI5; /* 例化SPI */
/* 复位SPI */
if(HAL_SPI_DeInit(&SPI_Handle) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
SPI_Handle.Instance = SPI5; /* 例化SPI */
SPI_Handle.Init.BaudRatePrescaler = _BaudRatePrescaler; /* 设置波特率 */
SPI_Handle.Init.Direction = SPI_DIRECTION_2LINES; /* 全双工 */
SPI_Handle.Init.CLKPhase = _CLKPhase; /* 配置时钟相位 */
SPI_Handle.Init.CLKPolarity = _CLKPolarity; /* 配置时钟极性 */
SPI_Handle.Init.DataSize = SPI_DATASIZE_8BIT; /* 设置数据宽度 */
SPI_Handle.Init.FirstBit = SPI_FIRSTBIT_MSB; /* 数据传输先传高位 */
SPI_Handle.Init.TIMode = SPI_TIMODE_DISABLE; /* 禁止TI模式*/
SPI_Handle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; /* 禁止CRC */
SPI_Handle.Init.CRCPolynomial = 7; /* 禁止CRC后,此位无效 */
SPI_Handle.Init.NSS = SPI_NSS_SOFT; /* 使用软件方式管理片选引脚 */
SPI_Handle.Init.Mode = SPI_MODE_MASTER; /* SPI工作在主控模式 */
SPI_Handle.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
/* 初始化SPI */
if (HAL_SPI_Init(&SPI_Handle) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
}
void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(spiHandle->Instance==SPI5)
{
/* SPI5 clock enable */
__HAL_RCC_SPI5_CLK_ENABLE();
__HAL_RCC_GPIOF_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();
/**SPI5 GPIO Configuration
PF9 ------> SPI5_MOSI
PH6 ------> SPI5_SCK
PH7 ------> SPI5_MISO
*/
GPIO_InitStruct.Pin = GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP; //GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; //GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI5;
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_7;
HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_6;
HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
}
}
bsp_InitSPIParam(SPI_BAUDRATEPRESCALER_8, SPI_PHASE_1EDGE, SPI_POLARITY_LOW);// 这个地方貌似配置的 sck 空闲时为低电平 ,可实际上 sck 空闲时他就是为 高电平 ?? 迷糊了 可以先复核下控制寄存器,CPOL/CPHA都是0,就符合你的设计 2nd 发表于 2022-10-24 14:28
可以先复核下控制寄存器,CPOL/CPHA都是0,就符合你的设计
(引用自2楼)
在配置钱都已经复位了啊 HAL_SPI_DeInit 能用就行了。sck高是mode3。 wye11083 发表于 2022-10-24 17:02
能用就行了。sck高是mode3。
(引用自4楼)
我配置的是 mode 0 模式啊,而且貌似目前 spi 工作也不正常 本帖最后由 hpdell 于 2022-10-25 20:36 编辑
wye11083 发表于 2022-10-24 17:02
能用就行了。sck高是mode3。
(引用自4楼)
你好,我的是 2 片板, 也就是 对板连接组合在一起的 ,
目前终于发现了问题了, 原来是 对板连接 副板 造成的, 副班那边只要引 spi 信号过去, 那对板连接主板的 spi 工作就会异常 ??,
对板连接副班那边也没有接任何的 spi 器件也不行,
如果不把对板连接主板上的 spi 引到 对板连接副班那边, 则对板连接主板上的 spi 工作完全正常, 貌似是是神马干扰引起.. ???
这下麻烦了哟 , 大神有没有什么比较好的解决方法啊 ?
造成信号紊乱的 信号是MISO , 当然,其他几个多少也会有些影响,但总体来说影响没有 MISO 大而已 本帖最后由 hpdell 于 2022-10-25 20:36 编辑
2nd 发表于 2022-10-24 14:28
可以先复核下控制寄存器,CPOL/CPHA都是0,就符合你的设计
(引用自2楼)
你好,我的是 2 片板, 也就是 对板连接组合在一起的 ,
目前终于发现了问题了, 原来是 对板连接 副板 造成的, 副班那边只要引 spi 信号过去, 那对板连接主板的 spi 工作就会异常 ??,
对板连接副班那边也没有接任何的 spi 器件也不行,
如果不把对板连接主板上的 spi 引到 对板连接副班那边, 则对板连接主板上的 spi 工作完全正常, 貌似是是神马干扰引起.. ???
这下麻烦了哟 , 大神有没有什么比较好的解决方法啊 ?
造成信号紊乱的 信号是MISO , 当然,其他几个多少也会有些影响,但总体来说影响没有 MISO 大而已 hpdell 发表于 2022-10-25 20:29
你好,我的是 2 片板, 也就是 对板连接组合在一起的 ,
目前终于发现了问题了, 原来是 对板连接 副板 造成 ...
(引用自6楼)
你找找drive strength,设大点试试。我记得stm32默认非常小。 wye11083 发表于 2022-10-25 22:45
你找找drive strength,设大点试试。我记得stm32默认非常小。
(引用自8楼)
我没有使用 drive strength 这个功能,我就是基本的 spi 操作
页:
[1]