普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 3538|回复: 3

STM32 cube HAL库读SPI Flash数据都是0

[复制链接]

3

主题

6

帖子

32

积分

新手上路

Rank: 1

积分
32
发表于 2020-7-16 15:49:50 | 显示全部楼层 |阅读模式
各位前辈,我用Z300这个板子,用HAL库读SPI flash时,读出的数据和芯片ID都为0,请教下,这是什么原因啊?
主要代码如下:
uint8_t w25x_read_id = 0x90;                                   //  read chip ID
uint8_t m_addr[3]    = {0,0,0};                                        //
uint8_t check_busy   = 0x05;                                        // ????????
uint8_t enable_write = 0x06;                                        // ???????????
uint8_t erase_sector   = 0x20;                                        // ????
uint8_t write_page   = 0x02;                                        // ?????
uint8_t read_data    = 0x03;                                        // ????

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
int fputc(int ch,FILE *f)
{
    uint8_t temp[1]={ch};
    HAL_UART_Transmit(&huart1,temp,1,0xffff);
        return ch;
}
void CheckBusyF(void)
{
        uint8_t status=1;
        uint32_t timeCount=0;
        do
        {
                timeCount++;
                if(timeCount > 0xEFFFFFFF) //????
                {
                        return ;
                }
               
                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);        // ??CS       
                HAL_SPI_Transmit(&hspi2, &check_busy, 1, 100);                        // ????
                HAL_SPI_Receive(&hspi2, &status, 1, 100);                                // ??
                HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);        // ??CS
               
        }while((status&0x01)==0x01);

}
void WriteData(void)
{
        uint8_t temp_wdata[5] = {0x99,0x88,0x77,0x66,0x55};                // ???????
        CheckBusyF();
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);        // ??CS
        HAL_SPI_Transmit(&hspi2, &enable_write, 1, 100);                // ????
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);        // ??CS
       
        CheckBusyF();
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);        // ??CS
        HAL_SPI_Transmit(&hspi2, &erase_sector, 1, 100);                        // ????
        HAL_SPI_Transmit(&hspi2, m_addr, 3, 100);                                // ????
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);        // ??CS
        CheckBusyF();
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);        // ??CS
        HAL_SPI_Transmit(&hspi2, &enable_write, 1, 100);                // ????
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);        // ??CS
        CheckBusyF();
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);        // ??CS
        HAL_SPI_Transmit(&hspi2, &write_page, 1, 100);                        // ????
        HAL_SPI_Transmit(&hspi2, m_addr, 3, 100);                                // ??
        HAL_SPI_Transmit(&hspi2, temp_wdata, 5, 100);                        // ????
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);        // ??CS
}
void ReadData(void)
{
        uint8_t temp_rdata[5] = {0,0,0,0,0};                                        // ???????buff
        CheckBusyF();
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);        // ??CS
        HAL_SPI_Transmit(&hspi2, &read_data, 1, 100);                        // ?????
        HAL_SPI_Transmit(&hspi2, m_addr, 3, 100);                                // ??
        HAL_SPI_Receive(&hspi2, temp_rdata, 5, 100);                        // ????
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);        // ??CS
       
        /* ???? */
        printf("Read flash data is:%x %x %x %x %x\n",temp_rdata[0],temp_rdata[1],temp_rdata[2],temp_rdata[3],temp_rdata[4]);
}
void ReadID(void)
{
        uint8_t temp_ID[5] = {0,0,0,0,0};                                                // ????
       
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);        // ??CS
        HAL_SPI_Transmit(&hspi2, &w25x_read_id, 1, 100);                // ?ID????
        HAL_SPI_Receive(&hspi2, temp_ID, 5, 100);                                // ??ID
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);        // ??CS
       
        /* ???? */
        printf("readID is %x%x\n",temp_ID[3],temp_ID[4]);
}

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* 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_SPI2_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
ReadID();
        WriteData();
        HAL_Delay(20);
        ReadData();
回复

使用道具 举报

27

主题

337

帖子

3294

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3294
发表于 2020-7-17 08:50:39 | 显示全部楼层
STM32F103有对应的HAL库教程,可以参考下例程
回复 支持 反对

使用道具 举报

3

主题

6

帖子

32

积分

新手上路

Rank: 1

积分
32
 楼主| 发表于 2020-7-17 14:17:42 | 显示全部楼层
我刚试了下,用你们HAL库的SPI实例,直接烧录Hex文件(没有做修改),显示屏没任何显示,程序也没有效果。
回复 支持 反对

使用道具 举报

1

主题

2

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2020-12-15 00:22:04 | 显示全部楼层
yuwei 发表于 2020-7-17 14:17
我刚试了下,用你们HAL库的SPI实例,直接烧录Hex文件(没有做修改),显示屏没任何显示,程序也没有效果。

请问你解决没有呢 我现在也是下载hal库的程序都没反应
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-24 06:14 , Processed in 0.083603 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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