OpenEdv-开源电子网

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

北极星H750 QSPI通信实验 读写SPI FLASH 失败

[复制链接]

5

主题

9

帖子

0

精华

高级会员

Rank: 4

积分
591
金钱
591
注册时间
2018-5-8
在线时间
96 小时
发表于 2020-6-15 15:59:06 | 显示全部楼层 |阅读模式
本帖最后由 pinganbo 于 2020-6-15 16:16 编辑

]硬件:正点原子北极星 STM32H750
开发环境: cubeMX + HAL
根据原理图配置相关引脚
采用的是:Bank1 with Quad SPI Lines/四线Bank1模式
    PB6     ------> QUADSPI_BK1_NCS
    PF6     ------> QUADSPI_BK1_IO3
    PF7     ------> QUADSPI_BK1_IO2
    PF8     ------> QUADSPI_BK1_IO0
    PF9     ------> QUADSPI_BK1_IO1
    PB2     ------> QUADSPI_CLK

现在的问题,编译啥的都通过了,0错误,0警告,下载debug ITM显示打印失败。不知道是哪里的问题,请大佬帮忙看一下。
参考的程序是银杏科技论坛里的技术文档http://www.gkwiki.cn/doku.php?id=icore4t_13

参考网上的程序:main.c如下:
int main(void)
{
  /* USER CODE BEGIN 1 */
        int i;
        int temp;
        unsigned char write_buffer[4096];
        unsigned char read_buffer[4096];
  /* USER CODE END 1 */

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

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

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_QUADSPI_Init();
  MX_USART3_UART_Init();

  /* USER CODE BEGIN 2 */
        BSP_QSPI_Init();
        printf("W25Q64 QuadSPI Test....\r\n\r\n");
        temp = BSP_QSPI_FLASH_ReadID();
        printf("FLASH ID: 0x%X\r\n\r\n",temp);
//write
        for(i = 0;i < 4096;i ++)
        {
                write_buffer = i % 4096;
                read_buffer
= 0;
        }
        BSP_QSPI_Write(write_buffer,0,4096); //写数据
        BSP_QSPI_Read(read_buffer,0,4096); //读数据
        for(i = 0;i < 4096;i ++)
        {
          if(read_buffer
!= write_buffer)
                 {
                        printf("FLASH ERROR!\r\n");//打印失败
                        while(1);
                 }
        }
        printf("FLASH TEST OK!\r\n");//打印成功
  /* USER CODE END 2 */

    while(1)
      {
      }
}
[/td][/tr]
[/table]
ITM.JPG
FLASH原理图.JPG
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

9

帖子

0

精华

高级会员

Rank: 4

积分
591
金钱
591
注册时间
2018-5-8
在线时间
96 小时
 楼主| 发表于 2020-6-15 16:26:56 | 显示全部楼层
原贴有误,不知道为什么在原贴里修改不了,只能回复修改如下:
write_buffer = i % 256  ——》 write_buffer[i] = i % 256;  
read_buffer = 0;          ——》  read_buffer[i] = 0;
if(read_buffer != write_buffer) ——》 if(read_buffer[i] != write_buffer[i])
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2017-8-16
在线时间
22 小时
发表于 2020-6-16 21:20:11 | 显示全部楼层
unsigned char write_buffer[4096];
        unsigned char read_buffer[4096];

这俩定义成全局变量就可以吧,

我使用时也遇到相同问题,好像查到的资料是:

/*
* keil C中的局部变量是放在栈中,而栈大小在启动文件中设置好了的,所以在写函数的局部变量的时候不应该定义大的数组,
* 不然栈不够装,就会就会导致局部变量的地址和全局变量的地址重叠。
*/
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-1 09:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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