SPI3 PD6 做为MOSI 引脚 有波形,但RXP 置不了位
求解
SPI_HandleTypeDef gSpi3Handle = {0}; /* SPI句柄 */
void SPI3_Init(void)
{
uint32_t adcValueB1 = 0;
HAL_SPI_DeInit( gSpi3Handle);
gSpi3Handle.Instance = SPI3; /* SPI2 */
gSpi3Handle.Init.Mode = SPI_MODE_SLAVE; /* 设置SPI工作模式,设置为主模式 */
gSpi3Handle.Init.Direc
tion = SPI_DIRECTION_2LINES_RXONLY; /* 设置SPI单向或者双向的数据模式:SPI设置为双线模式 */
gSpi3Handle.Init.DataSize = SPI_DATASIZE_16BIT; /* 设置SPI的数据大小:SPI发送接收8位帧结构 */
gSpi3Handle.Init.CLKPolarity = SPI_POLARITY_LOW; /* 串行同步时钟的空闲状态为高电平 */
gSpi3Handle.Init.CLKPhase = SPI_PHASE_2EDGE; /* 串行同步时钟的第二个跳变沿(上升或下降)数据被采样 */
gSpi3Handle.Init.NSS = SPI_NSS_HARD_INPUT; /* NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制 */
gSpi3Handle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64; /* 定义波特率预分频的值:波特率预分频值为256 */
gSpi3Handle.Init.FirstBit = SPI_FIRSTBIT_MSB; /* 指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始 */
gSpi3Handle.Init.TIMode = SPI_TIMODE_DISABLE; /* 关闭TI模式 */
gSpi3Handle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; /* 关闭硬件CRC校验 */
gSpi3Handle.Init.CRCPolynomial = 7; /* CRC值计算的多项式 */
gSpi3Handle.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
gSpi3Handle.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
gSpi3Handle.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
gSpi3Handle.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
gSpi3Handle.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
gSpi3Handle.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
gSpi3Handle.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE;
gSpi3Handle.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
gSpi3Handle.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_DISABLE;
gSpi3Handle.Init.IOSwap = SPI_IO_SWAP_DISABLE; /* SPI主模式IO状态保持使能 */
if (HAL_SPI_Init( gSpi3Handle) != HAL_OK)
{
}
__HAL_SPI_ENABLE( gSpi3Handle); /* 使能SPI2 */
adcValueB1 = SPI3_ReadWrite2Byte(0xffff); /* 启动传输 */
}
void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
{
if(spiHandle->Instance==SPI3)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_PeriphCLKInitTypeDef RCC_PeriphCLKInitStruct;
RCC_PeriphCLKInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI3;
RCC_PeriphCLKInitStruct.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL;
HAL_RCCEx_PeriphCLKConfig( RCC_PeriphCLKInitStruct);
__HAL_RCC_SPI3_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOI_CLK_ENABLE();
/**SPI3 GPIO Configuration
PA4 ------> SPI3_NSS
PD6 ------> SPI3_MOSI
PB3 (JTDO/TRACESWO) ------> SPI3_SCK
PB4 (NJTRST) ------> SPI3_MISO
*/
GPIO_InitStruct.Pin = GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
GPIO_InitStruct.Alternate = GPIO_AF6_SPI3;
HAL_GPIO_Init(GPIOA, GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI3;
HAL_GPIO_Init(GPIOD, GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
GPIO_InitStruct.Alternate = GPIO_AF6_SPI3;
HAL_GPIO_Init(GPIOB, GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
GPIO_InitStruct.Alternate = GPIO_AF6_SPI3;
HAL_GPIO_Init(GPIOB, GPIO_InitStruct);
}
}