[STM32F1] stm32cubemx移植freertos不成功

[复制链接]
1796|8
 楼主| 比神乐 发表于 2024-11-8 14:40 | 显示全部楼层 |阅读模式
我先说说我移植的步骤
4.jpg
双击STM32F103C8
5.jpg
设置PC13为输出口
6.jpg
系统内核TIMER1
7.jpg
这个警告什么意思
8.jpg
添加一个任务
9.jpg
时钟配置
10.jpg
工程设置
11.jpg
生成代码
12.jpg
打开工程
主程序代码:
  1. #include "main.h"
  2. #include "cmsis_os.h"

  3. /* Private includes ----------------------------------------------------------*/
  4. /* USER CODE BEGIN Includes */

  5. /* USER CODE END Includes */

  6. /* Private typedef -----------------------------------------------------------*/
  7. /* USER CODE BEGIN PTD */

  8. /* USER CODE END PTD */

  9. /* Private define ------------------------------------------------------------*/
  10. /* USER CODE BEGIN PD */

  11. /* USER CODE END PD */

  12. /* Private macro -------------------------------------------------------------*/
  13. /* USER CODE BEGIN PM */

  14. /* USER CODE END PM */

  15. /* Private variables ---------------------------------------------------------*/
  16. osThreadId defaultTaskHandle;
  17. /* USER CODE BEGIN PV */

  18. /* USER CODE END PV */

  19. /* Private function prototypes -----------------------------------------------*/
  20. void SystemClock_Config(void);
  21. static void MX_GPIO_Init(void);
  22. void StartDefaultTask(void const * argument);

  23. /* USER CODE BEGIN PFP */

  24. /* USER CODE END PFP */

  25. /* Private user code ---------------------------------------------------------*/
  26. /* USER CODE BEGIN 0 */

  27. /* USER CODE END 0 */

  28. /**
  29.   * [url=home.php?mod=space&uid=247401]@brief[/url]  The application entry point.
  30.   * @retval int
  31.   */
  32. int main(void)
  33. {
  34.   /* USER CODE BEGIN 1 */

  35.   /* USER CODE END 1 */
  36.   

  37.   /* MCU Configuration--------------------------------------------------------*/

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

  40.   /* USER CODE BEGIN Init */

  41.   /* USER CODE END Init */

  42.   /* Configure the system clock */
  43.   SystemClock_Config();

  44.   /* USER CODE BEGIN SysInit */

  45.   /* USER CODE END SysInit */

  46.   /* Initialize all configured peripherals */
  47.   MX_GPIO_Init();
  48.   /* USER CODE BEGIN 2 */

  49.   /* USER CODE END 2 */

  50.   /* USER CODE BEGIN RTOS_MUTEX */
  51.   /* add mutexes, ... */
  52.   /* USER CODE END RTOS_MUTEX */

  53.   /* USER CODE BEGIN RTOS_SEMAPHORES */
  54.   /* add semaphores, ... */
  55.   /* USER CODE END RTOS_SEMAPHORES */

  56.   /* USER CODE BEGIN RTOS_TIMERS */
  57.   /* start timers, add new ones, ... */
  58.   /* USER CODE END RTOS_TIMERS */

  59.   /* USER CODE BEGIN RTOS_QUEUES */
  60.   /* add queues, ... */
  61.   /* USER CODE END RTOS_QUEUES */

  62.   /* Create the thread(s) */
  63.   /* definition and creation of defaultTask */
  64.   osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
  65.   defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);

  66.   /* USER CODE BEGIN RTOS_THREADS */
  67.   /* add threads, ... */
  68.   /* USER CODE END RTOS_THREADS */

  69.   /* Start scheduler */
  70.   osKernelStart();
  71.   
  72.   /* We should never get here as control is now taken by the scheduler */

  73.   /* Infinite loop */
  74.   /* USER CODE BEGIN WHILE */
  75.   while (1)
  76.   {
  77.     /* USER CODE END WHILE */

  78.     /* USER CODE BEGIN 3 */
  79.   }
  80.   /* USER CODE END 3 */
  81. }

  82. /**
  83.   * @brief System Clock Configuration
  84.   * @retval None
  85.   */
  86. void SystemClock_Config(void)
  87. {
  88.   RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  89.   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  90.   /** Initializes the CPU, AHB and APB busses clocks
  91.   */
  92.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  93.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  94.   RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  95.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  96.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  97.   {
  98.     Error_Handler();
  99.   }
  100.   /** Initializes the CPU, AHB and APB busses clocks
  101.   */
  102.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  103.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  104.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  105.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  106.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  107.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  108.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  109.   {
  110.     Error_Handler();
  111.   }
  112. }

  113. /**
  114.   * @brief GPIO Initialization Function
  115.   * @param None
  116.   * @retval None
  117.   */
  118. static void MX_GPIO_Init(void)
  119. {
  120.   GPIO_InitTypeDef GPIO_InitStruct = {0};

  121.   /* GPIO Ports Clock Enable */
  122.   __HAL_RCC_GPIOC_CLK_ENABLE();

  123.   /*Configure GPIO pin Output Level */
  124.   HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);

  125.   /*Configure GPIO pin : PC13 */
  126.   GPIO_InitStruct.Pin = GPIO_PIN_13;
  127.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  128.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  129.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  130.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  131. }

  132. /* USER CODE BEGIN 4 */

  133. /* USER CODE END 4 */

  134. /* USER CODE BEGIN Header_StartDefaultTask */
  135. /**
  136.   * @brief  Function implementing the defaultTask thread.
  137.   * @param  argument: Not used
  138.   * @retval None
  139.   */
  140. /* USER CODE END Header_StartDefaultTask */
  141. void StartDefaultTask(void const * argument)
  142. {
  143.    
  144.    
  145.    

  146.   /* USER CODE BEGIN 5 */
  147.   /* Infinite loop */
  148.   for(;;)
  149.   {
  150.     osDelay(1);
  151.   }
  152.   /* USER CODE END 5 */
  153. }

  154. /**
  155.   * @brief  Period elapsed callback in non blocking mode
  156.   * [url=home.php?mod=space&uid=536309]@NOTE[/url]   This function is called  when TIM1 interrupt took place, inside
  157.   * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
  158.   * a global variable "uwTick" used as application time base.
  159.   * @param  htim : TIM handle
  160.   * @retval None
  161.   */
  162. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  163. {
  164.   /* USER CODE BEGIN Callback 0 */

  165.   /* USER CODE END Callback 0 */
  166.   if (htim->Instance == TIM1) {
  167.     HAL_IncTick();
  168.   }
  169.   /* USER CODE BEGIN Callback 1 */

  170.   /* USER CODE END Callback 1 */
  171. }

  172. /**
  173.   * @brief  This function is executed in case of error occurrence.
  174.   * @retval None
  175.   */
  176. void Error_Handler(void)
  177. {
  178.   /* USER CODE BEGIN Error_Handler_Debug */
  179.   /* User can add his own implementation to report the HAL error return state */

  180.   /* USER CODE END Error_Handler_Debug */
  181. }

  182. #ifdef  USE_FULL_ASSERT
  183. /**
  184.   * @brief  Reports the name of the source file and the source line number
  185.   *         where the assert_param error has occurred.
  186.   * @param  file: pointer to the source file name
  187.   * @param  line: assert_param error line source number
  188.   * @retval None
  189.   */
  190. void assert_failed(uint8_t *file, uint32_t line)
  191. {
  192.   /* USER CODE BEGIN 6 */
  193.   /* User can add his own implementation to report the file name and line number,
  194.      tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  195.   /* USER CODE END 6 */
  196. }
  197. #endif /* USE_FULL_ASSERT */

  198. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
在任务里添加一句
  1. void StartDefaultTask(void const * argument)
  2. {
  3.    
  4.    
  5.    

  6.   /* USER CODE BEGIN 5 */
  7.   /* Infinite loop */
  8.   for(;;)
  9.   {
  10.                 HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
  11.     osDelay(1);
  12.   }
  13.   /* USER CODE END 5 */
  14. }
软件仿真
13.jpg
proteus仿真
14.jpg
13口一直都是低电平
请问高手,哪里有错
stormwind123 发表于 2024-11-9 11:43 | 显示全部楼层
配置问题
classroom 发表于 2024-11-9 11:45 | 显示全部楼层
确保FreeRTOS的中断优先级配置正确,以避免中断冲突或优先级反转问题
laocuo1142 发表于 2024-11-9 11:45 | 显示全部楼层
检查STM32开发板与电脑之间的连接是否稳定,确保能够正确下载和调试程序。
 楼主| 比神乐 发表于 2024-11-9 11:53 | 显示全部楼层

你能说的具体点嘛
probedog 发表于 2024-11-9 14:00 | 显示全部楼层
检查任务函数是否正确实现,没有死循环或无限等待的问题。
flycamelaaa 发表于 2024-11-9 15:00 | 显示全部楼层
检查编译器设置是否正确,包括优化级别、调试信息等。
两只袜子 发表于 2024-11-9 16:00 | 显示全部楼层
检查FreeRTOS的日志输出看能不能找出问题所在
jcky001 发表于 2024-11-9 19:00 | 显示全部楼层
用JTAG调试看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

470

主题

3537

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部