OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6587|回复: 4

初识STM32F765/F767 SPI从机问题请教 分享一个镁光(MT25驱动程序)

[复制链接]

3

主题

8

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-9-18
在线时间
4 小时
发表于 2017-9-18 23:16:41 | 显示全部楼层 |阅读模式
6金钱
本帖最后由 scf7begin 于 2017-9-18 23:16 编辑
使用STM32F7一个多月,之前一直用的M3/M4,这里分享一下近期的成果和遇到的问题,希望路过的兄弟们帮忙给看看遇到的问题。
因为项目上需要使用F7来作为控制器,本次使用到的外设有SDRAM、QSPI-FLASH(镁光 MT25QL01GBBB,这货不好买)、SPI从机、和一些驱动器什么的。

硬件环境: STM32F767BIT6 STM32F765BIT6 (都是208脚的),QSPI<-->MT25QL01GBBB,FMC<-->W9825G6KH-6。

PCB:6层 2地 1电源 3信号层


1、SDRAM采用的是原子的例程修改的,使用的型号和原子767开发板子用的一样,原子的历程很详细,赞一个。2、QSPI的驱动已经移植好了,和原子的WQ25差不太多,在网上偶然找到一大神的N25Q256/N25Q512,对照着技术文档,修改一下,已经搞定啦,需要的下载。【附件只有驱动部分,完整代码请私聊

3、SPI这个这个看来简单的外设花了好多时间来处理。也是目前最头疼的一个模块,遇到的问题也比较奇怪。这里我整理一些出来,看看有没有人遇到过相同的情况的,求路过的兄弟们给点建议或者解决方案。

a SPI需要做从机,主机是FPGA,通信时钟频率10-20MHZ。
b 主机SPI时序已经经过验证(示波器,逻辑分依仪都测试过,确保OK)
c 单片机代码使用cube生成,做了小改动。


第一次使用SPI2 映射到 PB12 PB13 PB14 PB15 四个管脚。能够正常接收到数据,但是会存在非周期性的丢包,大约1秒1-2字节,寻找原因过程中发现:
PB14 PB15两只脚作为普通IO口时无法输出高电平。原因未知,SPI丢包硬件上原因可能较大。但不明确。


然后将PB14 PB15两只引脚映射到PI2 PI3 后,持续工作未见异常。(约一个月,临时飞线解决)


因PI口作为其他功能使用,所以第二版将SPI口调整到SPI1上(PD7 PG9 PG10 PG11)四个引脚。结果又发现问题,SPI1的中断位 (SPI_IT_RXNE|SPI_IT_ERR )如果同时打开,则无限次进入中断,只打开SPI_IT_RXNE 能够收到少量数据,约30% (发送端发送100字节,通过中断能够接收到30字节左右,确实是发送端发出的字节)。测试传输波形良好。


然后一路排查发现两个SPI的差异发现,SPI1的BSY标志始终为1,而正常接受到数据的SPI2不会有这个情况。程序配置见附件,基本上就是cube生成的代码。
<这里的问题我是真的不明白是什么原因了,希望集思广益来解决这个问题。>




期间还发现的问题:
PA11 PA12 两只引脚无法输出高电平。后增加上拉电阻后有改善,但是没有根本解决。具体表现为上升时间(正常PP OD输出上升时间大概在5-20ns之间,而这3两只引脚大概在us 切上升过程不明原因异常,单片机引脚和其他电路已断开,IO口无负载。如图


邮箱:guangqiang.t@qq.com  QQ:909193161 非公司保密代码可共享交流。
--------------------------------------------------------------------------------------------------------------->>>>>>>>>>>>>
谢谢!





QQ图片20170918223216.png

PA11外部上拉1.5K

PA11外部上拉1.5K

PA12 外部上拉1.5K

PA12 外部上拉1.5K

qspi-flash-mt25q.zip

13.72 KB, 下载次数: 298

FLSAH

spi2-int-正常.zip

10.52 KB, 下载次数: 238

spi2正常接收代码

stm32f767_spi1_int收不到.zip

5.06 MB, 下载次数: 206

spi1出问题的代码

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-9-18
在线时间
4 小时
 楼主| 发表于 2017-9-18 23:18:24 | 显示全部楼层
出问题的代码主要函数为:

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* Enable I-Cache-------------------------------------------------------------*/
  SCB_EnableICache();

  /* Enable D-Cache-------------------------------------------------------------*/
  SCB_EnableDCache();

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_SPI1_Init();
  MX_UART7_Init();

  /* USER CODE BEGIN 2 */
        hspi1.RxISR =spi_rx_isr;
__HAL_SPI_ENABLE_IT(&hspi1, (SPI_IT_RXNE|SPI_IT_ERR ));
       
        __HAL_SPI_ENABLE(&hspi1);
          /* SPI1_IRQn interrupt configuration */
  
        printf("xxxxxxxxxxxx\r\nbegin\r\n");
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
                GPIOG->ODR ^= GPIO_PIN_14;
                printf("%d\r",i);
                HAL_Delay(100);
  }
  /* USER CODE END 3 */

}


void spi_rx_isr(SPI_HandleTypeDef *hspi)
{
        //printf("+1");
        #if  1
        a[i]= *(__IO uint8_t *)(&SPI1->DR);
        //printf("+1=%.2X\r\n",a[i]);
        i++;
        if(i == 72)
        {
                __HAL_SPI_DISABLE_IT(&hspi1, (SPI_IT_RXNE|SPI_IT_ERR ));
                __HAL_SPI_DISABLE(&hspi1);
                for(i=0;i<72;i++)
                {
                        printf("%d=%.2X\r\n",i,a[i]);
                }
                while(1);
        }
       
        #endif
       
        GPIOG->ODR |= GPIO_PIN_14;

}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2017-9-19 00:15:09 | 显示全部楼层
帮顶
回复

使用道具 举报

3

主题

178

帖子

0

精华

高级会员

Rank: 4

积分
524
金钱
524
注册时间
2016-12-31
在线时间
195 小时
发表于 2017-9-19 08:55:16 来自手机 | 显示全部楼层
帮顶!!!
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-9-18
在线时间
4 小时
 楼主| 发表于 2017-9-19 09:18:36 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-18 11:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表