找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1986|回复: 0
收起左侧

STM32F429 FreeRTOS工程模板 代码下载

[复制链接]
ID:603102 发表于 2020-10-16 14:25 | 显示全部楼层 |阅读模式
1,使用FreeRTOS
2,最大任务32个,可在FreeRTOSConfig中修改
3,默认创建两个任务
4,串口FIFO,任务1默认功能为打印串口1接收到的数据
5,频率180M,频率不同可能造成无法下载的问题

由于文件大小限制,通用库函数需要自行添加
51hei.png

单片机源程序如下:
  1. #include "includes.h"
  2. #include "bsp.h"


  3. void SystemClock_Config(void);


  4. //任务函数
  5. void start_task(void *pvParameters);
  6. void task1_task(void *pvParameters);
  7. void task2_task(void *pvParameters);
  8. void task3_task(void *pvParameters);
  9. void task4_task(void *pvParameters);
  10. void task5_task(void *pvParameters);
  11. void task6_task(void *pvParameters);
  12. void task7_task(void *pvParameters);
  13. void task8_task(void *pvParameters);



  14. //任务句柄
  15. TaskHandle_t StartTask_Handler =  NULL;
  16. TaskHandle_t Task1Task_Handler =  NULL;
  17. TaskHandle_t Task2Task_Handler =  NULL;
  18. TaskHandle_t Task3Task_Handler =  NULL;
  19. TaskHandle_t Task4Task_Handler =  NULL;
  20. TaskHandle_t Task5Task_Handler =  NULL;
  21. TaskHandle_t Task6Task_Handler =  NULL;
  22. TaskHandle_t Task7Task_Handler =  NULL;
  23. TaskHandle_t Task8Task_Handler =  NULL;




  24. //任务优先级,最大32个优先级,最多32个认为
  25. #define StartTask_PRO        1
  26. #define Task1_PRO                2
  27. #define Task2_PRO                3
  28. #define Task3_PRO                4
  29. #define Task4_PRO                5
  30. #define Task5_PRO                6
  31. #define Task6_PRO                7
  32. #define Task7_PRO                8
  33. #define Task8_PRO                9


  34. //任务延迟
  35. #define TASK1_DELAY                50
  36. #define TASK2_DELAY                100
  37. #define TASK3_DELAY                50
  38. #define TASK4_DELAY                50

  39. #define TASK5_DELAY                50
  40. #define TASK6_DELAY                50
  41. #define TASK7_DELAY                50
  42. #define TASK8_DELAY                5000


  43. //任务堆栈大小,默认为512
  44. #define TASK_STACK_SIZE                64*8




  45. int main(void)
  46. {
  47.     HAL_Init();
  48.     SystemClock_Config();
  49.     delay_init(SystemCoreClock/100000);
  50.     BSP_Init();


  51.     //创建开始任务
  52.     xTaskCreate((TaskFunction_t )start_task,            //任务函数
  53.                 (const char*    )"start_task",          //任务名称
  54.                 (uint16_t       )TASK_STACK_SIZE,       //任务堆栈大小
  55.                 (void*          )NULL,                  //传递给任务函数的参数
  56.                 (UBaseType_t    )StartTask_PRO,              //任务优先级
  57.                 (TaskHandle_t*  )&StartTask_Handler);   //任务句柄
  58.                                
  59.     vTaskStartScheduler();                                                  //开启任务调度

  60. }


  61. //task1任务函数
  62. void task1_task(void *pvParameters)
  63. {
  64.         uint8_t buflen;
  65.         uint8_t buf[64];

  66.         while(1)
  67.         {
  68.                 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_SET);
  69.                
  70.                 #if SYS_DEBUG
  71.                 printf("F429-1\r\n");
  72.                 printf("                            \r\n");
  73.                 #endif
  74.                
  75.                
  76.                 buflen=comReadBuf(COM1,buf);
  77.                 if(buflen>0)
  78.                 {
  79.                         printf("BUFLEN:%d\r\n",buflen);
  80.                         comSendBuf(COM1,buf,buflen);
  81.                         printf("\r\n");
  82.                         buflen=0;
  83.                         comClearRxFifo(COM1);
  84.                 }
  85.         vTaskDelay(TASK1_DELAY);                          
  86.         }
  87.        
  88. }




  89. void start_task(void *pvParameters)
  90. {
  91.     while(1)
  92.     {
  93.         //进入临界区
  94.         taskENTER_CRITICAL();
  95.                
  96.                 //创建TASK1任务
  97.                 xTaskCreate((TaskFunction_t )        task1_task,            
  98.                                         (const char*    )        "task1_task",           
  99.                                         (uint16_t       )        TASK_STACK_SIZE,        
  100.                                         (void*          )        NULL,                  
  101.                                         (UBaseType_t    )        Task1_PRO,        
  102.                                         (TaskHandle_t*  )        &Task1Task_Handler);
  103.                                        
  104.                                        
  105.                                        
  106.                                        
  107.                                        
  108.                                        
  109.                                        
  110.                                        
  111.                                        
  112.                                        
  113.                 vTaskDelete(StartTask_Handler); //删除开始任务
  114.                 taskEXIT_CRITICAL();            //退出临界区       
  115.                
  116.     }
  117. }






  118. void SystemClock_Config(void)
  119. {
  120.     RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  121.     RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};


  122.     __HAL_RCC_PWR_CLK_ENABLE();
  123.     __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  124.     /** Initializes the CPU, AHB and APB busses clocks
  125.     */
  126.     RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  127.     RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  128.     RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  129.     RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  130.     RCC_OscInitStruct.PLL.PLLM = 25;
  131.     RCC_OscInitStruct.PLL.PLLN = 360;
  132.     RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  133.     RCC_OscInitStruct.PLL.PLLQ = 4;
  134.     if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  135.     {

  136.     }
  137.     /** Activate the Over-Drive mode
  138.     */
  139.     if (HAL_PWREx_EnableOverDrive() != HAL_OK)
  140.     {

  141.     }
  142.     /** Initializes the CPU, AHB and APB busses clocks
  143.     */
  144.     RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  145.     RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  146.     RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  147.     RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  148.     RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

  149.     if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  150.     {

  151.     }
  152. }

  153. #ifdef  USE_FULL_ASSERT
  154. /**
  155.   * @brief  Reports the name of the source file and the source line number
  156.   *         where the assert_param error has occurred.
  157.   * @param  file: pointer to the source file name
  158.   * @param  line: assert_param error line source number
  159.   * @retval None
  160.   */
  161. void assert_failed(uint8_t *file, uint32_t line)
  162. {
  163.     /* USER CODE BEGIN 6 */
  164.     /* User can add his own implementation to report the file name and line number,
  165.        tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  166.     /* USER CODE END 6 */
  167. }
  168. #endif /* USE_FULL_ASSERT */
复制代码

所有资料51hei提供下载:
F429_RTOS.zip (43.62 KB, 下载次数: 37)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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