你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

st-img
chrome
st-img
firefox
st-img
safari
st-img
ie8及以上
shequ.stmicroelectronics.cn
  • ST意法半导体官网
  • STM32中文官网
  • ST全球论坛
登录/注册
  • 首页
  • 技术问答
  • 话题
  • 资源
  • 创客秀
  • 视频
  • 标签
  • 积分商城
  • 每日签到
水滴石穿

水滴石穿

 

回答数 0 关注数 0
关注 私信
  • 动态99
  • 提问
  • 回答0
  • 创客秀 0
  • 分享 0
  • 关注0
1 回答

MDK5.28使用J-Link错误

未设置标签
水滴石穿 水滴石穿 回答时间: 2020-12-12 10:23

问题已解决,在IAR和MDK都试了,属于同一个程序操作导致的 参考链接http://www.armbbs.cn/forum.php?mod=viewthread&tid=102226

赞0
9 回答

STM32上电到运行时间

未设置标签
butterflyspring butterflyspring 回答时间: 2020-9-29 10:32

从上电到程序开始执行需要一个完整的复位过程,楼主可以了量测一下上电和复位信号上升的时间。这段时间和电源,系统负载以及复位管脚的电容有关。 程序执行很多,时钟稳定建立时间也不长,如果想节省,可以上电先配置IO并驱动LED,然后再 配置时钟,这样尽可能的最早驱动LED

赞0
6 回答

STM32CubeIDE浮点型数据

STM32CubeIDE
mtxo2003@163.co mtxo2003@163.co 回答时间: 2021-1-8 17:48

楼主,STM32CUBEIDE的项目,怎么重构造printf函数啊!我这边按百度的方法都不行! https://blog.csdn.net/qq_42212961/article/details/105803129 STM32CUBEIDE版本是1.5.0,编译不报错,调试运行到那就会跳转到延迟函数去~~ 以下是代码 /* USER CODE BEGIN Header */ /**   ******************************************************************************   * @file           : main.c   * @brief          : Main program body   ******************************************************************************   * @attention   *   * <h2><center>&copy; Copyright (c) 2021 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" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "stdio.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ // 重定向printf start ////_write函數在syscalls.c中, 使用__weak定義, 所以可以直接在其他文件中定義_write函數 //__attribute__((weak)) int _write(int file, char *ptr, int len) //{ //         if(HAL_UART_Transmit(&huart2,ptr,len,0xffff) != HAL_OK) //         { //                 Error_Handler(); //         } //} /* 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 ---------------------------------------------------------*/ ADC_HandleTypeDef hadc1; DMA_HandleTypeDef hdma_adc1; CRC_HandleTypeDef hcrc; I2C_HandleTypeDef hi2c1; IWDG_HandleTypeDef hiwdg; TIM_HandleTypeDef htim3; UART_HandleTypeDef huart1; UART_HandleTypeDef huart2; DMA_HandleTypeDef hdma_usart1_tx; DMA_HandleTypeDef hdma_usart1_rx; /* USER CODE BEGIN PV */ /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_DMA_Init(void); static void MX_USART1_UART_Init(void); static void MX_ADC1_Init(void); static void MX_I2C1_Init(void); static void MX_USART2_UART_Init(void); static void MX_IWDG_Init(void); static void MX_CRC_Init(void); static void MX_TIM3_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ static uint32_t fac_us=17; #ifdef __GNUC__   /* With GCC, small printf (option LD Linker->Libraries->Small printf      set to 'Yes') calls __io_putchar() */   #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else   #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif /* __GNUC__ */ PUTCHAR_PROTOTYPE {   HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF);   return ch; } /* 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_DMA_Init();   MX_USART1_UART_Init();   MX_ADC1_Init();   MX_I2C1_Init();   MX_USART2_UART_Init();   MX_IWDG_Init();   MX_CRC_Init();   MX_TIM3_Init();   /* USER CODE BEGIN 2 */   /* USER CODE END 2 */   /* Infinite loop */   /* USER CODE BEGIN WHILE */   while (1)   {     /* USER CODE END WHILE */     /* USER CODE BEGIN 3 */           HAL_GPIO_WritePin(WARN_GPIO_Port, WARN_Pin,GPIO_PIN_SET);           printf("123456");           HAL_GPIO_WritePin(WARN_GPIO_Port, WARN_Pin,GPIO_PIN_SET);           delay_ms(1000);           HAL_GPIO_WritePin(WARN_GPIO_Port, WARN_Pin,GPIO_PIN_RESET);           delay_ms(1000);           HAL_GPIO_WritePin(WARN_GPIO_Port, WARN_Pin,GPIO_PIN_SET);   }   /* USER CODE END 3 */ } /**   * @brief System Clock Configuration   * @retval None   */ void SystemClock_Config(void) {   RCC_OscInitTypeDef RCC_OscInitStruct = {0};   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};   RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};   /** Configure the main internal regulator output voltage   */   HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);   /** Initializes the RCC Oscillators according to the specified parameters   * in the RCC_OscInitTypeDef structure.   */   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;   RCC_OscInitStruct.HSEState = RCC_HSE_ON;   RCC_OscInitStruct.LSIState = RCC_LSI_ON;   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;   RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV1;   RCC_OscInitStruct.PLL.PLLN = 12;   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV6;   RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV3;   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)   {     Error_Handler();   }   /** Initializes the CPU, AHB and APB buses clocks   */   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK                               |RCC_CLOCKTYPE_PCLK1;   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV2;   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)   {     Error_Handler();   }   /** Initializes the peripherals clocks   */   eriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_I2C1                               |RCC_PERIPHCLK_ADC;   eriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1;   eriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_PCLK1;   eriphClkInit.AdcClockSelection = RCC_ADCCLKSOURCE_PLLADC;   if (HAL_RCCEx_PeriphCLKConfig(&eriphClkInit) != HAL_OK)   {     Error_Handler();   } } /**   * @brief ADC1 Initialization Function   * @param None   * @retval None   */ static void MX_ADC1_Init(void) {   /* USER CODE BEGIN ADC1_Init 0 */   /* USER CODE END ADC1_Init 0 */   ADC_AnalogWDGConfTypeDef AnalogWDGConfig = {0};   ADC_ChannelConfTypeDef sConfig = {0};   /* USER CODE BEGIN ADC1_Init 1 */   /* USER CODE END ADC1_Init 1 */   /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)   */   hadc1.Instance = ADC1;   hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;   hadc1.Init.Resolution = ADC_RESOLUTION_12B;   hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;   hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;   hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;   hadc1.Init.LowPowerAutoWait = DISABLE;   hadc1.Init.LowPowerAutoPowerOff = DISABLE;   hadc1.Init.ContinuousConvMode = DISABLE;   hadc1.Init.NbrOfConversion = 3;   hadc1.Init.DiscontinuousConvMode = DISABLE;   hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;   hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;   hadc1.Init.DMAContinuousRequests = DISABLE;   hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;   hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_7CYCLES_5;   hadc1.Init.SamplingTimeCommon2 = ADC_SAMPLETIME_7CYCLES_5;   hadc1.Init.OversamplingMode = ENABLE;   hadc1.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_64;   hadc1.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_3;   hadc1.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;   hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH;   if (HAL_ADC_Init(&hadc1) != HAL_OK)   {     Error_Handler();   }   /** Configure Analog WatchDog 1   */   AnalogWDGConfig.WatchdogNumber = ADC_ANALOGWATCHDOG_1;   AnalogWDGConfig.WatchdogMode = ADC_ANALOGWATCHDOG_SINGLE_REG;   AnalogWDGConfig.Channel = ADC_CHANNEL_5;   AnalogWDGConfig.ITMode = DISABLE;   AnalogWDGConfig.HighThreshold = 0;   AnalogWDGConfig.LowThreshold = 0;   if (HAL_ADC_AnalogWDGConfig(&hadc1, &AnalogWDGConfig) != HAL_OK)   {     Error_Handler();   }   /** Configure Regular Channel   */   sConfig.Channel = ADC_CHANNEL_5;   sConfig.Rank = ADC_REGULAR_RANK_1;   sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1;   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)   {     Error_Handler();   }   /** Configure Regular Channel   */   sConfig.Channel = ADC_CHANNEL_6;   sConfig.Rank = ADC_REGULAR_RANK_2;   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)   {     Error_Handler();   }   /** Configure Regular Channel   */   sConfig.Channel = ADC_CHANNEL_8;   sConfig.Rank = ADC_REGULAR_RANK_3;   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)   {     Error_Handler();   }   /* USER CODE BEGIN ADC1_Init 2 */   /* USER CODE END ADC1_Init 2 */ } /**   * @brief CRC Initialization Function   * @param None   * @retval None   */ static void MX_CRC_Init(void) {   /* USER CODE BEGIN CRC_Init 0 */   /* USER CODE END CRC_Init 0 */   /* USER CODE BEGIN CRC_Init 1 */   /* USER CODE END CRC_Init 1 */   hcrc.Instance = CRC;   hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_DISABLE;   hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_DISABLE;   hcrc.Init.GeneratingPolynomial = 16387;   hcrc.Init.CRCLength = CRC_POLYLENGTH_16B;   hcrc.Init.InitValue = 0xffff;   hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE;   hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE;   hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;   if (HAL_CRC_Init(&hcrc) != HAL_OK)   {     Error_Handler();   }   /* USER CODE BEGIN CRC_Init 2 */   /* USER CODE END CRC_Init 2 */ } /**   * @brief I2C1 Initialization Function   * @param None   * @retval None   */ static void MX_I2C1_Init(void) {   /* USER CODE BEGIN I2C1_Init 0 */   /* USER CODE END I2C1_Init 0 */   /* USER CODE BEGIN I2C1_Init 1 */   /* USER CODE END I2C1_Init 1 */   hi2c1.Instance = I2C1;   hi2c1.Init.Timing = 0x00303D5B;   hi2c1.Init.OwnAddress1 = 0;   hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;   hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;   hi2c1.Init.OwnAddress2 = 0;   hi2c1.Init.OwnAddress2Masks = I2C_OA2_NOMASK;   hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;   hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;   if (HAL_I2C_Init(&hi2c1) != HAL_OK)   {     Error_Handler();   }   /** Configure Analogue filter   */   if (HAL_I2CEx_ConfigAnalogFilter(&hi2c1, I2C_ANALOGFILTER_ENABLE) != HAL_OK)   {     Error_Handler();   }   /** Configure Digital filter   */   if (HAL_I2CEx_ConfigDigitalFilter(&hi2c1, 0) != HAL_OK)   {     Error_Handler();   }   /* USER CODE BEGIN I2C1_Init 2 */   /* USER CODE END I2C1_Init 2 */ } /**   * @brief IWDG Initialization Function   * @param None   * @retval None   */ static void MX_IWDG_Init(void) {   /* USER CODE BEGIN IWDG_Init 0 */   /* USER CODE END IWDG_Init 0 */   /* USER CODE BEGIN IWDG_Init 1 */   /* USER CODE END IWDG_Init 1 */   hiwdg.Instance = IWDG;   hiwdg.Init.Prescaler = IWDG_PRESCALER_32;   hiwdg.Init.Window = 4095;   hiwdg.Init.Reload = 4095;   if (HAL_IWDG_Init(&hiwdg) != HAL_OK)   {     Error_Handler();   }   /* USER CODE BEGIN IWDG_Init 2 */   /* USER CODE END IWDG_Init 2 */ } /**   * @brief TIM3 Initialization Function   * @param None   * @retval None   */ static void MX_TIM3_Init(void) {   /* USER CODE BEGIN TIM3_Init 0 */   /* USER CODE END TIM3_Init 0 */   TIM_ClockConfigTypeDef sClockSourceConfig = {0};   TIM_MasterConfigTypeDef sMasterConfig = {0};   /* USER CODE BEGIN TIM3_Init 1 */   /* USER CODE END TIM3_Init 1 */   htim3.Instance = TIM3;   htim3.Init.Prescaler = 6400-1;   htim3.Init.CounterMode = TIM_COUNTERMODE_UP;   htim3.Init.Period = 2500-1;   htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;   htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;   if (HAL_TIM_Base_Init(&htim3) != HAL_OK)   {     Error_Handler();   }   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;   if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)   {     Error_Handler();   }   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;   if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)   {     Error_Handler();   }   /* USER CODE BEGIN TIM3_Init 2 */   /* USER CODE END TIM3_Init 2 */ } /**   * @brief USART1 Initialization Function   * @param None   * @retval None   */ static void MX_USART1_UART_Init(void) {   /* USER CODE BEGIN USART1_Init 0 */   /* USER CODE END USART1_Init 0 */   /* USER CODE BEGIN USART1_Init 1 */   /* USER CODE END USART1_Init 1 */   huart1.Instance = USART1;   huart1.Init.BaudRate = 115200;   huart1.Init.WordLength = UART_WORDLENGTH_8B;   huart1.Init.StopBits = UART_STOPBITS_1;   huart1.Init.Parity = UART_PARITY_NONE;   huart1.Init.Mode = UART_MODE_TX_RX;   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;   huart1.Init.OverSampling = UART_OVERSAMPLING_16;   huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;   huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;   huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;   if (HAL_UART_Init(&huart1) != HAL_OK)   {     Error_Handler();   }   if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)   {     Error_Handler();   }   if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)   {     Error_Handler();   }   if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)   {     Error_Handler();   }   /* USER CODE BEGIN USART1_Init 2 */   /* USER CODE END USART1_Init 2 */ } /**   * @brief USART2 Initialization Function   * @param None   * @retval None   */ static void MX_USART2_UART_Init(void) {   /* USER CODE BEGIN USART2_Init 0 */   /* USER CODE END USART2_Init 0 */   /* USER CODE BEGIN USART2_Init 1 */   /* USER CODE END USART2_Init 1 */   huart2.Instance = USART2;   huart2.Init.BaudRate = 115200;   huart2.Init.WordLength = UART_WORDLENGTH_8B;   huart2.Init.StopBits = UART_STOPBITS_1;   huart2.Init.Parity = UART_PARITY_NONE;   huart2.Init.Mode = UART_MODE_TX_RX;   huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;   huart2.Init.OverSampling = UART_OVERSAMPLING_16;   huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;   huart2.Init.ClockPrescaler = UART_PRESCALER_DIV1;   huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;   if (HAL_UART_Init(&huart2) != HAL_OK)   {     Error_Handler();   }   /* USER CODE BEGIN USART2_Init 2 */   /* USER CODE END USART2_Init 2 */ } /**   * Enable DMA controller clock   */ static void MX_DMA_Init(void) {   /* DMA controller clock enable */   __HAL_RCC_DMA1_CLK_ENABLE();   /* DMA interrupt init */   /* DMA1_Channel1_IRQn interrupt configuration */   HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 1, 0);   HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);   /* DMA1_Channel2_3_IRQn interrupt configuration */   HAL_NVIC_SetPriority(DMA1_Channel2_3_IRQn, 0, 0);   HAL_NVIC_EnableIRQ(DMA1_Channel2_3_IRQn); } /**   * @brief GPIO Initialization Function   * @param None   * @retval None   */ static void MX_GPIO_Init(void) {   GPIO_InitTypeDef GPIO_InitStruct = {0};   /* GPIO Ports Clock Enable */   __HAL_RCC_GPIOF_CLK_ENABLE();   __HAL_RCC_GPIOA_CLK_ENABLE();   __HAL_RCC_GPIOB_CLK_ENABLE();   __HAL_RCC_GPIOD_CLK_ENABLE();   /*Configure GPIO pin Output Level */   HAL_GPIO_WritePin(RUN_GPIO_Port, RUN_Pin, GPIO_PIN_RESET);   /*Configure GPIO pin Output Level */   HAL_GPIO_WritePin(WARN_GPIO_Port, WARN_Pin, GPIO_PIN_RESET);   /*Configure GPIO pin : RUN_Pin */   GPIO_InitStruct.Pin = RUN_Pin;   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;   GPIO_InitStruct.Pull = GPIO_NOPULL;   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;   HAL_GPIO_Init(RUN_GPIO_Port, &GPIO_InitStruct);   /*Configure GPIO pins : ADDR1_Pin ADDR2_Pin ADDR3_Pin ADDR4_Pin */   GPIO_InitStruct.Pin = ADDR1_Pin|ADDR2_Pin|ADDR3_Pin|ADDR4_Pin;   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;   GPIO_InitStruct.Pull = GPIO_PULLUP;   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);   /*Configure GPIO pins : VERSION1_Pin VERSION2_Pin */   GPIO_InitStruct.Pin = VERSION1_Pin|VERSION2_Pin;   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;   GPIO_InitStruct.Pull = GPIO_PULLUP;   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);   /*Configure GPIO pin : WARN_Pin */   GPIO_InitStruct.Pin = WARN_Pin;   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;   GPIO_InitStruct.Pull = GPIO_NOPULL;   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;   HAL_GPIO_Init(WARN_GPIO_Port, &GPIO_InitStruct); } /* USER CODE BEGIN 4 */ /* USER CODE BEGIN 4 */ //延时nus //nus为要延时的us数. //nus:0~190887435(最大值即2^32/fac_us@fac_us=22.5) void delay_us(uint32_t nus) {         uint32_t ticks;         uint32_t told,tnow,tcnt=0;         uint32_t reload=SysTick->LOAD;                                //LOAD的值         ticks=nus*fac_us;                                                 //需要的节拍数         told=SysTick->VAL;                                        //刚进入时的计数器值         while(1)         {                 tnow=SysTick->VAL;                 if(tnow!=told)                 {                         if(tnow<told)tcnt+=told-tnow;        //这里注意一下SYSTICK是一个递减的计数器就可以了.                         else tcnt+=reload-tnow+told;                         told=tnow;                         if(tcnt>=ticks)break;                        //时间超过/等于要延迟的时间,则退出.                 }         }; } //延时nms //nms:要延时的ms数 void delay_ms(uint16_t nms) {         uint32_t i;         for(i=0;i<nms;i++) delay_us(1000); } /* 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****/

赞0
3 回答

FM25CL64使用问题

未设置标签
水滴石穿 水滴石穿 回答时间: 2019-7-30 18:12

流水源 发表于 2019-7-30 17:07 FM25CL64与FM25CL16、08、04、02,不同的地方就是地址有2个字节,你看是不是这个原因。看你写入函数的代码 ... 谢谢提醒!确实是我的地址处理出的问题 rt_uint8_t cmd[5] = {WREN,WRITE,addr>>8,addr&0x0f,WRDI};复制代码 其中addr&0x0f复制代码反了

赞0
2 回答

stemwin位流图问题

未设置标签
tanic tanic 回答时间: 2019-5-9 17:32

问题描述清晰些,你做了那些尝试,程序死了没有?等等

赞0
水滴石穿 水滴石穿


阅读作者更多的帖子

所在话题

参与活动

  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16