main.c

  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "timer.h"
  6. #include "FreeRTOS.h"
  7. #include "task.h"
  8. /************************************************
  9. ALIENTEK 战舰STM32F103开发板 FreeRTOS实验4-1
  10. FreeRTOS中断测试-库函数版本
  11. 技术支持:www.openedv.com
  12. 淘宝店铺:http://eboard.taobao.com
  13. 关注微信公众平台微信号:"正点原子",免费获取STM32资料。
  14. 广州市星翼电子科技有限公司
  15. 作者:正点原子 @ALIENTEK
  16. ************************************************/
  17. //任务优先级
  18. #define START_TASK_PRIO 1
  19. //任务堆栈大小
  20. #define START_STK_SIZE 256
  21. //任务句柄
  22. TaskHandle_t StartTask_Handler;
  23. //任务函数
  24. void start_task(void *pvParameters);
  25. //任务优先级
  26. #define INTERRUPT_TASK_PRIO 2
  27. //任务堆栈大小
  28. #define INTERRUPT_STK_SIZE 256
  29. //任务句柄
  30. TaskHandle_t INTERRUPTTask_Handler;
  31. //任务函数
  32. void interrupt_task(void *p_arg);
  33. int main(void)
  34. {
  35. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4
  36. delay_init(); //延时函数初始化
  37. uart_init(115200); //初始化串口
  38. LED_Init(); //初始化LED
  39. TIM3_Int_Init(10000-1,7200-1); //初始化定时器3,定时器周期1S
  40. TIM5_Int_Init(10000-1,7200-1); //初始化定时器5,定时器周期1S
  41. //创建开始任务
  42. xTaskCreate((TaskFunction_t )start_task, //任务函数
  43. (const char* )"start_task", //任务名称
  44. (uint16_t )START_STK_SIZE, //任务堆栈大小
  45. (void* )NULL, //传递给任务函数的参数
  46. (UBaseType_t )START_TASK_PRIO, //任务优先级
  47. (TaskHandle_t* )&StartTask_Handler); //任务句柄
  48. vTaskStartScheduler(); //开启任务调度
  49. }
  50. //开始任务任务函数
  51. void start_task(void *pvParameters)
  52. {
  53. taskENTER_CRITICAL(); //进入临界区
  54. //创建中断测试任务
  55. xTaskCreate((TaskFunction_t )interrupt_task, //任务函数
  56. (const char* )"interrupt_task", //任务名称
  57. (uint16_t )INTERRUPT_STK_SIZE, //任务堆栈大小
  58. (void* )NULL, //传递给任务函数的参数
  59. (UBaseType_t )INTERRUPT_TASK_PRIO, //任务优先级
  60. (TaskHandle_t* )&INTERRUPTTask_Handler); //任务句柄
  61. vTaskDelete(StartTask_Handler); //删除开始任务
  62. taskEXIT_CRITICAL(); //退出临界区
  63. }
  64. //中断测试任务函数
  65. void interrupt_task(void *pvParameters)
  66. {
  67. static u32 total_num=0;
  68. while(1)
  69. {
  70. total_num+=1;
  71. if(total_num==5)
  72. {
  73. printf("关闭中断.............\r\n");
  74. portDISABLE_INTERRUPTS(); //关闭中断
  75. delay_xms(5000); //延时5s
  76. printf("打开中断.............\r\n"); //打开中断
  77. portENABLE_INTERRUPTS();
  78. }
  79. LED0=~LED0;
  80. vTaskDelay(1000);
  81. }
  82. }

程序下载:

FreeRTOS实验4-1 FreeRTOS中断测试实验.zip