完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大神们好,
最近在移植 spi 的程序,以前使用的 spi5,由与现在硬件是 f7,所以spi 是连接在 SPI2 上,端口为 PC2,PC3,PA9,其中PA9为时钟, 移植过来后,工作不正常或者不稳定,这个程序以前在其他的硬件平台上使用是挺好的,移植过来后只是 更改 IO 口,其他的基本没有修改过 现在f7的 spi2 的配置如下: /* SPI2 init function */ void MX_SPI2_Init(void) { hspi2.Instance = SPI2; hspi2.Init.Mode = SPI_MODE_MASTER; hspi2.Init.Direction = SPI_DIRECTION_2LINES; hspi2.Init.DataSize = SPI_DATASIZE_8BIT; hspi2.Init.CLKPolarity = SPI_POLARITY_LOW; hspi2.Init.CLKPhase = SPI_PHASE_1EDGE; hspi2.Init.NSS = SPI_NSS_SOFT; hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi2.Init.TIMode = SPI_TIMODE_DISABLE; hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; hspi2.Init.CRCPolynomial = 7; // hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE; // hspi2.Init.NSSPMode = SPI_NSS_PULSE_DISABLE; if (HAL_SPI_Init(&hspi2) != HAL_OK) { Error_Handler(); } } void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle) { GPIO_InitTypeDef GPIO_InitStruct; if(spiHandle->Instance==SPI2) { /* USER CODE BEGIN SPI2_MspInit 0 */ /* USER CODE END SPI2_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_SPI2_CLK_ENABLE(); __GPIOC_CLK_ENABLE(); __GPIOA_CLK_ENABLE(); /**SPI2 GPIO Configuration PC2 ------> SPI2_MISO PC3 ------> SPI2_MOSI PA9 ------> SPI2_SCK */ GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Alternate = GPIO_AF5_SPI2; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Alternate = GPIO_AF5_SPI2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* USER CODE BEGIN SPI2_MspInit 1 */ /* USER CODE END SPI2_MspInit 1 */ } } |
|
相关推荐
16个回答
|
|
|
|
终于搞定了啊, 原来是我在 设置 mpu 时,吧保护区域设置成了 0x20000000 的地址造成,另外还有就是之前的那片 spi 的芯片也坏了,只能够读出id,但是不能够正常读写数据,时钟频率 2分频超频使用没有的,我的这个spi 的芯片频率可以到80MHz 左右,不过这个stm出的 spi 时钟频率限制也是很奇葩,他奶奶 的,要是能够再高些就好了啊 |
|
|
|
是不是频率太高了。如果是数据发生丢失,试着把SPI的频率降低一些。
|
|
|
|
2分频太高了
|
|
|
|
SPI2 最高频率25M 自己算你的是多少吧
|
|
|
|
终于搞定了啊, 原来是我在 设置 mpu 时,吧保护区域设置成了 0x20000000 的地址造成,另外还有就是之前的那片 spi 的芯片也坏了,只能够读出id,但是不能够正常读写数据,时钟频率 2分频超频使用没有的,我的这个spi 的芯片频率可以到80MHz 左右,不过这个stm出的 spi 时钟频率限制也是很奇葩,他奶奶 的,要是能够再高些就好了啊 |
|
|
|
楼主这器件频率好高
|
|
|
|
|
|
|
|
|
|
理论上不能够超的,但是目前超屏使用也没有任何问题的, 如果不超频的话,才十几M的速度,太慢了啊, |
|
|
|
...几十M还慢... |
|
|
|
楼主这器件频率好高
|
|
|
|
学习了。。。
|
|
|
|
|
|
我还在时钟频率里查了半天
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1712 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
887 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1269 浏览 1 评论
LL库F030进行3个串口收发,2个串口为232,一个为485,长时间后,会出现串口1停止运行,另外两个正常,只有重启复原
1740 浏览 1 评论
552 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-13 06:20 , Processed in 1.052166 second(s), Total 104, Slave 87 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号