赞
踩
stm32cubemx配置
时钟配置
代码部分
- /**
- ******************************************************************************
- * File Name : FMC.c
- * Description : This file provides code for the configuration
- * of the FMC peripheral.
- ******************************************************************************
- * @attention
- *
- * <h2><center>© Copyright (c) 2020 STMicroelectronics.
- * All rights reserved.</center></h2>
- *
- * This software component is licensed by ST under BSD 3-Clause license,
- * the "License"; You may not use this file except in compliance with the
- * License. You may obtain a copy of the License at:
- * opensource.org/licenses/BSD-3-Clause
- *
- ******************************************************************************
- */
- /* Includes ------------------------------------------------------------------*/
- #include "fmc.h"
-
- /* USER CODE BEGIN 0 */
-
- /* USER CODE END 0 */
-
- NAND_HandleTypeDef hnand1;
-
- /* FMC initialization function */
- void MX_FMC_Init(void)
- {
- FMC_NAND_PCC_TimingTypeDef ComSpaceTiming = {0};
- FMC_NAND_PCC_TimingTypeDef AttSpaceTiming = {0};
-
- /** Perform the NAND1 memory initialization sequence
- */
- hnand1.Instance = FMC_NAND_DEVICE;
- /* hnand1.Init */
- hnand1.Init.NandBank = FMC_NAND_BANK3;
- hnand1.Init.Waitfeature = FMC_NAND_PCC_WAIT_FEATURE_ENABLE;
- hnand1.Init.MemoryDataWidth = FMC_NAND_PCC_MEM_BUS_WIDTH_8;
- hnand1.Init.EccComputation = FMC_NAND_ECC_DISABLE;
- hnand1.Init.ECCPageSize = FMC_NAND_ECC_PAGE_SIZE_2048BYTE;
- hnand1.Init.TCLRSetupTime = 0;
- hnand1.Init.TARSetupTime = 0;
- /* hnand1.Config */
- hnand1.Config.PageSize = 2048;
- hnand1.Config.SpareAreaSize = 64;
- hnand1.Config.BlockSize = 64;
- hnand1.Config.BlockNbr = 4096;
- hnand1.Config.PlaneNbr = 2;
- hnand1.Config.PlaneSize = 276824064;
- hnand1.Config.ExtraCommandEnable = DISABLE;
- /* ComSpaceTiming */
- ComSpaceTiming.SetupTime = 0;
- ComSpaceTiming.WaitSetupTime = 1;
- ComSpaceTiming.HoldSetupTime = 3;
- ComSpaceTiming.HiZSetupTime = 1;
- /* AttSpaceTiming */
- AttSpaceTiming.SetupTime = 0;
- AttSpaceTiming.WaitSetupTime = 1;
- AttSpaceTiming.HoldSetupTime = 3;
- AttSpaceTiming.HiZSetupTime = 1;
-
- if (HAL_NAND_Init(&hnand1, &ComSpaceTiming, &AttSpaceTiming) != HAL_OK)
- {
- Error_Handler( );
- }
-
- }
-
- static uint32_t FMC_Initialized = 0;
-
- static void HAL_FMC_MspInit(void){
- /* USER CODE BEGIN FMC_MspInit 0 */
-
- /* USER CODE END FMC_MspInit 0 */
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- if (FMC_Initialized) {
- return;
- }
- FMC_Initialized = 1;
-
- /* Peripheral clock enable */
- __HAL_RCC_FMC_CLK_ENABLE();
-
- /** FMC GPIO Configuration
- PE7 ------> FMC_D4
- PE8 ------> FMC_D5
- PE9 ------> FMC_D6
- PE10 ------> FMC_D7
- PD11 ------> FMC_CLE
- PD12 ------> FMC_ALE
- PD14 ------> FMC_D0
- PD15 ------> FMC_D1
- PD0 ------> FMC_D2
- PD1 ------> FMC_D3
- PD4 ------> FMC_NOE
- PD5 ------> FMC_NWE
- PD6 ------> FMC_NWAIT
- PG9 ------> FMC_NCE3
- */
- /* GPIO_InitStruct */
- GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
-
- HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
-
- /* GPIO_InitStruct */
- GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_14|GPIO_PIN_15
- |GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5
- |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_AF12_FMC;
-
- HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
-
- /* GPIO_InitStruct */
- GPIO_InitStruct.Pin = GPIO_PIN_9;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
- GPIO_InitStruct.Alternate = GPIO_AF12_FMC;
-
- HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
-
- /* USER CODE BEGIN FMC_MspInit 1 */
-
- /* USER CODE END FMC_MspInit 1 */
- }
-
- void HAL_NAND_MspInit(NAND_HandleTypeDef* nandHandle){
- /* USER CODE BEGIN NAND_MspInit 0 */
-
- /* USER CODE END NAND_MspInit 0 */
- HAL_FMC_MspInit();
- /* USER CODE BEGIN NAND_MspInit 1 */
-
- /* USER CODE END NAND_MspInit 1 */
- }
-
- static uint32_t FMC_DeInitialized = 0;
-
- static void HAL_FMC_MspDeInit(void){
- /* USER CODE BEGIN FMC_MspDeInit 0 */
-
- /* USER CODE END FMC_MspDeInit 0 */
- if (FMC_DeInitialized) {
- return;
- }
- FMC_DeInitialized = 1;
- /* Peripheral clock enable */
- __HAL_RCC_FMC_CLK_DISABLE();
-
- /** FMC GPIO Configuration
- PE7 ------> FMC_D4
- PE8 ------> FMC_D5
- PE9 ------> FMC_D6
- PE10 ------> FMC_D7
- PD11 ------> FMC_CLE
- PD12 ------> FMC_ALE
- PD14 ------> FMC_D0
- PD15 ------> FMC_D1
- PD0 ------> FMC_D2
- PD1 ------> FMC_D3
- PD4 ------> FMC_NOE
- PD5 ------> FMC_NWE
- PD6 ------> FMC_NWAIT
- PG9 ------> FMC_NCE3
- */
- HAL_GPIO_DeInit(GPIOE, GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10);
-
- HAL_GPIO_DeInit(GPIOD, GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_14|GPIO_PIN_15
- |GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5
- |GPIO_PIN_6);
-
- HAL_GPIO_DeInit(GPIOG, GPIO_PIN_9);
-
- /* USER CODE BEGIN FMC_MspDeInit 1 */
-
- /* USER CODE END FMC_MspDeInit 1 */
- }
-
- void HAL_NAND_MspDeInit(NAND_HandleTypeDef* nandHandle){
- /* USER CODE BEGIN NAND_MspDeInit 0 */
-
- /* USER CODE END NAND_MspDeInit 0 */
- HAL_FMC_MspDeInit();
- /* USER CODE BEGIN NAND_MspDeInit 1 */
-
- /* USER CODE END NAND_MspDeInit 1 */
- }
- /**
- * @}
- */
- /**
- * @}
- */
- /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
- /* USER CODE BEGIN Header */
- /**
- ******************************************************************************
- * @file : main.c
- * @brief : Main program body
- ******************************************************************************
- * @attention
- *
- * <h2><center>© Copyright (c) 2020 STMicroelectronics.
- * All rights reserved.</center></h2>
- *
- * This software component is licensed by ST under BSD 3-Clause license,
- * the "License"; You may not use this file except in compliance with the
- * License. You may obtain a copy of the License at:
- * opensource.org/licenses/BSD-3-Clause
- *
- ******************************************************************************
- */
- /* USER CODE END Header */
-
- /* Includes ------------------------------------------------------------------*/
- #include "main.h"
- #include "usart.h"
- #include "gpio.h"
- #include "fmc.h"
-
- /* Private includes ----------------------------------------------------------*/
- /* USER CODE BEGIN Includes */
-
- #include "nandflash.h"
-
- /* USER CODE END Includes */
-
- /* Private typedef -----------------------------------------------------------*/
- /* USER CODE BEGIN PTD */
-
- /* USER CODE END PTD */
-
- /* Private define ------------------------------------------------------------*/
- /* USER CODE BEGIN PD */
- /* USER CODE END PD */
-
- /* Private macro -------------------------------------------------------------*/
- /* USER CODE BEGIN PM */
-
- /* USER CODE END PM */
-
- /* Private variables ---------------------------------------------------------*/
-
- /* USER CODE BEGIN PV */
-
- /* 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 */
-
- /* 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_FMC_Init();
- MX_USART1_UART_Init();
- /* USER CODE BEGIN 2 */
- HAL_Delay (500);
- if(nandflash())
- HAL_UART_Transmit(&huart1,"read nandflash failed",sizeof("read nandflash failed"),100);
- /* USER CODE END 2 */
-
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- /* USER CODE END WHILE */
-
- /* USER CODE BEGIN 3 */
- }
- /* USER CODE END 3 */
- }
-
- /**
- * @brief System Clock Configuration
- * @retval None
- */
- void SystemClock_Config(void)
- {
- RCC_OscInitTypeDef RCC_OscInitStruct = {0};
- RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
-
- /** Configure the main internal regulator output voltage
- */
- __HAL_RCC_PWR_CLK_ENABLE();
- __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3);
- /** Initializes the CPU, AHB and APB busses clocks
- */
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
- RCC_OscInitStruct.HSEState = RCC_HSE_ON;
- RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
- RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
- RCC_OscInitStruct.PLL.PLLM = 25;
- RCC_OscInitStruct.PLL.PLLN = 192;
- RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
- RCC_OscInitStruct.PLL.PLLQ = 4;
- if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
- {
- Error_Handler();
- }
- /** Initializes the CPU, AHB and APB busses clocks
- */
- RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
- |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
- RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
- RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
- RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
- RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
-
- if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK)
- {
- Error_Handler();
- }
- }
-
- /* USER CODE BEGIN 4 */
-
- /* USER CODE END 4 */
-
- /**
- * @brief This function is executed in case of error occurrence.
- * @retval None
- */
- void Error_Handler(void)
- {
- /* USER CODE BEGIN Error_Handler_Debug */
- /* User can add his own implementation to report the HAL error return state */
-
- /* USER CODE END Error_Handler_Debug */
- }
-
- #ifdef USE_FULL_ASSERT
- /**
- * @brief Reports the name of the source file and the source line number
- * where the assert_param error has occurred.
- * @param file: pointer to the source file name
- * @param line: assert_param error line source number
- * @retval None
- */
- void assert_failed(uint8_t *file, uint32_t line)
- {
- /* USER CODE BEGIN 6 */
- /* User can add his own implementation to report the file name and line number,
- tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
- /* USER CODE END 6 */
- }
- #endif /* USE_FULL_ASSERT */
-
- /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
- #include "fmc.h"
- #include "usart.h"
-
-
- NAND_IDTypeDef nand_ID;
- NAND_AddressTypeDef NAND_Address;
-
- void nand_init(uint8_t nPlane,uint16_t nBlock,uint8_t nPage)
- {
- assert_param(IS_nPLANE_OK(nPlane));
- assert_param(IS_nBLOCK_OK(nBlock));
- assert_param(IS_nPAGE_OK(nPage));
-
- NAND_Address.Plane = nPlane;
- NAND_Address.Block = nBlock;
- NAND_Address.Page = nPage;
- }
-
- uint8_t nandflash()
- {
- HAL_StatusTypeDef HAL_status;
- uint8_t read_result[2048] = "0";
-
-
- HAL_NAND_Reset(&hnand1);
- HAL_Delay (500);
- HAL_status = HAL_NAND_Read_ID(&hnand1,&nand_ID);
- if(HAL_status != HAL_OK)
- return 1;
-
- HAL_UART_Transmit(&huart1,&nand_ID.Device_Id,sizeof(uint8_t),100);
- HAL_UART_Transmit(&huart1,&nand_ID.Fourth_Id,sizeof(uint8_t),100);
- HAL_UART_Transmit(&huart1,&nand_ID.Maker_Id,sizeof(uint8_t),100);
- HAL_UART_Transmit(&huart1,&nand_ID.Third_Id,sizeof(uint8_t),100);
-
-
- nand_init(1,1,1);
-
- HAL_status = HAL_NAND_Read_Page_8b(&hnand1,&NAND_Address,read_result,1);
- if(HAL_status != HAL_OK)
- return 3;
-
- HAL_UART_Transmit(&huart1,read_result,sizeof(read_result),3000);
- if(HAL_status != HAL_OK)
- return 4;
-
- return 0;
- }
-
-
问题:调试时总是卡在
HAL_status = HAL_NAND_Read_ID(&hnand1,&nand_ID);这个库函数中
- data = *(__IO uint32_t *)deviceaddress;
-
- /* Return the data read */
一执行这一步,就报错
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。