完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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.Direction = 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); } } |
|
相关推荐
1个回答
|
|
在STM32H743中,使用SPI3作为从机接收数据时,如果遇到RXP(接收数据寄存器)无法置位的问题,可以尝试以下步骤进行排查和解决:
1. **检查SPI初始化配置**:确保SPI3的初始化配置正确,包括SPI模式(主/从)、时钟极性和相位、数据大小等。你的代码片段中缺少了初始化配置的部分,确保你已经正确设置了这些参数。 2. **检查GPIO配置**:确保PD6引脚已经被配置为SPI3的MOSI功能。这通常在GPIO的初始化函数中完成。 ```c GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOD_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_6; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF5_SPI3; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); ``` 3. **检查SPI中断和DMA配置**:如果你使用中断或DMA来接收数据,确保相关配置正确,并且中断使能。 4. **检查SPI接收中断使能**:确保你已经使能了SPI的接收中断。 ```c __HAL_SPI_ENABLE_IT(&gSpi3Handle, SPI_IT_RXNE); ``` 5. **检查数据接收逻辑**:在接收数据的逻辑中,确保你正确地从RXP寄存器读取数据。 6. **硬件问题排查**:如果软件配置正确,但问题依旧存在,可能是硬件连接问题。检查PD6引脚的物理连接,以及SPI3的其他相关硬件配置。 7. **使用示波器检查信号**:使用示波器检查PD6引脚的信号波形,确认信号是否正确。 8. **参考STM32CubeMX配置**:如果你手动编写初始化代码,建议使用STM32CubeMX工具生成初始化代码作为参考,确保所有配置项都被正确设置。 9. **查看错误代码**:如果HAL库函数返回错误代码,检查这些错误代码的含义,它们可能会提供问题的线索。 10. **更新固件库**:确保你使用的STM32 HAL库是最新版本,有时候库中的bug也会导致类似问题。 如果以上步骤都无法解决问题,可能需要更详细的调试,包括查看SPI的寄存器状态,以及使用调试器逐步跟踪代码执行过程。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1649 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1566 浏览 1 评论
994 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
693 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1613 浏览 2 评论
1871浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
656浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
526浏览 3评论
543浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
515浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 14:07 , Processed in 0.744077 second(s), Total 47, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号